程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第十九章-Delphi自定義部件開發(四)(4)

第十九章-Delphi自定義部件開發(四)(4)

編輯:Delphi

④ 設置Owned對象的屬性

處理Pen和Brush對象的最後一步是處理Pen和Brush發生改變時對Shape控制的重畫問題。Pen和Brush對象都有OnChange事件,因此能夠在Shape控制中聲明OnChange事件指向的事件處理過程。

下面給Shape控制增加了該方法並更新了部件的constructor以使Pen和Brush事件指向新方法:

type

TSampleShape = class(TGraphicControl)

published

procdeure StyleChanged(Sender: TObject);

end;

implemintation

constructor TSampleShape.Create(AOwner:TComponent);

begin

inherited Create(AOwner);

Width := 65;

Height := 65;

Fpen := TPen.Create;

FPen.OnChange := StyleChanged;

Fbrush := TBrush.Create;

FBrush.OnChange := StyleChanged;

end;

procedure TSampleShape.StyleChanged(Sender: TObject);

begin

Invalidate(true);

end;

當變化發生時,部件重畫以響應Pen或Brush的改變。

4. 怎樣畫部件圖形

圖形控制基本要素是在屏幕上畫圖形的方法。抽象類TGraphicControl定義了名為Paint的虛方法,可以覆蓋該方法來畫所要的圖形。

Shape控制的paint方法需要做:

● 使用用戶選擇的Pen和Brush

● 使用所選的形狀

● 調整座標。這樣,方形和圓可以使用相同的Width和Height

覆蓋paint方法需要兩步:

● 在部件聲明中增加Paint方法的聲明

● 在implementation部分寫Paint方法的實現

下面是Paint方法的聲明:

type

TSampleShape = class(TGraphicControl)

protected

procedure Paint; override;

end;

然後,編寫Paint的實現:

procedure TSampleShape.Paint;

begin

with Canvas do

begin

Pen := FPen;

Brush := FBrush;

case FShape of

sstRectangle, sstSquare :

Rectangle(0, 0, Width, Height);

sstRoundRect, sstRoundSquare:

RoundRect(0, 0, Width, Height, Width div 4, Height div 4);

sstCircle, sstEllipse :

Ellipse(0, 0, Width, Height);

end;

end;

end; 

無論任何控制需要更新圖形時,Paint就被調用。當控制第一次出現,或者當控制前面的窗口消失時,Windows會通知控制畫自己。也可以通過調用Invalidate方法強制重畫,就象StyleChanged方法所做的那樣。

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