觸摸屏編程圖象處理的一些小技巧
[摘要] 觸摸屏大家是經(jīng)常用到的,但不一定知道的是通過(guò)鼠標(biāo)的單擊和移動(dòng)是怎樣才能實(shí)現(xiàn)觸摸屏的種種功能。下面就讓我們來(lái)簡(jiǎn)單介紹在觸摸屏編程過(guò)程中圖形、圖象處理技術(shù)的一些小技巧。
[關(guān)鍵字] 觸摸屏 Delphi 編程技巧
觸摸屏大家是經(jīng)常用到的,但不一定知道的是通過(guò)鼠標(biāo)的單擊和移動(dòng)是怎樣才能實(shí)現(xiàn)觸摸屏的種種功能。下面就讓我們來(lái)簡(jiǎn)單介紹在觸摸屏編程過(guò)程中圖形、圖象處理技術(shù)的一些小技巧。
1.怎樣使窗體全屏顯示,即根據(jù)顯示器的大小來(lái)確定窗體的大小,這里介紹三種方法來(lái)實(shí)現(xiàn):
?。?)BorderStyle := bsNone;
WindowState := wsMaximized;
?。?)BorderStyle := bsNone;
Left := 0;
Top := 0;
Width := Screen.Width;
Height := Screen.Height;
(3)BorderStyle:=bsNone;
SetBounds(0,0,Screen.Width,Screen.Height);
2.實(shí)現(xiàn)按ESC鍵使全屏窗體退出全屏,則要根據(jù)ESC的鍵值27來(lái)實(shí)現(xiàn),代碼如下:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
begin
if key=27 then
close;//關(guān)閉窗口;
end;
另外一定要把Form1的keypreview設(shè)置成為T(mén)rue;keypreview默認(rèn)為False。
3.當(dāng)鼠標(biāo)移動(dòng)到某組件區(qū)域范圍內(nèi)(如Image組件),如何改變鼠標(biāo)的形狀呢?主要是設(shè)置相應(yīng)組件的cursor屬性,具體方法如下:
?。?)如果是要使用系統(tǒng)已定義的光標(biāo),可用:Image1.cursor:=已定義光標(biāo)名;
?。?)如果是使用自定義的光標(biāo),可用以下方法:
將制作好光標(biāo)調(diào)入
const
newcur = 1;(必須大于0)
screen.cursors[newcur]:= loadicon()或Loadcursorfromfile(); //調(diào)入的圖標(biāo)的擴(kuò)展名必須為ani,ico,cur
image1.cursor:=newcur;
4.在查看較大圖象時(shí),如果窗體比圖象小,就不能完全顯示圖象。如果將較大的圖象壓縮來(lái)顯示到窗體上的話,圖象就會(huì)模糊不清。將圖象的一部分顯示到窗體上,需要時(shí)用鼠標(biāo)移動(dòng)圖象來(lái)瀏覽其他部分,這樣可以瀏覽全部圖象有可以達(dá)到清晰的效果。如果要使鼠標(biāo)移動(dòng)圖象,需要用到三個(gè)事件,即: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.如何實(shí)現(xiàn)跟隨鼠標(biāo)軌跡在透明的Image組件上繪制不規(guī)則曲線(即在觸摸屏的背景圖片上做標(biāo)記),并且繪線的同時(shí)沒(méi)有閃爍現(xiàn)象,首先讓我們實(shí)現(xiàn)Image組件在畫(huà)線是保持透明,這里用image1.Canvas.Brush.Color來(lái)實(shí)現(xiàn);而根據(jù)鼠標(biāo)軌跡繪制不規(guī)則曲線,主要用到TCanva的兩個(gè)重要方法: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所在的容器設(shè)置雙緩沖,防止畫(huà)線時(shí)閃爍。
image1.Canvas.Brush.Color:=panel1.Color;
image1.Canvas.FillRect(rect(0,0,image1.Width,image1.Height));//實(shí)現(xiàn)繪線的同時(shí)保持Image1的透明性。
end;
評(píng)論