畫直線時用戶只有在松開鼠標才能看見直線對直線的變化不能進行實時觀測這是因為鼠標移動時程序沒有進行某種應Delphi定義了OnMouseMove事件來響應鼠標移動以下代碼可使用戶隨時觀測直線的變化
procedure TFormFormMouseMove(Sender:Tobject)
begin
Drowto(XY)
Moveto(origin)
end
origin是起始點
繪圖功能的實現
繪圖軟件常根據用戶的要求改變繪圖工具Graphexdpr例程中當用戶按下某個按鈕時可選擇繪圖工具中的畫筆或畫刷在程序類型說明部分定義了五種繪圖工具
type
TDrawingTool = (dtLinedtRectangledtEllipsdtRoundRectdtPolygon)
當選中某種按鈕則選中了相應的繪圖工具如
procedure TFormLineButtonClick(Sender: TObject)
begin
DrawingTool := dtLine;
end;
procedure TFormRectangleButtonClick(Sender: TObject)
begin
DrawingTool := dtRectangle;
end;
procedure TFormEllipseButtonClick(Sender: TObject)
begin
DrawingTool := dtEllipse;
end;
procedure TFormRoundRectButtonClick(Sender: TObject)
begin
DrawingTool := dtRoundRect;
end;
procedure TFormPolygonButtonClick(Sender: TObject)
begin
DrawingTool :=dtPolygon;
end;
DrawShape過程定義了每種繪圖工具的動作
procedure TFormDrawShape(TopLeft BottomRight: TPoint; AMode: TPenMode)
begin
with ImageCanvas do
begin
PenMode := AMode;
case DrawingTool of
dtLine: begin
MoveTo(TopLeftX TopLeftY)
LineTo(BottomRightX BottomRightY)
end;
dtRectangle: Rectangle(TopLeftX TopLeftY BottomRightX BottomRightY)
dtEllipse: Ellipse(TopLeftX TopLeftY BottomRightX BottomRightY)
dtRoundRect: RoundRect(TopLeftX TopLeftY BottomRightX BottomRightY
(TopLeftX BottomRightX) div (TopLeftY BottomRightY) div )
dtPolygon:Polygon([Point()TopLeftBottomRight]) end;
end;
end;
程序剛運行時只有一個工具欄當用戶單擊畫筆和畫刷時則出現相應的工具欄其代碼如下
procedure TFormPenButtonClick(Sender: TObject)
begin
PenBarVisible := PenButtonDown;
end;
procedure TFormBrushButtonClick(Sender: TObject)
begin
BrushBarVisible := BrushButtonDown;
end;
在設計繪圖程序時還要解決一些問題如為了在鼠標移動時能觀測圖形的變化我們定義了OnMouseMove事件但會出現這樣的現象當鼠標進入繪圖區時用戶未按下鼠標鍵畫布上卻出現繪制的圖形這是我們不希望看到的其原因是沒有對鼠標按鈕是否按下進行判斷因此在窗體對象中定義了drawing的域當鼠標按鈕按下時drawing 設置成真值只有drawing為真鼠標移動才執行繪圖功能當鼠標鍵松開時drawing設置成假鼠標移動將不執行繪圖動作
[] [] []
From:http://tw.wingwit.com/Article/program/Delphi/201311/25246.html