gpt4 book ai didi

delphi - 如何引用在运行时而不是在表单设计器中创建的组件?

转载 作者:行者123 更新时间:2023-12-03 14:46:19 31 4
gpt4 key购买 nike

我有一个小问题。我试图在 Delphi7 中创建运行时的组件列表,并使用表单的 .OnResize 事件调整它们的大小,但没有用...我不知道该怎么做。

这是我的代码:

procedure TForm1.Button1Click(Sender: TObject);
var
//ExtCtrls
panel: TPanel;
memo: TMemo;
splitter: TSplitter;
list: TListBox;
begin
panel := TPanel.Create(Self);
list := TListBox.Create(Self);
splitter := TSplitter.Create(Self);
memo := TMemo.Create(Self);

with panel do
begin
Parent := Form1;
BevelOuter := bvNone;
Top := 12;
Left := 12;
Height := Form1.Clientheight - 24;
Width := Form1.Clientwidth - 24;
end;

with list do
begin
Parent := panel;
Align := alClient;
Top := 0;
Height := panel.Height;
end;

with splitter do
begin
Parent := panel;
Top := 0;
Width := 12;
Align := alLeft;
end;

with memo do
begin
Parent := panel;
Top := 0;
Left := 0;
Width := round(panel.Width / 4) * 3;
Height := panel.Height;
Align := alLeft;
end;
end;

我是否必须以某种方式注册他们的名字才能在表单的事件中使用它们?或者也许,创建一个类并包含它们?

非常感谢任何形式的帮助!预先感谢您。

最佳答案

您的变量是创建它们的过程的本地变量,因此您无法在该过程外部使用这些变量来引用它们。解决方案是将它们设为表单类的字段。

type
TForm1 = class(TForm)
procedure FormResize(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
FPanel: TPanel;
FMemo: TMemo;
FSplitter: TSplitter;
FList: TListBox;
end;

然后您的 FormResize 事件处理程序就可以引用它们。

procedure TForm1.FormResize(Sender: TObject);
begin
if Assigned(FPanel) then
begin
...
end;
end;

不要忘记从 Button1Click 中删除局部变量并改用字段。

procedure TForm1.Button1Click(Sender: TObject);
begin
FPanel := TPanel.Create(Self);
...
end;

关于delphi - 如何引用在运行时而不是在表单设计器中创建的组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8547534/

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