我有一点问题.我试图在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;
Run Code Online (Sandbox Code Playgroud)
我是否必须以某种方式注册他们的名字才能在表格活动中使用它们?或者,也许,创建一个类并包含它们?
任何形式的帮助真的很感激!先感谢您.
您的变量是创建它们的过程的本地变量,因此当您在该过程之外时,您无法使用这些变量来引用它们.解决方案是使它们成为表单类的字段.
type
TForm1 = class(TForm)
procedure FormResize(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
FPanel: TPanel;
FMemo: TMemo;
FSplitter: TSplitter;
FList: TListBox;
end;
Run Code Online (Sandbox Code Playgroud)
然后您的FormResize事件处理程序可以引用它们.
procedure TForm1.FormResize(Sender: TObject);
begin
if Assigned(FPanel) then
begin
...
end;
end;
Run Code Online (Sandbox Code Playgroud)
不要忘记从中删除局部变量,Button1Click而是使用字段.
procedure TForm1.Button1Click(Sender: TObject);
begin
FPanel := TPanel.Create(Self);
...
end;
Run Code Online (Sandbox Code Playgroud)