0

実行時にコンポーネントを作成していますが、これらのコンポーネントを 2 つ作成すると、一方のプロパティの値が変更されますが、もう一方のプロパティの値も変更されるように見えるため、問題が発生しています。

実行時にコンポーネントを作成して、相互のインスタンスではなく別個のコンポーネントにする方法を教えてください。

わかりましたので、これは私がコンポーネントを作成するために使用しているコードです。

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 の複数のインスタンス間に線を描画しています。私が抱えている問題は次のとおりです。2 つのコンポーネントを作成してから 3 番目のコンポーネントを追加すると、3 番目のコンポーネントを移動すると、2 番目のコンポーネントにくっつくのではなく、そのコンポーネントに線が描画されます。

ソースファイルをアップロードしました。多くは意味をなさないと確信しており、私の実装は悪いかもしれませんが、助けていただければ幸いです! 前もって感謝します

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 に答える