将窗口最小化时将任务栏消失 (50分)

  • 主题发起人 主题发起人 TMXYB
  • 开始时间 开始时间
T

TMXYB

Unregistered / Unconfirmed
GUEST, unregistred user!
我查看了以往的帖子,但还是有点问题。请看代码:(我的FORM1中有个托盘构件)
#############工程代码##################
begin
Application.Initialize;
[red]一运行即将隐藏窗体(运行成功!)[/red]
Application.ShowMainForm:=false;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
#############窗体最小化代码##############
procedure TForm1.AppMessage(var Msg:TWMSYSCOMMAND);
begin
if msg.CmdType=sc_minimize then
begin

showmessage('最小化,[red]但以下代码全部不成功!!TMD[/red]') ;
// Application.ShowMainForm:=FALSE;
//showwindow(application.handle,sw_hide);
//showwindow(application.mainform.handle,sw_hide);
// showwindow(Application.Handle,sw_hide);//[red]任务栏根本就不消失[/red]
//SetWindowLong (Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
//showwindow(Application.Handle,sw_hide);
// showwindow(form1.Handle,sw_hide);//隐藏窗体
end;
end;

当然运行时是将//去掉了的。
 
加上
SetWindowLong(Form1.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
 
用下面3条语句来隐藏
——————————————————————————————————————
ShowWindow(application.Handle,SW_HIDE);
SetWindowLong(application.Handle,GWL_EXSTYLE,GetWindowLong(application.Handle,GWL_EXSTYLE) or
WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
ShowWindow(Application.Handle,SW_SHOW);
——————————————————————————————————————
 
直接form.hide就行了,哪那么麻烦
 
各位老兄:
我以上代码均试过,都不行 ,我是在窗口的最小化事件中写的。(以上打//的都试过。不行窗口的任务栏最小化后不消失!!!)
 
>>来自:gaisy, 时间:2002-9-18 9:01:00, ID:1331470
>>直接form.hide就行了,哪那么麻烦
其实这个就可以的呀,下面代码测试通过的。
procedure TForm1.AppMessage(var Msg: TWMSYSCOMMAND);
begin
if msg.CmdType = sc_minimize then
begin
inherited;
Hide;
end;
end;
 
看这儿,还能缩到状态栏的:
http://kuga.51.net/download/files/snag.zip
 
to gxcooo,如果制作人员中有您的话,就给提一点意见,在点击最小化按钮的时候,最好添加一个Inherited(参考上面),
这样能够有一个窗口最小化的动画。
 

//使任务栏上图标消失
procedure HideTaskIcon;
begin
ShowWindow(Application.Handle, SW_HIDE);
SetWindowLong(Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not
WS_EX_APPWINDOW);
ShowWindow(Application.Handle, SW_SHOW);
end;

//显示任务栏上图标
procedure ShowTaskIcon;
begin
ShowWindow(Application.Handle, SW_HIDE);
SetWindowLong(Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE) and (not WS_EX_TOOLWINDOW or
WS_EX_APPWINDOW));
ShowWindow(Application.Handle, SW_SHOW);
end;
 
睡了一觉,你们的程序要测试后再说。
 
我来拿分喽!
我来写一段,测试通过的:
procedure Tform1.AppMinimize(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
SysTray1.Active := true;托盘显示
end;
在form1.oncreate事件里写:
form1.windowstate := wsminimized;
application.OnMinimize := AppMinimize;
 
总结:
1。 下面的代码隐藏时任务栏仍然可见,只是在左下边了,而且显示有问题。可见不是哪个地方都可用下面的代码实现的
//使任务栏上图标消失
procedure HideTaskIcon;
begin
ShowWindow(Application.Handle, SW_HIDE);
SetWindowLong(Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not
WS_EX_APPWINDOW);
ShowWindow(Application.Handle, SW_SHOW);
end;

//显示任务栏上图标
procedure ShowTaskIcon;
begin
ShowWindow(Application.Handle, SW_HIDE);
SetWindowLong(Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE) and (not WS_EX_TOOLWINDOW or
WS_EX_APPWINDOW));
ShowWindow(Application.Handle, SW_SHOW);
end;

2。下面的代码 其实就是一个AppMessage(var Msg:TWMSYSCOMMAND);中处理最小化过程,而且完全不能实现功能,不知mdc兄在什么情况下测试的。

procedure Tform1.AppMinimize(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
SysTray1.Active := true;托盘显示
end;
在form1.oncreate事件里写:
form1.windowstate := wsminimized;
application.OnMinimize := AppMinimize;

3。 yzhshi 兄的代码要是有一个划到右角的动画就好了。不知改如何实现呢。
 
那个最小化的动画是Windows自己带的,如果你不需要Windows标准的,可参考使用这个
AnimateWindow
函数功能:该函数能在显示与隐藏窗口时能产生特殊的效果。有两种类型的动画效果:滚动动画和滑动动画。
函数原型:BOOL AnimateWindow(HWND hWnd,DWORD dwTime,DWORD dwFlags);
参数:
hWnd:指定产生动画的窗口的句柄。
dwTime:指明动画持续的时间(以微秒计),完成一个动画的标准时间为200微秒。
dwFags:指定动画类型。这个参数可以是一个或多个下列标志的组合。标志描述:
AW_SLIDE:
使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略。
AW_ACTIVE:
激活窗口。在使用了AW_HIDE标志后不要使用这个标志。
AW_BLEND:
使用淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志。
AW_HIDE:
隐藏窗口,缺省则显示窗口。
AW_CENTER:
若使用了AW_HIDE标志,则使窗口向内重叠;若未使用AW_HIDE标志,则使窗口向外扩展。
AW_HOR_POSITIVE:
自左向右显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。
AW_VER_POSITIVE:
自顶向下显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。
AW_VER_NEGATIVE:
自下向上显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。在下列情况下函数将失败:
窗口使用了窗口边界;窗口已经可见仍要显示窗口;窗口已经隐藏仍要隐藏窗口。若想获得更多错误信息,请调用GetLastError函数。
备注:可以将AW_HOR_POSITIVE或AW_HOR_NEGTVE与AW_VER_POSITVE或AW_VER_NEGATIVE组合来激活一个窗口。
可能需要在该窗口的窗口过程和它的子窗口的窗口过程中处理WM_PRINT或WM_PRINTCLIENT消息。对话框,控制,及共用控制已处理WM_PRINTCLIENT消息,缺省窗口过程也已处理WM_PRINT消息。
速查:WIDdOWS NT:5.0以上版本:Windows:98以上版本;Windows CE:不支持;头文件:Winuser.h;库文件:user32.lib。
 

Similar threads

后退
顶部