初めまして、よろしくお願いします。
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しかないので何がどうなるのやらわかりませんが)
他に良い方法はないでしょうか、よろしくお願いします。
ここでどうかな
試してみました。
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;
バッチリできました。
ありがとうございます。
子フォームがいっぱいあるので共通関数化してみました。
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;
ツイート | ![]() |