我做了个有托盘图标的应用程序,但窗体最小化时虽然不在任务栏上,但总在左下角(开始菜单的地方),右下角倒是有我的图标,请问这是为什 其实我想做个类似sql server服务管理器的小东西窗体设成了最小化并用setwindowlong把任务栏中的东西去掉但发现又出现在左下角不知为什么 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 application.mini***application.restore. 又:Delphi的帮助文件中有个例子演示了当窗口从当前窗口变为后台窗口时如何自动隐藏, 能满足你的要求,找找看. 贴出来吧:interfaceuses ..., ShellAPI;const SYSTRAY_ID = 1; { 用于系统托盘图标 } WM_SYSTRAYMSG = WM_USER + 100; { 自定义消息, 用于系统托盘图标 }type TForm1 = class(TForm) ... procedure FormCreate(Sender: TObject); procedure AppOnMinimize(Sender:TObject); ... procedure FormDeactivate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } procedure SysTrayOnClick(var message:TMessage); message WM_SYSTRAYMSG; { 处理系统托盘图标发来的消息 } public { Public declarations } end;var Form1: TForm1; SysTrayIcon: TNotifyIconData;{ 定义用于系统托盘图标的变量 }implementationfunction RegisterServiceProcess(dwProcessID, dwType: integer): integer; stdcall; external 'KERNEL32.DLL'; { 声明未公开的API函数。 此函数将本程序注册为系统进程, 将不被显示在任务列表中 }procedure TForm1.FormCreate(Sender: TObject);begin with application do begin showwindow(handle, SW_HIDE); OnMinimize := AppOnMinimize; { 窗口最小化时隐藏 } OnDeactivate := FormDeactivate; { 窗口变为后台窗口时隐藏 } end; RegisterServiceProcess(GetcurrentProcessID, 1); { 注册为系统进程 } with SysTrayIcon do { 以下是填充系统托盘图标所用数据 } begin cbSize := sizeof(SysTrayIcon); wnd := Handle; uID := SYSTRAY_ID; uFlags := NIF_ICON OR NIF_MESSAGE OR NIF_TIP; uCallBackMessage := WM_SYSTRAYMSG; hIcon := Application.Icon.Handle; szTip := '系统进程监控'; end; Shell_NotifyIcon(NIM_ADD, @SysTrayIcon); { 将图标加入系统托盘 } end;procedure Tform1.AppOnMinimize(Sender: TObject);begin ShowWindow(application.handle, SW_HIDE); { 隐藏本进程在任务栏上的任务按钮 }end;procedure TForm1.FormDeactivate(Sender: TObject);begin application.minimize;end;procedure tform1.SysTrayOnClick(var message:TMessage);begin { 处理系统托盘图标发来的消息 } with message do begin if (lparam = wm_lbuttondown) or (lparam = wm_rbuttondown) then begin { 当用户在系统托盘图标上左击或右击时恢复窗口 } application.restore; SetForegroundWindow(Handle); showwindow(application.handle, SW_HIDE); { 隐藏本进程在任务栏上的任务按钮 } end; end;end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);begin Shell_NotifyIcon(NIM_DELETE, @SysTrayIcon); { 删除系统托盘上的图标, 非必须 } RegisterServiceProcess(GetcurrentProcessID, 0); { 从系统进程中注销 }end; 关键是这里:with application dobegin showwindow(handle, SW_HIDE); OnMinimize := AppOnMinimize; { 窗口最小化时隐藏 } OnDeactivate := FormDeactivate; { 窗口变为后台窗口时隐藏 }end; 你最小化的不是主窗体,就当然缩到左下角了,你把它Hide掉就行了。 试试可以吗------------------------procedure TForm1.FormActivate(Sender: TObject);begin // 隐藏Form1 注意FORM1的Borderstyle设置为bsNone Form1.width:=0; Form1.Height:=0; ShowWindow( Application.Handle, SW_HIDE );end; delphi panel 隔段时间显示不同的内容 界面多时钟 请问怎么根据输入的用户名密码,实时动态的改变ADO连接字符串?谢谢 高手来帮个忙,好吗? fastreport问题:怎样控制预览中得打印按钮只能打印一次或者点击 确定后,不出现预览直接打印,急?多谢? 区位输入法Delphi版, 源码分享, ^^ 释放内存的问题 >请教有关窗口调用的问题(新手)?< delphi 能定义#define RGB(r,g,b) ..........类似的宏吗? 有问题问大家。。。。。。 Formula one 做打印的问题? 怎样在STRINGGRID里画一条对角斜线?
application.restore.
..., ShellAPI;const
SYSTRAY_ID = 1; { 用于系统托盘图标 }
WM_SYSTRAYMSG = WM_USER + 100; { 自定义消息, 用于系统托盘图标 }
type
TForm1 = class(TForm)
...
procedure FormCreate(Sender: TObject);
procedure AppOnMinimize(Sender:TObject);
...
procedure FormDeactivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
procedure SysTrayOnClick(var message:TMessage); message WM_SYSTRAYMSG;
{ 处理系统托盘图标发来的消息 }
public
{ Public declarations }
end;var
Form1: TForm1;
SysTrayIcon: TNotifyIconData;{ 定义用于系统托盘图标的变量 }implementationfunction RegisterServiceProcess(dwProcessID, dwType: integer): integer;
stdcall; external 'KERNEL32.DLL';
{ 声明未公开的API函数。
此函数将本程序注册为系统进程, 将不被显示在任务列表中
}procedure TForm1.FormCreate(Sender: TObject);
begin
with application do
begin
showwindow(handle, SW_HIDE);
OnMinimize := AppOnMinimize; { 窗口最小化时隐藏 }
OnDeactivate := FormDeactivate; { 窗口变为后台窗口时隐藏 }
end; RegisterServiceProcess(GetcurrentProcessID, 1); { 注册为系统进程 } with SysTrayIcon do { 以下是填充系统托盘图标所用数据 }
begin
cbSize := sizeof(SysTrayIcon);
wnd := Handle;
uID := SYSTRAY_ID;
uFlags := NIF_ICON OR NIF_MESSAGE OR NIF_TIP;
uCallBackMessage := WM_SYSTRAYMSG;
hIcon := Application.Icon.Handle;
szTip := '系统进程监控';
end; Shell_NotifyIcon(NIM_ADD, @SysTrayIcon); { 将图标加入系统托盘 }
end;procedure Tform1.AppOnMinimize(Sender: TObject);
begin
ShowWindow(application.handle, SW_HIDE); { 隐藏本进程在任务栏上的任务按钮 }
end;procedure TForm1.FormDeactivate(Sender: TObject);
begin
application.minimize;
end;procedure tform1.SysTrayOnClick(var message:TMessage);
begin { 处理系统托盘图标发来的消息 }
with message do
begin
if (lparam = wm_lbuttondown) or (lparam = wm_rbuttondown) then
begin { 当用户在系统托盘图标上左击或右击时恢复窗口 }
application.restore;
SetForegroundWindow(Handle);
showwindow(application.handle, SW_HIDE);
{ 隐藏本进程在任务栏上的任务按钮 }
end;
end;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Shell_NotifyIcon(NIM_DELETE, @SysTrayIcon); { 删除系统托盘上的图标, 非必须 }
RegisterServiceProcess(GetcurrentProcessID, 0); { 从系统进程中注销 }
end;
关键是这里:
with application do
begin
showwindow(handle, SW_HIDE);
OnMinimize := AppOnMinimize; { 窗口最小化时隐藏 }
OnDeactivate := FormDeactivate; { 窗口变为后台窗口时隐藏 }
end;
------------------------
procedure TForm1.FormActivate(Sender: TObject);
begin
// 隐藏Form1 注意FORM1的Borderstyle设置为bsNone
Form1.width:=0;
Form1.Height:=0;
ShowWindow( Application.Handle, SW_HIDE );
end;