[摘要] 触摸屏大家是经常用到的,但不一定知道的是通过鼠标的单击和移动是怎样才能实现触摸屏的种种功能。下面就让我们来简单介绍在触摸屏编程过程中图形、图象处理技术的一些小技巧。
触摸屏大家是经常用到的,但不一定知道的是通过鼠标的单击和移动是怎样才能实现触摸屏的种种功能。下面就让我们来简单介绍在触摸屏编程过程中图形、图象处理技术的一些小技巧。 原文位置 原文位置 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的透明性。 原文位置 原文位置 end;
|