关于窗口隐藏(100分)

  • 主题发起人 主题发起人 LeonSu
  • 开始时间 开始时间
L

LeonSu

Unregistered / Unconfirmed
GUEST, unregistred user!
我用了下面的函数使窗体从任务栏上消失了,但我最小化时,窗体居然给我跑到屏幕的左
下方呆着,我该如何做才能让它最小化时彻底从屏幕上消失掉!
SetWindowLong(Application.Handle,GWL_ExStyle,WS_EX_ToolWindow);
 
form1.borderstyle:=bsnone;
form1.width:=0;
form1.height:=0;
这样就可以了,我的论坛刚刚开张帮忙捧捧场吧
http://fanren.iscool.com
 
ShowWindow(Application.Handle, SW_HIDE);
 

application.showmainform:=false;
或者用registerServierprocess函数把它注册成一个服务器程序,
 
To:Book523
RegisterServiceProcess这个函数怎么用,DELPHI中没说明。
同时,好象这个函数是让程序从程序列表中删除。
 
RegisterServiceProcess在2000/XP下不能用,
你可以这样Form.Visible:=false;
如果是主窗口可以用application.showmainform:=false
 
隐藏
Shell_NotifyIcon(NIM_ADD,@Tray);
ShowWindow(Handle, SW_HIDE);
恢复
ShowWindow(Handle,SW_RESTORE);
Shell_NotifyIcon(NIM_DELETE,@Tray);
 
我不是要一开始就隐藏窗体,而是当我最小化窗体时隐藏它。
 
你试试看:
procedure TForm1.FormCreate(Sender: TObject);
var
FullRgn, ClientRgn, ButtonRgn: THandle;
Margin, X, Y: Integer;
begin
top:=screen.Height-50;
left:=screen.width-120;
height:=Label1.Height;
width:=Label1.width;
Margin := (Width - ClientWidth) div 2;
FullRgn := CreateRectRgn(0, 0, Width, Height);
X := Margin;
Y := Height - ClientHeight - Margin;
ClientRgn := CreateRectRgn(X, Y, X + ClientWidth, Y + ClientHeight);
CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF);
X := X + Label1.Left;
Y := Y + Label1.Top;
ButtonRgn := CreateRectRgn(X, Y, X + Label1.Width, Y + Label1.Height);
CombineRgn(FullRgn, FullRgn, ButtonRgn, RGN_OR);
SetWindowRgn(Handle, FullRgn, True);
//Hide Taskbar Icon
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;
 
TO: BDFan
不行
 
procedure syscommand(var message:twmsyscommand);message wm_syscommand;
begin
inherited;
if application.mainform=self then
if message.cmdtype=sc_minimize then
begin
showwindow(application.handle,sw_hide);
showwindow(application.mainform.handle,sw_hide)
end
end;
 
我也遇到了跟楼主一样的问题,哪个大侠能总结一下最好用的方法??[:D]
 
哈哈,找到了!
转载:
以下是最小化时的处理。你参考一下吧。

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

其实本来实现这一技巧很容易的,只要在窗口的最小化事件代码中加入: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;
 
visible:=false
 
Application.ShowMainForm :=False
 
application.Minimize;
 
后退
顶部