首頁 考試吧論壇 Exam8視線 考試商城 網絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載 | ||
![]() |
2011中考 | 2011高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試 MPA考試 | 中科院 |
|
![]() |
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT 新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 | 法語 | 德語 | 韓語 |
|
![]() |
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證 華為認證 | Java認證 |
|
![]() |
公務員 | 報關員 | 銀行從業資格 | 證券從業資格 | 期貨從業資格 | 司法考試 | 法律顧問 | 導游資格 報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師 人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業資格 | 廣告師職業水平 駕駛員 | 網絡編輯 |
|
![]() |
衛生資格 | 執業醫師 | 執業藥師 | 執業護士 | |
![]() |
會計從業資格考試(會計證) | 經濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師 注冊資產評估師 | 高級會計師 | ACCA | 統計師 | 精算師 | 理財規劃師 | 國際內審師 |
|
![]() |
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監理工程師 | 安全工程師 質量工程師 | 物業管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產估價師 | 土地估價師 | 巖土師 設備監理師 | 房地產經紀人 | 投資項目管理師 | 土地登記代理人 | 環境影響評價師 | 環保工程師 城市規劃師 | 公路監理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師 |
|
![]() |
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲 |
3. 公布Pen和Brush
在缺省情況下,一個Canvas具有一個細的、黑筆和實心的白刷,為了使用戶在使用Shape控制時能改變Canvas的這些性質,必須能在設計時提供這些對象;然后在畫時使用這些對象,這樣附屬的Pen或Brush被稱為Owned對象。
管理Owned對象需要下列三步:
● 聲明對象域
● 聲明訪問屬性
● 初始化Owned對象
⑴ 聲明Owned對象域
擁有的每一個對象必須有對象域的聲明,該域在部件存在時總指向Owned對象。通常,部件在constructor中創建它,在destructor中撤消它。
Owned對象的域總是定義為私有的,如果要使用戶或其它部件訪問該域,通常要提供訪問屬性。
下面的代碼聲明了Pen和Brush的對象域:
type
TSampleShape=class(TGraphicControl)
private
FPen: TPen;
FBrush: TBrush;
end;
⑵ 聲明訪問屬性
可以通過聲明與Owned對象相同類型的屬性來提供對Owned對象的訪問能力。這給使用部件的開發者提供在設計時或運行時訪問對象的途徑。
下面給Shape控制提供了訪問Pen和Brush的方法
type
TSampleShape=class(TGraphicControl)
private
procedure SetBrush(Value: TBrush);
procedure SetPen(Value: TPen);
published
property Brush: TBrush read FBrush write SetBrush;
property Pen: TPen read FPen write SetPen;
end;
然后在庫單元的implementation部分寫SetBrush和SetPen方法:
procedure TSampleShape.SetBrush(Value: TBrush);
begin
FBrush.Assign(Value);
end;
procedure TSampleShape.SetPen(Value: TPen);
begin
FPen.Assign(Value);
end;
⑶ 初始化Owned對象
部件中增加了的新對象,必須在部件constructor中建立,這樣用戶才能在運行時與對象交互。相應地,部件的destructor必須在撤消自身之前撤消Owned對象。
因為Shape控制中加入了Pen和Brush對象,因此,要在constructor中初始化它們,在destructor中撤消它們。
① 在Shape控制的constructor中創建Pen和Brush
constructor TSampleShape.Create(Aowner: TComponent);
begin
inherited Create(AOwner);
Width := 65;
Height := 65;
FPen := TPen.Create;
FBrush := TBrush.Create;
end;
② 在部件對象的聲明中覆蓋destructor
type
TSampleShape=class(TGraphicControl)
public
construstor.Create(Aowner: TComponent); override;
destructor.destroy; override;
end;
③ 在庫單元中的實現部分編寫新的destructor
destructor TSampleShape.destroy;
begin
FPen.Free;
FBrush.Free;
inherited destroy;
end;
④ 設置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方法所做的那樣。
相關推薦:2010年9月計算機等級考試試題及答案解析專題北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |