動態產生的物件如何判斷已經存在 |
答題得分者是:小傑克
|
douglas
初階會員 發表:24 回覆:42 積分:38 註冊:2008-03-05 發送簡訊給我 |
請教: 動態產生的物件如何判斷已經存在?
以下是我動態產生的語法: var vQRLabel: TQRLabel; for i := 1 to ADOQuery1.RecordCount do begin vQRLabel := TQRLabel.Create(QRBand2); //QRBand2: Page Footer vQRLabel.Name := 'qrlb' IntToStr(i); 另外設定了: Left, Top, Caption end; 因為想要重複利用已經建立過的物件 所以使用了判斷式, 不存在時才另外再建立: if FindComponent('qrlb' IntToStr(i)) = nil then begin 動態產生... end; 但是此判斷式尚不能正常運作 已經產生過的QRLabel還是會判斷為 nil 請教各位大大, 我的問題點在哪邊? ----- 我是分隔線 ----- 參考了資料之後, 我修改了以下部分: for i := 1 to ADOQuery1.RecordCount do begin vQRLabel := TQRLabel.Create(self); //QRBand2 -> self vQRLabel.Parent := QRBand2 //加入此行 vQRLabel.Name := 'qrlb' IntToStr(i); 另外設定了: Left, Top, Caption end; 異動上述部份之後, FindComponent() 就能正常判斷了 請教原因為何? 編輯記錄
douglas 重新編輯於 2009-03-30 16:49:45, 註解 無‧
|
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
因為
if FindComponent('qrlb' IntToStr(i)) 其實是 if Self.FindComponent('qrlb' IntToStr(i)) 如果原程式不改的話, 就改用 if QRBand2.FindComponent('qrlb' IntToStr(i)) 不過, 還是改了之後的用法比較OK |
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
在可視物件中 xxx.Create(AOwner) 是指定誰擁有 xxx 物件的, ooo.FindComponent 這個function是尋找ooo所擁有的物件
xxx.Parent 是用來指定上層物件的, 因為可視物件需要繪圖, 必須指定parent , delphi 才知道要幫你把這個圖畫在哪邊 例如 一個form1 上面有一個panel var o :TButton ; //一個動態按鈕 o := TButton.Create(Panel1); o.Parent := Self ; o.Name := 'x1'; 結果是 Panel1.FindComponent('x1') 可以找到這個物件, 但是 Self.FindComponent('x1') 找不到 但是按鈕的圖會出現在 Self 上 也就是 Form1 上, Parent 跟Create (Aowner) 的owner差別在這邊 如果Parent 沒指定是怎樣呢? 那Button圖形就不會顯示, 因為delphi 不知道要把Button畫在哪裡
------
額有朝天骨,眼中有靈光 |
douglas
初階會員 發表:24 回覆:42 積分:38 註冊:2008-03-05 發送簡訊給我 |
|
roviury
一般會員 發表:3 回覆:49 積分:15 註冊:2008-08-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |