窗体最小化?(50分)

  • 主题发起人 主题发起人 raiboi
  • 开始时间 开始时间
R

raiboi

Unregistered / Unconfirmed
GUEST, unregistred user!
有几个Show或是ShowModal出来的窗体,
当最小化其中任何一个时整个程序最小化到任务栏,
我该怎么做?
 
你的主窗体是MDI窗体吗?
主窗体是MDI窗体时,其子窗体(FormStyles 为fsMDIChildr的)Show出来后,点最小化
按钮就只会将子窗体最小化到主窗体底部。
 
你那什么情况先!
 
procedure TForm1.FormResize(Sender: TObject);
var
h:HWnd;
begin
h:=handle;
while h > 0 do
begin
if isWindowVisible(h) then
postmessage(h,WM_SYSCOMMAND,SC_MINIMIZE,0);
h:=getnextwindow(h,GW_HWNDNEXT);
end;
end;
 
不好意思,程序开始做的时候没做成MDI的,所以如果要最小化,
得一层层的去最小化或是关掉所有的子窗体,所以我想找个什么地方弄一下.
Application.Minimize;
另外想说明一下,不管是哪个窗体被按了最小化时整个程序都要最小化。如果
麻烦,我另外加分。谢谢!
 
也就是说, 拦截所有窗体的最小化事件。
 
[:)]功能是实现了~ 比较笨 [:D][:D]
例子如下-------
主窗体: Form1
子窗体:Form2
------------------
代码1:
unit Unit1;

interface

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

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

var
Form1: TForm1;
show_x:boolean;
implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
form2.Show;
show_x:=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
show_x:=false;
end;

end.
------------------------
代码2:
unit Unit2;

interface

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

type
TForm2 = class(TForm)
procedure FormResize(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.FormResize(Sender: TObject);
begin
if show_x then
begin
if form2.WindowState=wsNormal then
form1.WindowState:=wsMinimized;//wsMaximized wsNormal;
end;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
show_x:=false;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
BorderStyle:=bsSingle;
end;
end.
 
上面写的~
窗体 BorderStyle:=bsSingle;
--------------
用消息最简单,向主窗口发送最小化消息
 
private
{ Private declarations }
Procedure CreateParams(Var Params: TCreateParams); Override;

Procedure TForm.CreateParams(Var Params: TCreateParams);
Begin
Inherited CreateParams(Params);
With Params Do exStyle := exStyle Or WS_EX_APPWINDOW;
end;


 
怎样拦截所有窗体的最小化事件?
 
增加一个类,在form的最小化事件中写Application.Minimize;
然后在你原来的窗体中按右键,选查看文本,就是看.dfm源文件,
把form的祖先改为刚建的窗体类,这样就实现了代码重用,
VB可做不到。
 

我试过了, 如果窗体是Show出来的,可以用Application.Minimize. 否则不行, 为什么?
To ysai :
不过你的办法确实是个好办法。
 
多人接受答案了。
 
后退
顶部