我使用的是Delphi 5,我在運行時創建了一些面板,然後在面板上創建按鈕,顯然在運行時也是如此。我需要這樣做,因爲我可能需要在未來動態創建更多面板/按鈕組合。德爾福 - 在運行時創建的引用組件
我可以做所有這些,但是我不知道如何引用我創建的面板,因爲我找不到訪問面板組件名稱的方法。在Internet上搜索我發現我可以使用FindComponent來按名稱查找面板組件,但我仍然不知道如何使用該名稱,因爲我無法使用字符串變量來引用它 - 例如, StringVar:= Panel.Name。我得到一個類型不匹配,TComponentName與String。
我在創建面板時爲每個面板創建了按鈕。簡化,它看起來像這樣:
With TypeQuery do begin // Create Panels
First;
While (not eof) do begin // create the actual panel
panelno := FieldByName('Product_type_id').AsInteger;
pnl := Tpanel.Create(Self);
pnl.name := FieldByName('PanelName').AsString;
pnl.color := clInactiveCaption;
pnl.parent := MainForm;
pnl.width := 365;
pnl.Height := 551;
pnl.left := 434
pnl.top := 122;
pnl.caption := '';
With ButtonQuery do begin
Close;
Parameters.parambyname('PanelID').Value := PanelNo;
Open;
First;
While (not eof) and (FieldByName('Product_type_id').AsInteger = PanelNo) do begin //put the buttons on it.
btnName := FieldByName('ButtonName').AsString;
BtnText := FieldByName('ButtonText').AsString;
BtnGroup := FieldByName('Product_Group_ID').AsString;
GrpColour := FieldByName('ButtonColour').AsString;
btn := TColorButton.Create(Self);
btn.Parent := pnl;
btn.Name := BtnName;
Btn.backcolor := HexToTColor(GrpColour);
btn.Font.Name := 'Arial Narrow';
btn.Font.Style := [fsBold];
btn.Font.Size := 10;
. . .
end;
. . .
end;
end;
我讀過幾個論壇(包括這一個),沒有辦法通過名稱直接引用面板。我試過使用組件數組,但是我遇到了同樣的問題 - 我需要通過指定的組件名稱來引用組件。
好的,我不是一個槍程序員 - 我用Delphi多年來創建簡單的程序,但這個更復雜。我以前從未使用過運行時組件創建。
我可以使用FindComponent使面板可見或不可見嗎?如果是這樣,鑑於我在上面給你們展示的東西,你能給我採取嬰兒步驟的方法嗎?
在此先感謝...
您可以將需要的組件添加到TList | Container ...然後使用您的列表容器訪問它們... – Whiler
這不是論壇。 :) – jachguate