关于窗口隐藏与Application隐藏的问题~(100分)

  • 主题发起人 主题发起人 我是ABC
  • 开始时间 开始时间

我是ABC

Unregistered / Unconfirmed
GUEST, unregistred user!
Frm_Main为主窗口,
使用 Frm_Main.Hide 可以做到隐藏主窗口,
但是我的程序中有若干个子窗口。且每个子窗口都用下面的方法出现在任务栏上。
……
private
{ Private declarations }
procedure CreateParams(var Params: TCreateParams);override;
……
……
procedure TFrm_2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent:=0;
end;

这时我想让主窗口在hide的情况下,子窗口可以自由的出现或隐藏,并显示在任务栏。
但是每当主窗口隐藏时show出子窗口,就会在任务栏上多出一个窗口的按钮,
这是整个Application的窗口。
请问各位大虾如何才能使主窗口在隐藏时,显示子窗口时只在任务栏上显示子窗口,
而不显示Application的窗口呢?
 
你没有把你的子窗体的parent属性设为你的主窗体吧.
 
parent?
窗体好象没有parent这个属性啊?
只有两个,一个是parentBiDiMode,一个是parentFont。
都是boolean型的啊?
 
有parent属性的。不过如果你是MDI子窗口应该不成问题的。
但是你这种显示子窗口的方法,可能不需要设。
 
使运行程序不在任务栏上出现相应的按钮
在窗口的OnCreate事件中加入如下语句:
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);

 
Frm_2不是MDI子窗口,是一个普通窗口。
我试过了SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
,但是如果有子窗口出现,Application的按钮一样会出现在任务栏上,只是没有了图标~
 
不可能!!!!!!!!!!
你的Frm_2是怎么建立的?

///////project1
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'C:/Program Files/Borland/Delphi5/Projects/Unit2.pas' {Form2};

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.

////////////////////////////unit1
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation

uses Unit2;
var
ff:TForm2;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Application.createform(tform2,ff);
//ff:=TForm2.Create(nil) //这样也可以
ff.show ;
//Form2.show ;//这样了可以

end;

end.
////////////////////unit2
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

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

var
Form2: TForm2;

implementation

{$R *.DFM}
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent:=0;
end;

end.

 
我用的是D6~就是很普通的添加一个form2,
然后在form2中重载CreateParams,就这样啊?
 
那你试了上面的代码吗?
 
我想要做到的是当按下标题栏上关闭按钮时,主窗体隐藏
但此时如果有子窗体出现,那么只要有子窗体出现在任务栏,
当主窗体再次出现时,主窗体才出现在任务栏。
即,子窗体看上去需要和主窗体是在一个平等的位置上的~
 
以下是最小化时的处理。你参考一下吧。

隐藏任务栏上应用程序的按纽

其实本来实现这一技巧很容易的,只要在窗口的最小化事件代码中加入:self.hide;就行了。但问题是Form没有最小化事件。通过摸索,本人发现当主窗口最小化时会调用Application 对象的OnMinimize方法。只要在自己的主窗口定义中添加一个自己的方法,再将它安装到Application对象的OnMinimize方法上去就行了。要再次显示主窗口只要调用show;方法就行了。不过要注意:一定要主窗口的OnShow事件方法中加入Application.Restore;方法调用,否则,第二次按最小化按纽的时候,程序将什么也不做。要使程序启动时不显示主窗口,只要在Project代码中加入Application. ShowMainForm:= false;就行了。

{WinKill.Dpr}
program WinKill;

uses
Forms,
FMain in 'FMain.pas' {FormMain};

{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TFormMain, FormMain);
Application.ShowMainForm:=false;//*****
Application.OnMinimize:=FormMain.AppMinimize;
//******
Application.Run;
end.

{Unit FMain}
.
procedure TFormMain.M_ShowClick(Sender: TObject);
begin
self.Show;
end;
procedure TFormMain.AppMinimize(Sender: TObject);
begin
inherited;
self.Hide;
end;

procedure TFormMain.FormShow(Sender: TObject);
begin
Application.Restore;
//如果将这句去掉,则第二次按最小化按纽的时候,
//程序将什么也不做。
end;

 
后退
顶部