いつもお世話になっております。
Delphi2010+XP SP3で開発をしております。
パネルの中にコントロールを貼り付け、そのパネルをデザインでコピー
して貼り付けを行うと、パネル内に貼り付けてあるコントロールも含めて
コピー出来ますが、同じ様な動きをプログラムでする事は可能でしょうか?
ネット調べていましたら、下記URLの情報がありましたのでソースを
コピーして作成したのですが、パネルのみしかコピーされずパネル内の
Editコントロールはコピーされませんでした。
URLの情報は大分古い(2002年くらい?)ので、もしかしたらDelphiの
仕様が変わってしまったのかもしれませんが、どなたかコピーの良い方法
を知っている方がいらっしゃいましたらご教授頂けませんでしょうか。
【参考URL】
http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/faq/00069.htm
以上、宜しくお願い致します。
2010は持ってないので分かりませんが、イベントログにクラス名を出してみましょう。
if not(Component is TWinControl) then Exit
あたりを
if not(Component is TWinControl) then
begin
OutPutDebugString(PChar(Component.ClassName));
Exit;
end;
とすれば確認できます。
一応見てみましたが、古いコードしか知らない私には、おなじ方法しか思いつかないわけで、違うとすれば、クラスの継承が変わっていたり、名前が違うとか、そのあたりかと思ったわけです。
あとは、ComponentCountなども確認してみては。
にゃんこさん
返信、有難うございます。
> 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だったので
何となく正しく動作していない気がします。。。
やはり、仕様の問題かもしれないですね。
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);
を削除すれば動くと思う
KHE00221さん
返信ありがとうございます。
KHE00221さんがおしゃっているように、動的に作成したら
みごとコピーされました。
本当は設計時にコントロールのレイアウトを決めて、それを
コピーしたかったのですが、無理そうなのでプログラムから
動的に作成しコピーする事にします。
若干、Delphiのバグの様にも思えますがどうにか実現出来そうなので
助かりました。
本当にありがとうございました。
また、解決のきっかけを下さった、
にゃんこさんも本当にありがとうございました。
ツイート | ![]() |