這份文件的目的是為了解答有關撰寫 Delphi組件時常見或文件上找不到的問題
除了再加上更多的問題及解答外
進階程序設計師喜愛的工具
值得參考的文件刊物
如果你有任何意見或建議
第二部份 整合環境
我發現唯一能找出問題的方法只有
在 Delphi 整合環境的 Tools|Options 對話框的 Library 頁中將『Compile with debug info』選項打勾
選 Component|Rebuild Library 重新編譯組件庫
從 Turbo Debugger 中執行 Delphi
選File|Change Dir移至包含組件程序代碼的目錄下
如果你的組件發生GPF時就可以檢視堆棧然後得知到底是哪些發生問題了
Glen Boyd 的回答
開啟登錄編輯程序(REGEDIT
你的組件必須繼承自TComponent類別或其衍生類別
你的組件建構函式及滅構函式宣告必須看起來像這樣
constructor Create(AOwner: TComponent); override;
destructor Destroy; override ;
所有在published區段宣告的字段型態必須是ordinal
如果你想讓TMyComponent組件可以在設計時期操作
type TComplex = record
RealPart: Double;
ComplexPart: Double;
end;
class TMyComponent = Class(TComponent)
private
F
published
property P
end;
Ray Lischner 的回答
如果你不想讓使用者將組件拉曳至表格上的話
Ray Konopka 的回答
在探索 VCL 原始程序代碼時
你必須要建立一個組件編輯器
建立組件編輯器的步驟大致如下
從 TComponentEditor 類別繼承一個新的類別
改寫類別的 GetVerbCount
在 Register 程序中使用 RegisterComponentEditor 程序來注冊此組件編輯器
有關組件編輯器這個主題在『Developing Delphi Components』這本書中有詳盡的解說及信息
你可能在組件中使用了Writeln這個程序
我發現有時自制的組件編輯器不會將組件屬性儲存起來
原因是你很可能忘了在組件編輯器中呼叫此方法
Designer
如此一來Delphi才會知道你的組件編輯器更改過屬性值了
第三部分在組件中使用其它組件
你的滾動條組件類別必須處理 CM_DESIGNHITTEST 組件訊息才行
TMyScrollBar = class (TScrollBar)
procedure CMDesignHitTest
(var Message: TCMDesignHitTest); message CM_DESIGNHITTEST;
end;
procedure TMyScrollBar
begin
Message
end;
你的組件必須以以下方法建立滾動條
TMyScrollBar
而不是
TMyScrollBar
你必須設定滾動條的頁面大小
procedure SetPageSize(ScrollBar: TScrollBar; PageSize: Integer);
var
ScrollInfo: TScrollInfo;
begin
ScrollInfo
ScrollInfo
ScrollInfo
SetScrollInfo (ScrollBar
end;
要取得目前頁面大小可用如下方法
function GetpageSize (ScrollBar: TScrollBar): Integer;
var
ScrollInfo: TScrollInfo;
begin
if HandleAllocated then
begin
ScrollInfo
ScrollInfo
GetScrollInfo (ScrollBar
Result := ScrollInfo
end;
end;
第四部分 Bound Controls
我可以大膽地說全世界有關 TDataLink 的說明文件只有一份
屬性 (Property) 介紹
property Active: Boolean(只讀)
當此 DataLink 連結至一個已開啟的 DataSource 時會傳回 True
property ActiveRecord: Integer(可擦寫)
用來設定或取得 DataLink 緩沖區中目前所指向的記錄代碼
property BufferCount: Integer(可擦寫)
DataLink 擁有一個資料緩沖區
property DataSet: TDataSet(只讀)
傳回此 DataLink 所連結的 DataSet
property DataSource: TDataSource(可擦寫)
傳回此DataLink所連結的DataSource
property DataSourceFixed: Boolean(可擦寫)
這個屬性可用來防止 DataSource 屬性被更改
property Editing: Boolean(只讀)
如果 DataLink 正處於編輯狀態則傳回 True
property ReadOnly: Boolean(可擦寫)
設定 DataLink 是否為只讀狀態
property RecordCount: Integer(只讀)
傳回DataSet的資料記錄數目
方法 (Method) 介紹
function Edit: Boolean;
讓所連結的DataSet進入編輯狀態
procedure UpdateRecord;
我們不直接呼叫這個方法
虛擬方法 ( Virtual Method )
要讓 TDataLink 對象與組件溝通必須改寫下列這些方法
procedure ActiveChanged
當連結的 DataSource 開啟狀態改變時會呼叫此方法
procedure CheckBrowseMode
數據庫有任何改變之後都會先呼叫這個方法
procedure DataSetChanged;
當下列任一事件發生時都會呼叫此方法
移至DataSet的開頭
移至DataSet的結尾
在DataSet中插入或新增資料
刪除DataSet的資料
取消DataSet的編輯
更新記錄
如果不想改寫這個方法只要在其中呼叫
From:http://tw.wingwit.com/Article/program/Delphi/201311/8437.html