新聞中心

        EEPW首頁 > 學習方法與實踐 > 觸摸屏編程圖象處理的一些小技巧

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

        ——
        作者:xqi 時間:2007-12-20 來源:eNet硅谷動力 收藏

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

         
        [關鍵字] 觸摸屏 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的透明性。 

          end;



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 松潘县| 敖汉旗| 大荔县| 璧山县| 晋中市| 巢湖市| 连云港市| 玉山县| 通山县| 额尔古纳市| 惠来县| 上林县| 肇源县| 当雄县| 新巴尔虎左旗| 介休市| 安乡县| 清河县| 鱼台县| 东宁县| 双江| 克山县| 龙川县| 玛纳斯县| 建湖县| 澄江县| 永昌县| 金昌市| 时尚| 平凉市| 隆德县| 垣曲县| 车险| 平定县| 巴楚县| 乐昌市| 扬中市| 广德县| 香河县| 比如县| 池州市|