特定の実行時生成フォームを最前面に表示するには?

解決


老かも  2010-02-23 00:20:22  No: 37730

いつもお世話になります。
実行時に生成した5個のフォームをリストBOXで指定して、ランダムに最前面に表示したいのですが、
5個のフォームはNameをSfrm[0..4]、タイトルも同じくSfrm[0..4]としリストBOXで最前面に表示するフォームを指定。
FindWindow(lpclassName, lpWindowName: PChar)を使ってウィンドハンドルを取得してBringWindowtotop(Handle)で最前面に持ってこようとしたのですが、ウィンドーの指定が変数では受け付けません。FormStyleプロパティーでは、大変面倒になるかと?
何か良い方法をご教授下さい。よろしくお願いします。


tor  2010-02-23 01:02:58  No: 37731

フォームがすでに生成済みなら、Screen.Formsを検索して名前からフォームを探すことができます。

for i := 0 to Screen.FormCount - 1 do
  if Screen.Forms[i].Name = 探している名前 then
    Screen.Forms[i].BringToFront;

名前ではなくてフォームへの参照を持っておいた方が話が簡単になると思いますけど。
Frm[0] := Form1;
Frm[1] := Form2;
...
Frm[ランダムな値].BringToFront;


Quest  2010-02-23 01:05:54  No: 37732

FormArray: array [0..4] of TForm;
for i := 0 to 4 FormArray[i] := TSubForm.Create(Self);
こうしてフォームのインスタンス自体を配列に入れてしまって
BringWindowtotop(FormArray[ComboBox1.ItemIndex].Handle);
こうしてしまえば?


Quest  2010-02-23 01:07:59  No: 37733

あ、かぶっちゃった。
そうか、フォームにはBringToFronってメソッドがあるんですね。


老かも  2010-02-23 01:29:21  No: 37734

torさん早速に有り難うございます。
BringToFrontで一発解決です。なんと、これだけ!さんざん悩み検索しまくって時間を費やしたのです。
ちゃんとHELPファイルを読まないとダメですね。基本ですね。
Questさんも有り難うございました。

お世話になりました。無事解決です。


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

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






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