Delphi2007でフォーム間遷移時、タスクバーのプログラム表示が消えてしまう

解決


もじゃもじゃ  2011-01-20 18:42:04  No: 39868

初めまして、よろしくお願いします。

XP、Delphi2007

Form1からForm2を開き、Form1を非表示にしたいのですが
Form1から

procedure TForm1.Button1Click(Sender: TObject);
begin
  self.Visible := false;
  Form2.ShowModal;
  self.Visible := true;
end;

とするとタスクバーの対象プログラムが非表示になってしまいます。
(Form2を閉じると復活)
今までメインにやってたDelphi6ではこれで出来ていたのですが…

プロジェクトの、Application.MainFormOnTaskbarをfalseにすると
Delphi6のように消えずに動作するのはわかっています。
Aero関連に必要?とかなんとかなのでできればそこは変えずにいきたいと思っています。
(今XPしかないので何がどうなるのやらわかりませんが)

他に良い方法はないでしょうか、よろしくお願いします。


ちょっととおります  2011-01-21 01:45:43  No: 39869

ここでどうかな

http://www.tear-drops.net/modules/bwiki/index.php?Delphi%2F%BB%D2%A5%D5%A5%A9%A1%BC%A5%E0%A4%F2%A5%BF%A5%B9%A5%AF%A5%D0%A1%BC%A4%CB%C9%BD%BC%A8%A4%B9%A4%EB


とおります  2011-01-21 02:12:04  No: 39870

試してみました。
Form2は動的生成です。(選択可能フォーム)

procedure TForm1.Button1Click(Sender: TObject);
begin
  form2 := TForm2.Create(Application);
  try
    self.Hide;
    Form2.ShowModal;
    self.Show;
  finally
    Form2.Free;
  end;
end;

======================================================

type
  TForm2 = class(TForm)
  private
    { Private declarations }
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  public
    { Public declarations }
  end;

------------------------------------------------------
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
  inherited;
  if FormStyle in [fsNormal, fsStayOnTop] then begin
    if BorderStyle in [bsSingle, bsSizeable] then begin
      Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
      Params.WndParent := GetDesktopWindow();
    end;
  end;
end;


もじゃもじゃ  2011-01-21 19:36:06  No: 39871

バッチリできました。
ありがとうございます。
子フォームがいっぱいあるので共通関数化してみました。

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

------------------------------------------------------

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
  inherited;
  fn_DispTaskbarSetting(Self,Params);
end;

------------------------------------------------------

function fn_DispTaskbarSetting(pForm:TForm; var pParams: TCreateParams) : Boolean;
var
  ret : Boolean;
begin
  ret := true;
  try
    if pForm.FormStyle in [fsNormal, fsStayOnTop] then
      begin
        if pForm.BorderStyle in [bsSingle, bsSizeable] then
          begin
            pParams.ExStyle := pParams.ExStyle or WS_EX_APPWINDOW;
            pParams.WndParent := GetDesktopWindow();
          end;
      end
  except
    ret := false;
  end;

  Result := ret;
end;


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

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






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