我使用的是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