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

解決


しおじい  2016-04-01 11:50:27  No: 48134  IP: [192.*.*.*]

開発環境:Delphi XE(初代)

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

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

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

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

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

編集    削除
通りすがり  2016-04-01 19:44:41  No: 48135  IP: [192.*.*.*]

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

編集    削除
とま  2016-04-01 23:26:54  No: 48136  IP: [192.*.*.*]

子フォーム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  IP: [192.*.*.*]

>とま さん

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

大変参考になりました。

編集    削除