0

我在运行时创建了一个组件,但我遇到了一个问题,因为当我创建其中两个组件时,我会更改其中一个组件的属性值,但它似乎也会更改另一个组件。

如何在运行时创建组件,以便它们是单独的组件而不是彼此的实例?

好的,这就是我用来创建组件的代码。

Cell[CellCount]:= TBattery.Create(nil);   
Cell[CellCount].Top := Random(500);    
Cell[CellCount].Left := Random(500);   
Cell[CellCount].Parent := Self;   
Cell[CellCount].ID := CellCount;   
CellCount := CellCount + 1;    

我正在使用 GDI 图形在多个 TBattery 实例之间画线。我遇到的问题是;如果我创建两个组件然后添加第三个,当我移动第三个时,线条会被绘制到那个组件上,而不是粘在第二个组件上。

我上传了我的源文件,我确信其中很多都没有意义,我的实现可能很糟糕,但感谢任何帮助!提前致谢

http://pastebin.com/8WUkT1rw

http://pastebin.com/BpASvc7N

如果这有助于理解代码的用途,它们都是我学校项目的电路模拟器的一部分:s

4

1 回答 1

0

一个简单的运行时组件创建是......

首先创建一个单元 第二个创建一个程序 ex

procedure Label_Comp(Location: TWinControl; Text: String; Label_Left,Label_Top,Numofcomp: Integer; NameOwn: string; Label_Autosize,Label_FontBold,Label_Trans: Boolean);

在变量中添加

var
 MyLabel: TsLabel;

然后是程序代码

procedure Label_Comp(Location: TWinControl; Text: String;            
  Label_Left,Label_Top,Numofcomp: Integer; NameOwn: string;                                                               
  Label_Autosize,Label_FontBold,Label_Trans: Boolean);
begin
 MyLabel := TLabel.Create(main);
 MyLabel.Name := 'Label' + NameOwn + IntToStr(Numofcomp);
 MyLabel.Parent := Location;
 MyLabel.Caption := Text;
 MyLabel.Left := Label_Left;
 MyLabel.Top := Label_Top;
 MyLabel.Font.Name := 'Tahoma';
 MyLabel.Font.Size := 8;
 MyLabel.Font.Color := clWindowText;
 MyLabel.AutoSize := Label_Autosize;
 if Label_FontBold = True then
   MyLabel.Font.Style := MyLabel.Font.Style + [fsBold];
 MyLabel.Transparent := Label_Trans;
 MyLabel.Visible := True;
end;

并根据需要从您的程序中调用它

for i := 0 to 10 do 
 Label_Comp(main.panelBattery,'Exit',90,24,i,'',True,True,True);

这里的问题是要记住 i 语句...

我希望我能帮助...

于 2013-03-07T07:06:41.713 回答