19.3.2 創(chuàng)建圖形部件
圖形控制是一類簡(jiǎn)單的部件。因?yàn)榧儓D形部件從不需要得到鍵盤(pán)焦點(diǎn),所以它沒(méi)有也不要窗口句柄。包含圖形控制的應(yīng)用程序用戶仍然可以用鼠標(biāo)操作控制,但沒(méi)有鍵盤(pán)界面。
在本例中提供的圖形部件是TShape。Shape部件位于Component Palette的Additional頁(yè)。本例中的Shape部件有所不同,因此稱其為T(mén)SampleShape。
創(chuàng)建圖形部件需要下列三個(gè)步驟:
● 創(chuàng)建和注冊(cè)部件
● 公布(publishing)繼承的屬性
● 增加圖形功能
19.3.2.1 創(chuàng)建和注冊(cè)部件
每個(gè)部件的創(chuàng)建都從相同的方式開(kāi)始,在本例中如下:
● 建立名為Shapes的部件單元
● 從TGraphicControl 繼承,將新部件稱為T(mén)SampleShape
● 在Component Palette的Samples頁(yè)上注冊(cè)TSampleShape
unit Shapes
intertace
use SysUtils, WinTypes, WinProcs, Messages, Classes,
Graphics,Controls,F(xiàn)orms;
type
TSampleShape=class(TGraphicControl)
end;
implementation
procedure Register;
begin
RegisterComponents('Samples',[TSampleShape]);
end;
end.
19.3.2.2 公布繼承的屬性
一旦決定了部件類型,就能決定在父類的protected部分聲明哪些屬性和事件能為用戶可見(jiàn)。TGraphicControl已經(jīng)公布了所有作為圖形控制的屬性,因此,只需公布響應(yīng)鼠標(biāo)和拖放事件的屬性。
type
TSampleShape=class(TGraphicControl)
published
property DragCursor;
property DragMode;
property OnDragDrop;
property OnDragOver;
property ONEndDrag;
property onMouseDown;
property onMouseMove;
property onMouseup;
end;
這樣,該Shape控制具有通過(guò)鼠標(biāo)和拖放與用戶交互的能力。
19.3.2.3 .增加圖形能力
一旦你聲明了圖形部件并公布了繼承的屬性,就可以給部件增加圖形功能。這時(shí)需要知道兩點(diǎn):
● 決定畫(huà)什么
● 怎樣畫(huà)部件圖形
在Shape控制的例子中,需要增加一些能使用戶在設(shè)計(jì)時(shí)改變形狀的屬性。
1. 決定畫(huà)什么
圖形部件通常都具有改變外觀的能力,圖形控制的外觀取決于其某些屬性的結(jié)合,例如Gauge控制具有決定其形狀、方向和是否圖形化地顯示其過(guò)程的能力。同樣,Shape控制也應(yīng)有決定顯示各種形狀的能力.
給予Shape控制這種能力,增加名為Shape的屬性。這需要下列三步:
● 聲明屬性類型
● 聲明屬性
● 編寫(xiě)實(shí)現(xiàn)方法
⑴ 聲明屬性類型
當(dāng)聲明一個(gè)用戶自定義類型的屬性時(shí),必須首先聲明屬性類型。最普通地用于屬性的自定義類型是枚舉類型。
對(duì)Shape控制來(lái)說(shuō),需要聲明一個(gè)該控制能畫(huà)形狀的枚舉,下面是枚舉類型的聲明:
type
TSampleShapeType=(sstRectangle, sstSquare, sstRoundRect,
sstRoundSquare, sstEllipse, sstCircle);
TSampleShape = class(TGraphicControl)
end;
這樣,就可以用該類型來(lái)聲明屬性。
⑵ 聲明屬性
當(dāng)聲明一個(gè)屬性時(shí),通常需要聲明私有域來(lái)保存屬性值,然后描述讀寫(xiě)屬性值的方法。
對(duì)于Shape控制,將聲明一個(gè)域保存當(dāng)前形狀,然后聲明一個(gè)屬性通過(guò)方法調(diào)用來(lái)讀寫(xiě)域值。
type
TSampleShape=class(TGrahpicControl)
private
FShape: TSampleShapeType;
procedure SetShape(value: TSampleShapeType);
published
property Shape: TSampleShapeType read FShape write SetShape;
end;
現(xiàn)在,只剩下SetShape的實(shí)現(xiàn)部分了。 [1] [2] [3] 下一頁(yè)
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!