線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3153
推到 Plurk!
推到 Facebook!

有關在 TWWDBGRID 上動態新增 TWWDBLOOKUPCOMBO 的語法

尚未結案
thomas0728
中階會員


發表:112
回覆:260
積分:89
註冊:2002-03-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-24 05:29:27 IP:61.219.xxx.xxx 未訂閱
各位大大好: 上次請教了有關如何動態在 inforpower 的 twwdbgrid 產生欄位,得到不少啟發,當時的解答如下 The following will clear the grid's selected property and add two fields, each with a display width of 10. with wwDBGrid1 do begin Selected.Clear; Selected.Add('Buyer' #9 '10' #9 'Buyer'); Selected.Add('First Name' #9 '10' #9 'First Name'); ApplySelected; end; 但我想在上面加一個 twwdblookupcombo 加不上,我用的語法如下 controltype.add('Buyer;customedit;twwdblookupcombo1;F'); 一直無法將 TWWDBLOOKUPCOMBO1 加到 TWWDBGRID 上,不知是否有仁人君子知道正確的語法 謝謝 如果愛情也有味覺 那麼 有沒有ㄧ種愛 微微泛酸 不太苦澀 有點甜密 嚐起來的滋味讓人想起幸福 Thomas Chiou
------
Thomas Chiou
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-24 08:53:22 IP:210.66.xxx.xxx 未訂閱
看了一下你的語法應該是沒問題,但是請教一下,你的TwwDBLookCombo物件名字是TwwDBLookCombo or wwDBLookCombo1 請試試看controltype.add('Buyer;customedit;wwdblookupcombo1;F'); Ian
yachanga
資深會員


發表:24
回覆:335
積分:296
註冊:2003-09-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-24 10:18:03 IP:210.68.xxx.xxx 未訂閱
Hi thomas0728: You can reference online Help..    property ControlType: TStrings;    Description    This property holds information about the type of control used to display a field if the field is contained within a grid component. The default value is Field. To change this property at runtime, see the SetControlType method of the TwwDBGrid component. Following is my suggestion: wwDBGrid1.SetControlType('Buyer',fctCustom,'wwDBLookupCombo1'); 發表人 - yachanga 於 2004/05/24 10:20:44
thomas0728
中階會員


發表:112
回覆:260
積分:89
註冊:2002-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-25 12:00:46 IP:61.219.xxx.xxx 未訂閱
謝謝各位大大: wwDBGrid1.SetControlType('Buyer',fctCustom,'wwDBLookupCombo1'); 語法是沒錯的,之所以無法使用經過我痛苦的研究有幾點根各位報告一下 一. WWDBGRID 的 READONLY 不能設為 True 二, wwdblookupcombo.LOOKFIELD 的大小寫有影響 三.欄位長度的大小也有影響 以上供各位參考 但,我現在又面臨一個奇怪的問題 PROCEDURE TFORM1.TEST VAR FWWDBLOOKUPCOMBO:ARRAY OF TWWDBLOOKUPCOMBO; BEGIN SETLENGTH(FWWDBLOOKUPCOMBO,1); FWWDBLOOKUPCOMBO:=TWWDBLOOKUPCOMBO.CREATE(SELF); FWWDBLOOKUPCOMBO[0].LOOKTABLE:=ADODATASET2; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 這行會出現如下的錯誤 '' HAS NO PARANT WINDOWS 為什麼會這樣,我有指定為 SELF 真是奇怪 如果愛情也有味覺 那麼 有沒有ㄧ種愛 微微泛酸 不太苦澀 有點甜密 嚐起來的滋味讓人想起幸福 Thomas Chiou
------
Thomas Chiou
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-25 13:32:39 IP:210.66.xxx.xxx 未訂閱
我試了一下是不會出現你說的狀況,反而是 FWWDBLOOKUPCOMBO:=TWWDBLOOKUPCOMBO.CREATE(SELF);會出錯 我是改成FWWDBLOOKUPCOMBO[0]:=TWWDBLOOKUPCOMBO.CREATE(SELF); 你試試看FWWDBLOOKUPCOMBO[0].Parent := Self; Ian
thomas0728
中階會員


發表:112
回覆:260
積分:89
註冊:2002-03-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-25 18:07:31 IP:61.219.xxx.xxx 未訂閱
沒錯,確實要在指定    wwdblookupcombo.parent:=self; 的值 但我另外又發現另一個很奇特的問題,那是是如果我在 form 上先行放入 wwdblookupcombo1 則執行 wwdbgrid1.setcontroltype('Buyer'fctcustom,'wwdblookupcombo1'); 沒問題, wwdblookupcombo1 會加到 wwdbgrid 上 但如果我是動態產生 wwdblookupcombo,比如 PROCEDURE TFORM1.TEST VAR FWWDBLOOKUPCOMBO2:TWWDBLOOKUPCOMBO; BEGIN FWWDBLOOKUPCOMBO2:=TWWDBLOOKUPCOMBO.CREATE(SELF); FWWDBBLOOKUPCOMBO2.PARENT:=SELF; FWWDBLOOKUPCOMBO2.LOOKTABLE:=ADODATASET2; .... ... 然後執行 wwdbgrid1.setcontroltype('Buyer'fctcustom,'wwdblookupcombo2'); 就不會加到 WWDBGRID1 上,只會在畫面上顯示 wwdblookupcombo2 理論上不該有這種情形才對,不知我那裡設的有問題,還是我見鬼了 為了使用這個 WWDBLOOKUPCOMBO 搞了三,四天,不停的試過各種方法,真是不 SMART 的元件      < >< > 如果愛情也有味覺 那麼 有沒有ㄧ種愛 微微泛酸 不太苦澀 有點甜密 嚐起來的滋味讓人想起幸福 Thomas Chiou
------
Thomas Chiou
yachanga
資深會員


發表:24
回覆:335
積分:296
註冊:2003-09-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-25 23:22:36 IP:210.68.xxx.xxx 未訂閱
Hi thomas0728您好: 我剛剛也試了一下,發現真的動態產生的TwwLookUpCombo後在設定ControlType沒有效果說 這算是 > class="code"> procedure TForm1.wwDBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); Var i: Integer; begin for i:=0 to 1 do begin if (gdFocused in State) then begin if (Field.FieldName = wwDBLookupCombo[i].DataField) then with wwDBLookupCombo[i] do begin Left := Rect.Left wwDBGrid1.Left 2; Top := Rect.Top wwDBGrid1.Top 2; Width := Rect.Right - Rect.Left; Width := Rect.Right - Rect.Left; Height := Rect.Bottom - Rect.Top; Visible := True; end; end end; end; procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begin setlength(wwDBLookupCombo,1); for i:=0 to 1 do begin wwDBLookupCombo[i]:=TwwDBLookupCombo.Create(self); wwDBLookupCombo[i].Parent:=self; wwDBLookupCombo[i].DataSource:=query1.DataSource; wwDBLookupCombo[i].LookupTable:=query2; end; wwDBLookupCombo[0].DataField:='PROD'; wwDBLookupCombo[0].LookupField:='PROD'; wwDBLookupCombo[1].DataField:='LOT_NO'; wwDBLookupCombo[1].LookupField:='LOT_NO'; end; procedure TForm1.wwDBGrid1ColExit(Sender: TObject); Var i:Integer; begin for i:=0 to 1 do begin if wwDBGrid1.SelectedField.FieldName = wwDBLookupCombo[i].DataField then wwDBLookupCombo[i].Visible := False; end; end; 發表人 - yachanga 於 2004/05/25 23:31:24
l630521
資深會員


發表:15
回覆:349
積分:372
註冊:2003-02-17

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-05-26 08:58:37 IP:210.66.xxx.xxx 未訂閱
我試了一下,
PROCEDURE TFORM1.TEST
VAR
FWWDBLOOKUPCOMBO2:TWWDBLOOKUPCOMBO;
BEGIN
FWWDBLOOKUPCOMBO2:=TWWDBLOOKUPCOMBO.CREATE(SELF);
FWWDBLOOKUPCOMBO2.Visible := False
FWWDBLOOKUPCOMBO2.Name := 'wwdblookupcombo2';
FWWDBBLOOKUPCOMBO2.PARENT:=SELF;
FWWDBLOOKUPCOMBO2.LOOKTABLE:=ADODATASET2;
wwDBGrid1.controltype.add('Buyer;customedit;wwdblookupcombo2;F');
應該是沒問題的,我猜原因應該是你的FWWDBBLOOKUPCOMBO2.Name沒有指定,所以你增加的名字不對吧,你可以看一下你動態新增的Name是什麼,至於Visible要設成False原因是,動態新增完畢後,它會直接show在Form上面,所以我把它隱藏起來。 參考看看.... Ian
yachanga
資深會員


發表:24
回覆:335
積分:296
註冊:2003-09-27

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-05-26 11:01:54 IP:210.68.xxx.xxx 未訂閱
多謝l630521提醒...原來是Name必須額外指定..多學了一招 指定 class="code"> procedure TForm1.Button3Click(Sender: TObject); Var wwDBLookupCombo:Array of TwwDBLookupCombo; i: Integer; begin SetLength(wwDBLookupCombo,10); for i:=0 to 9 do begin wwDBLookupCombo[i]:=TwwDBLookupCombo.Create(self); wwDBLookupCombo[i].Parent:=Self; wwDBLookupCombo[i].Visible:=false; //wwDBLookupCombo[i].LookupTable:=ADOQuery2; //wwDBLookupCombo[i].LookupField:=Field[i]; wwDBLookupCombo[i].Name:='FwwDBLookupCombo' inttostr(i); wwDBGrid1.SetControlType(wwDBGrid1.Fields[i].FieldName,fctCustom,'FwwDBLookupCombo' inttostr(i)); end; end; ~悠遊法國號~
thomas0728
中階會員


發表:112
回覆:260
積分:89
註冊:2002-03-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-05-27 13:19:06 IP:211.75.xxx.xxx 未訂閱
感謝 l630521 我原本也有想到要定 name 的參數,但我看它的 help 是 TCOMPONENTNAME 型態,就沒理他,害我浪費了好幾天,不過也學到很多東西,動態產生元件,程式有彈性,但要對一些元件的產生方式有充份的了解才行,再次謝謝 l630521 如果愛情也有味覺 那麼 有沒有ㄧ種愛 微微泛酸 不太苦澀 有點甜密 嚐起來的滋味讓人想起幸福
------
Thomas Chiou
系統時間:2024-05-17 19:25:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!