My application is based on MainForm, DetailForms and DialogForms. In the taskbar, I see MainFormButton, as well as DetailForms. Therefore, I use:
procedure <DetailForm>.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; Params.WndParent:= GetDesktopWindow; end;
I am using delphi 2010 and I installed Application.MainFormOnTaskbar: = True; When I use PromptForFileName or TSaveDialog in Detailform, then DetailForm is behind Mainform. DetailForm returns after closing the dialog.
When I use DialogForm (Showmodal of TForm with the PopupMode: pmAuto property), my DetailForm stays between the main and the dialog. How can I get TSaveDialog as showmodal with the PopupMode: pmAuto property or how can I prevent my detailform from falling behind the main form
Demo:
program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; end.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ImgList, ActnList; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var oForm: TForm; begin oForm:= Unit2.TForm2.Create(Self); oForm.Show; end; end.
unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) SaveDialog1: TSaveDialog; procedure cxButton1Click(Sender: TObject); private protected procedure CreateParams(var Params: TCreateParams); override; { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} { TForm2 } procedure TForm2.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; Params.WndParent:= 0; // --> Testing end; procedure TForm2.cxButton1Click(Sender: TObject); begin self.SaveDialog1.execute(); end; end.