gpt4 book ai didi

Delphi - 引用在运行时创建的组件

转载 作者:行者123 更新时间:2023-12-03 15:15:27 24 4
gpt4 key购买 nike

我正在使用 Delphi 5,并且在运行时创建许多面板,然后在面板上创建按钮,显然也是在运行时创建。我需要这样做,因为将来我可能需要动态创建更多面板/按钮组合。

我可以完成所有这些,但我不知道如何引用我创建的面板,因为我找不到访问面板组件名称的方法。在互联网上搜索我发现我可以使用 FindComponent 按名称查找面板组件,但我仍然不知道如何使用该名称,因为我无法使用字符串变量来引用它 - 例如StringVar := 面板名称。我发现类型不匹配,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 使面板可见或不可见吗?如果是这样,鉴于我上面向您展示的内容,您能否告诉我我应该逐步采取的方法?

提前致谢...

最佳答案

我不确定你的意思:“我无法使用字符串变量来引用它 - 例如 StringVar := Panel.Name。

试试这个:

procedure TForm1.FormCreate(Sender: TObject);
var
p: TPanel;
begin
p := TPanel.Create(Self); // create a TPanel at run-time
p.Name := 'MyPanel'; // set a unique name
p.Parent := Self;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
p: TPanel;
StringVar: string;
begin
p := FindComponent('MyPanel') as TPanel;
if Assigned(p) then // p has reference to MyPanel
begin
// use that reference
p.Caption := 'Foo';
StringVar := p.Name;
ShowMessage(StringVar);
end;
end;

或者我错过了什么吗?

关于Delphi - 引用在运行时创建的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13726129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com