setparentを使って子画面を表示するには?

解決


やまだ  2013-10-26 02:19:43  No: 45458

こんにちは。
いつもお世話になっています。

開発環境は、win7(sp1)、delphiXE3enterprise(update適用なし)です。

setparentを使って画面(親画面)のパネルの中に画面(子画面)を読み込んで表示しようとしています。

setparentからはエラーは帰ってきていないので表示はされていると思うんですが、親画面を表示したとき子画面は表示されていません。

ちなみに子画面のborderstyleはbsSizeToolWinです。

子画面のleft、top、clientwidth、clientheightはどのように設定すればよいのでしょうか?

子画面のプロパティを以下のようにしましたが、表示されませんでした(表示されていると思うんですが、パネルの大きさの中に表示されませんでした)。
left:=0;
top:=0;
clientwidth:=パネルのwidth;
clientheight:=パネルのheight;

left、topはクライアント座標だったりするのでしょうか。

left、top、clientwidth、clientheightの設定をお聞きしたいです。

よろしくお願いします。


けど  2013-10-26 05:02:12  No: 45459

(VCLとして)これで表示される
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form2:=TForm2.Create(Self);
  Form2.Show;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Windows.SetParent(Form2.Handle,Panel1.Handle);
  Form2.SetBounds(0,0,100,100);
end;


D  2013-10-27 04:34:09  No: 45460

>子画面のプロパティを以下のようにしましたが、表示されませんでした(表示されていると思うんですが、パネルの大きさの中に表示されませんでした)。

  子画面(フォーム?)のShowメソッドを呼べば表示されると思うのですが、、

>left:=0;
>top:=0;
>clientwidth:=パネルのwidth;
>clientheight:=パネルのheight;

  この場合だと子画面はタイトルバーとフレームの分だけパネルからはみ出してしまうと思うのですが、それは想定しているものとは違いますよね。

  何となく、子画面のクライアント領域を親画面のパネルいっぱいに表示したいのだろうかと推測したのですが、もしそうならば子画面のボーダースタイルをbsNoneにして以下のようにすれば良いかと。
子画面をForm2、親画面のパネルをPanel1とした場合

  Form2.SetBounds(0, 0, Panel1.ClientWidth, Panel1.ClientHeight);


やまだ  2013-10-27 07:09:10  No: 45461

ありがとうございます。

上手くいきました。

SetBoundsというのがあるんですね。

調べてたんですが、Windows.SetParentがhitして見つけきれませんでした。
というか勉強不足です。

ありがとうございました。


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

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






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