程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 觸摸屏編程圖象處理的一些小技巧

觸摸屏編程圖象處理的一些小技巧

編輯:Delphi

  觸摸屏大家是經常用到的,但不一定知道的是通過鼠標的單擊和移動是怎樣才能實現觸摸屏的種種功能。下面就讓我們來簡單介紹在觸摸屏編程過程中圖形、圖象處理技術的一些小技巧。

  1.怎樣使窗體全屏顯示,即根據顯示器的大小來確定窗體的大小,這裡介紹三種方法來實現:

  (1)BorderStyle := bsNone;

  Windowstate := wsMaximized;

  (2)BorderStyle := bsNone;

  Left := 0;

  Top := 0;

  Width := Screen.Width;

  Height := Screen.Height;

  (3)BorderStyle:=bsNone;

  SetBounds(0,0,Screen.Width,Screen.Height);

  2.實現按ESC鍵使全屏窗體退出全屏,則要根據ESC的鍵值27來實現,代碼如下:

  procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);

  begin

  if key=27 then

  close;//關閉窗口;

  end;

  另外一定要把Form1的keypreview設置成為True;keyprevIEw默認為False。

  3.當鼠標移動到某組件區域范圍內(如Image組件),如何改變鼠標的形狀呢?主要是設置相應組件的cursor屬性,具體方法如下:

  (1)如果是要使用系統已定義的光標,可用:Image1.cursor:=已定義光標名;

  (2)如果是使用自定義的光標,可用以下方法:

  將制作好光標調入

   const

   newcur = 1;(必須大於0)

  screen.cursors[newcur]:= loadicon()或Loadcursorfromfile(); //調入的圖標的擴展名必須為ani,ico,cur

  image1.cursor:=newcur;

  4.在查看較大圖象時,如果窗體比圖象小,就不能完全顯示圖象。如果將較大的圖象壓縮來顯示到窗體上的話,圖象就會模糊不清。將圖象的一部分顯示到窗體上,需要時用鼠標移動圖象來浏覽其他部分,這樣可以浏覽全部圖象有可以達到清晰的效果。如果要使鼠標移動圖象,需要用到三個事件,即:OnMouseDown、OnMouseUp、OnMouseMove,具體代碼如下:

  procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;

   Shift: TShiftState; X, Y: Integer);

  begin

   moveFlag:=true;

   OX:=X;

   OY:=Y;

  end;

  procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,

   Y: Integer);

  begin

  if moveFlag then

   begin

   image1.Left:=image1.Left+(X-OX);

   image1.Top:=image1.Top+(Y-OY);

   end;

  end;

  procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;

   Shift: TShiftState; X, Y: Integer);

  begin

   moveFlag:=False;

  end;

  5.如何實現跟隨鼠標軌跡在透明的Image組件上繪制不規則曲線(即在觸摸屏的背景圖片上做標記),並且繪線的同時沒有閃爍現象,首先讓我們實現Image組件在畫線是保持透明,這裡用image1.Canvas.Brush.Color來實現;而根據鼠標軌跡繪制不規則曲線,主要用到TCanva的兩個重要方法:MoveTo、LineTo。具體代碼如下:

  procedure TForm1.DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode);

  begin

  with image1.Canvas do

  begin

   Pen.Mode := AMode;

   pen.Color:=clred;

   pen.Width:=10;

   MoveTo(TopLeft.X, TopLeft.Y);

   LineTo(BottomRight.X, BottomRight.Y);

  end;

  end;

  procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,

   Y: Integer);

  begin

  if Drawing then

  begin

  MovePt := Point(X, Y);

   DrawShape(Origin, MovePt, pmcopy);

  origin:=movept;

  end;

  end;

  procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;

   Shift: TShiftState; X, Y: Integer);

  begin

  Drawing := True;

  image1.Canvas.MoveTo(X, Y);

  Origin := Point(X, Y);

  MovePt := Origin;

  end;

  procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;

   Shift: TShiftState; X, Y: Integer);

  begin

  if Drawing then

  DrawShape(Origin, Point(X, Y), pmCopy);

  Drawing := False;

  end;

  procedure TForm1.FormCreate(Sender: TObject);

  begin

  panel1.DoubleBuffered:=true;//在Image1所在的容器設置雙緩沖,防止畫線時閃爍。

  image1.Canvas.Brush.Color:=panel1.Color;

  image1.Canvas.FillRect(rect(0,0,image1.Width,image1.Height));//實現繪線的同時保持Image1的透明性。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved