子フォーム全てを常に最前列に表示したままにするには?

解決


しおじい  2016-04-01 11:50:27  No: 48134

開発環境:Delphi XE(初代)

Form1(親フォーム)から、Form2〜5をForm??.Showにて表示させています。

表示されたフォームを全て常に最前列に配置しておきたいのですが
うまくいきません。

各フォームのFormStyleをfmStayOnTopにしてみましたが、
Form1(親フォーム)は常に最前列に来るものの、
ほかのフォームは別プログラムのウィンドウに隠れてしまいます。
(Form1〜5のどれかをアクティブにすると全て前面にきます)

タイマーとsetwindowpos関数を組み合わせて使ってみましたが、
完ぺきではなく、時々フォームが隠れてしまいます。

何か適切な方法はないでしょうか?


通りすがり  2016-04-01 19:44:41  No: 48135

Windows的にできなくないですか?


とま  2016-04-01 23:26:54  No: 48136

子フォームTForm2の親ウィンドウをデスクトップに指定してあげればForm1の呪縛から解放することはできます。
StayOnTopもデスクトップレベルになります。

private
  procedure CreateParams(var Params: TCreateParams); override;

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.WndParent := GetDesktopWindow;
end;


しおじい  2016-04-02 06:39:23  No: 48137

>とま さん

提示して頂いたコードで、ほぼ満足のいく結果を得ることが出来ました。
子フォームをタスクバーに表示させる手法が使えるのですね。

大変参考になりました。


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

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






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