オブジェクトをコピーするには?

解決


ふろんてぃあ  2011-01-25 23:54:48  No: 39896

いつもお世話になっております。
Delphi2010+XP SP3で開発をしております。

パネルの中にコントロールを貼り付け、そのパネルをデザインでコピー
して貼り付けを行うと、パネル内に貼り付けてあるコントロールも含めて
コピー出来ますが、同じ様な動きをプログラムでする事は可能でしょうか?

ネット調べていましたら、下記URLの情報がありましたのでソースを
コピーして作成したのですが、パネルのみしかコピーされずパネル内の
Editコントロールはコピーされませんでした。
URLの情報は大分古い(2002年くらい?)ので、もしかしたらDelphiの
仕様が変わってしまったのかもしれませんが、どなたかコピーの良い方法
を知っている方がいらっしゃいましたらご教授頂けませんでしょうか。

【参考URL】
http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/faq/00069.htm

以上、宜しくお願い致します。


にゃんこ  2011-01-30 01:14:10  No: 39897

2010は持ってないので分かりませんが、イベントログにクラス名を出してみましょう。

 if not(Component is TWinControl) then Exit

あたりを

 if not(Component is TWinControl) then
 begin
   OutPutDebugString(PChar(Component.ClassName));
   Exit;
 end;

とすれば確認できます。

一応見てみましたが、古いコードしか知らない私には、おなじ方法しか思いつかないわけで、違うとすれば、クラスの継承が変わっていたり、名前が違うとか、そのあたりかと思ったわけです。

あとは、ComponentCountなども確認してみては。


ふろんてぃあ  2011-02-01 19:54:42  No: 39898

にゃんこさん

返信、有難うございます。

> if not(Component is TWinControl) then Exit

> あたりを

>  if not(Component is TWinControl) then
>  begin
>    OutPutDebugString(PChar(Component.ClassName));
>    Exit;
>  end;
>
> とすれば確認できます。

上記の様にソースを変更してみたのですが、OutPutDebugStringの所に
処理が来ないので、どうもnot(Component is TWinContorol)がTrueに
なっていないようです。
また、ComponentCountはコピー元(Src)、コピー先(Dest)共に0だったので
何となく正しく動作していない気がします。。。
やはり、仕様の問題かもしれないですね。


KHE00221  2011-02-01 20:44:50  No: 39899

BDS2006でも動かない

設計時 Panel の上にある Edit が
Edit.Create(Panel) でなければいけないのに
Edit.Create(Form) で作られているため
つまり Panel.ComponentCount が0になる

パネルとエディットを動的に作って,

var
    PanelX: TPanel;
    EditX: TEdit;
begin
    PanelX := TPanel.Create(Self);
    PanelX.Parent := Form3;
    EditX := TEdit.Create(PanelX);
    EditX.Parent := PanelX;
    PanelX.OnMouseUp := Panel1MouseUp;

 RemoveComponent(ChildCompo);
 Owner.InsertComponent(ChildCompo);

を削除すれば動くと思う


ふろんてぃあ  2011-02-02 00:27:49  No: 39900

KHE00221さん

返信ありがとうございます。
KHE00221さんがおしゃっているように、動的に作成したら
みごとコピーされました。
本当は設計時にコントロールのレイアウトを決めて、それを
コピーしたかったのですが、無理そうなのでプログラムから
動的に作成しコピーする事にします。

若干、Delphiのバグの様にも思えますがどうにか実現出来そうなので
助かりました。
本当にありがとうございました。

また、解決のきっかけを下さった、
にゃんこさんも本当にありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加