//改寫DefineProperties虛方法,用以實作控制元件屬性值的持久化。
procedure DefineProperties(Filer: TFiler); override;
procedure TMyTimer.DefineProperties(Filer: TFiler);
begin
inherited;
filer.DefineProperty('MyProperty',LoadProperty,StoreProperty,true);
//LoadProperty 和StoreProperty 是以函式為引數
end;
// 在DefineProperties方法中需要一個寫變數函式作為引數。
procedure StoreProperty(Writer:TWriter);
procedure TMyTimer.StoreProperty(Writer:TWriter);
begin
writer.WriteInteger(FInterval);
writer.WriteInteger(FResolution);
writer.WriteBoolean(FEnabled);
//持久化三個保護欄位變數
end;
//在DefineProperties方法中需要一個讀變數函式作為引數。
procedure LoadProperty(Reader:TReader);
procedure TMyTimer.LoadProperty(Reader:TReader);
begin
FInterval:=reader.ReadInteger;
FResolution:=reader.ReadInteger;
Fenabled:=reader.ReadBoolean;
hirestimer1.Interval:=FInterval;
hirestimer1.Resolution:=FResolution;
hirestimer1.Enabled:=FEnabled;
// 讀取屬性值
end;
// 當屬性值改變時,修改HiResTimer1控制元件對應的屬性值。
function TMyTimer.Get_Enabled: WordBool;
begin
Result := FEnabled;
end;
procedure TMyTimer.Set_Enabled(Value: WordBool);
begin
FEnabled := Value;
hirestimer1.Enabled :=FEnabled;
//設定hirestimer1.Enabled 決定定時器是否作業。
end;
function TMyTimer.Get_Interval: Integer;
begin
result:=Finterval;
end;
function TMyTimer.Get_Resolution: Integer;
begin
result:=Fresolution;
end;
procedure TMyTimer.Set_Interval(Value: Integer);
begin
Finterval:=value;
hirestimer1.Interval:=Finterval;
// hirestimer1.Interval的作用和VB自帶的Timer定時器Interval屬性功能一致。
end;
procedure TMyTimer.Set_Resolution(Value: Integer);
begin
Fresolution:=value;
hirestimer1.Resolution:=Fresolution;
// hirestimer1.Resolution 屬性保證定時器的精度。數值越小精度越高。
end;
添加完屬性后,還要在IMyTimerEvents中加入Ontimer事件,首先在私有段中定義一個TimerEvent 函式。然后在程式Initialize段中讓HiResTimer1.OnTimer = TimerEvent;而在TimerEvent 事件中又呼叫FEvents.OnTimer,這樣就能在Ontimer事件中捕獲到HiResTimer1.OnTimer事件。程式實作如下所示:
procedure TMyTimer.Initialize;
begin
inherited Initialize;
HiResTimer1.OnTimer:=TimerEvent;
end;
procedure TMyTimer.TimerEvent(Sender: TObject);
begin
if FEvents <> nil then FEvents.OnTimer;
end;
4.因為我們要撰寫的是一個非可視Activex 控制元件,所以控制元件在用于VB等開發環境時還應具有如下特征即:控制元件在designtime 時尺寸應固定且可見,而在 runtime時不可見。以下代碼即可實作尺寸固定:
constructor Create(AOwner: TComponent); override;
constructor TMyTimer.Create(AOwner: TComponent);
begin
self.AutoSize:=true;
inherited create(aowner);
self.width:=32;
self.height:=32;
self.Constraints.MaxHeight:=32;
self.Constraints.MaxWidth:=32;
self.Constraints.MinHeight:=32;
self.Constraints.MinWidth:=32;
end;
下面這行代碼即可實作ActiveX控制元件在designtime 時可見而runtime時不可見的功能。
TActiveFormFactory.Create(
ComServer,
TActiveFormControl,
TMyTimer,
Class_MyTimer,
1,
`97B151A-9D6F-4DCC-BAA8-E4B51D2DD68B}`
OLEMISC_INVISIBLEATRUNTIME, //修改后
//OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL, 默認引數
tmApartment);
uj5u.com熱心網友回復:
急求 希望能幫忙。在C++builder下用C++怎么寫uj5u.com熱心網友回復:
急求 啊 里邊有些地方不敏白轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/66205.html
標籤:語言基礎/算法/系統設計
