デルファイフォームにTPanelがあります。ボタンを押して他のパネルに配置すると、このTPanelで親になっているすべてのTPanelをコピーしたいと思います。それを行う方法はありますか?ありがとう。
質問する
3171 次
2 に答える
5
copy
あるTPanelから別のTPanelへのTLabelコントロールには、次のようなものを使用できます。
Procedure CopyLabels(ParentControl,DestControl:TWinControl);
var
i : integer;
ALabel : TLabel;
begin
for i := 0 to ParentControl.ControlCount - 1 do
if ParentControl.Controls[i] is TLabel then
begin
ALabel:=TLabel.Create(DestControl);
ALabel.Parent :=DestControl;
ALabel.Left :=ParentControl.Controls[i].Left;
ALabel.Top :=ParentControl.Controls[i].Top;
ALabel.Width :=ParentControl.Controls[i].Width;
ALabel.Height :=ParentControl.Controls[i].Height;
ALabel.Caption:=TLabel(ParentControl.Controls[i]).Caption;
//you can add manually more properties here like font or another
end;
end;
このように使用します
CopyLabels(Panel1,Panel2);
コントロールから別のコントロールにプロパティをコピーするためにも使用できますがRTTI
、Delphiのバージョンを指定しないため、簡単な例を示します。
于 2011-03-28T18:21:23.483 に答える
-1
TPanelは、コンポーネントのコンテナです。Controlsプロパティに子コンポーネントのリストがあります。このリストを繰り返し処理して、その子にアクセスできます。
ボタンを押すと、コードは次のようになります。
Panel1のコントロールリストで繰り返します
コントロールがTLabelであるかどうかを確認します
TLabelのParentプロパティをPanel2に変更します
このようなもの
for i := 0 to Panel1.ControlCount - 1 do
if Panel1.Controls[i] is TLabel then
(Panel1.Controls[i] as TLabel).Parent:=Panel2;
しかし、待ってください!、これは機能しません。なんで?この変更を「オンザフライ」で行うため、繰り返し処理しているのとまったく同じリストを変更することになります。
したがって、移動するラベルを一時リストに保存する必要があります。このようなもの...
var
i:integer;
l:TObjectList;
begin
l:=TObjectList.Create;
l.ownsObjects:=False;
for i := 0 to Panel1.ControlCount - 1 do
if Panel1.Controls[i] is TLabel then
l.add(Panel1.Controls[i]);
for i:= 0 to l.Count-1 do
(l[i] as TLabel).Parent:=Panel2;
l.Free;
end;
于 2011-03-28T18:08:13.203 に答える