關於自訂物件 Object Create 問題? |
尚未結案
|
JuliusChen
一般會員 發表:13 回覆:8 積分:4 註冊:2005-06-29 發送簡訊給我 |
請教各位前輩:
我自訂一個物件.
有段程式碼如下: constructor TSearchText.Create(Aowner: TComponent);
begin
inherited Create(AOwner);
//繼承原有的建構子 LblVisible := True ;
//動態建構 Edit
FEdit :=Tedit.Create(Self);
FEdit.Parent:=Self;
FEdit.Height:=22;
FEdit.Width:=100; //動態建構 Button
FButton:=TButton.Create(Self);
FButton.Parent:=Self;
FButton.Top:=FEdit.Top;
FButton.Left:=FEdit.Left FEdit.Width;
FButton.Width:=40;
FButton.Caption :='搜尋'; //動態建構 Label
FLabel:=TLabel.Create(Self);
FLabel.Parent:=Self;
FLabel.Left:=FEdit.Left FEdit.Width FButton.Width;
Flabel.top:=Fedit.top;
FLabel.Height:=FEdit.Height;
FLabel.Width:=140;
FLabel.Color:=clYellow;
FLabel.AutoSize:=False;
FLabel.Visible:=LblVisible; //動態建構 DBLookupListBox
FDBLookupComboBox:=TDBLookupComboBox.Create(Self);
//FDBLookupComboBox.Parent:=Self;
FDBLookupComboBox.Parent:=TWinControl(AOwner);
FDBLookupComboBox.Left:=FEdit.Left FEdit.Width FButton.Width;
FDBLookupComboBox.top:=Fedit.top;
FDBLookupComboBox.Height:=FEdit.Height;
FDBLookupComboBox.Width:=140;
FDBLookupComboBox.Visible:=False; //元件
Width:=FEdit.Width FLabel.Width FButton.Width 10; //元件的寬度
Height:=FLabel.Height 5; //元件的高度
ButtonOnClick:=dispose; //事件內容
TextOnChange:=TextKey;
DBLCBOnExit:=DBLCBClick; //建立DataSet
qyTemp := TADOQUERY.Create(APPLICATION.Owner);
dsTemp := TDataSource.Create(APPLICATION.Owner);
dsTemp.DataSet := qyTemp; if (Pos('WHERE',dstSQL) = 0) And (Pos('ORDER',dstSQL) = 0) Then dstSQL := dstSQL ' WHERE 1=1 ' ;
qyTemp.Connection := Conn ;
qyTemp.SQL.Text := dstSQL ' AND ' Column_No ' Like "' FEdit.Text '%"' ; qyTemp.Open; //顯示 DBLookupListBox
FDBLookupComboBox.DataSource:=dsTemp;
FDBLookupComboBox.DataField:=column_No;
FDBLookupComboBox.ListSource:=dsTemp;
FDBLookupComboBox.ListField:=column_No ';' column_Name; end; 我的問題是,有些屬性再我新增此物件時,並未取得,
可能執行時才會設定,我應該如何做比較好...
因為如此寫的話,我在新增物件時就會有error 出來,
當時有些物件並未設定.
|
Arlung Miao
初階會員 發表:9 回覆:44 積分:25 註冊:2004-08-25 發送簡訊給我 |
我想你的物件應該有連接字串之類的Property吧,所以你可以請把這些代碼放在該Property下面。比如:
... private procedure FSetSQLStr(dstSQL: string); published property SQLStr: string read FSQLStr write FSetSQLStr ... procedure FSetSQLStr(dstSQL: string); begin if (Pos('WHERE', dstSQL) = 0) And (Pos('ORDER', dstSQL) = 0) Then begin dstSQL := dstSQL ' WHERE 1=1 ' ; end; qyTemp.Connection := Conn ; qyTemp.SQL.Text := dstSQL ' AND ' Column_No ' Like "' FEdit.Text '%"' ; qyTemp.Open; //顯示 DBLookupListBox FDBLookupComboBox.DataSource:=dsTemp; FDBLookupComboBox.DataField:=column_No; FDBLookupComboBox.ListSource:=dsTemp; FDBLookupComboBox.ListField:=column_No ';' column_Name; end; end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |