最小化的问题
用户按下窗口最小化按钮,或者任务栏按钮或者系统的显示桌面按钮时,程序能从任务栏上隐藏,像flashget一样,怎么做 问题点数:0、回复次数:20Top
1 楼angle097113(深思不解)回复于 2003-12-04 08:37:41 得分 0
转贴 你可以参考下:
const
wm_trayicon=wm_user+200;
public:
procedure wmsyscommand(var msg:tmessage);message wm_syscommand;
procedure wmtrayicon(var msg:tmessage);message wm_trayicon;
//最小化为系统托盘图标
procedure tform1.wmsyscommand(var msg:tmessage);
var
myicon:tNotifyIconData;
begin
if msg.WParam=SC_MINIMIZE then
begin
with myicon do
begin
cbSize :=sizeof(tnotifyicondata);//纪录需要的内存大小
Wnd :=form1.handle; //最小化窗体的句柄
uID :=0; //托盘图标序号
uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;//
uCallbackMessage:=wm_trayicon;
hIcon:=form1.Icon.Handle;
szTip :='系统托盘图标编程示例';
end;
shell_notifyicon(NIM_ADD,@myicon);
form1.Visible :=false;
end
else
begin
//如果是其它的SystemCommand 消息则调用系统缺省处理函数处理之。
DefWindowProc(Form1.Handle,msg.Msg,Msg.WParam,Msg.LParam);
end;
end;
//最小化为图标的回调
procedure tform1.wmtrayicon(var msg:tmessage);
var
myicon:tnotifyicondata;
begin
if msg.LParam=wm_lbuttondown then
begin
with myicon do
begin
cbSize :=sizeof(tnotifyicondata);
Wnd:=form1.Handle;
uID :=0;
uFlags :=NIF_ICON OR NIF_MESSAGE OR NIF_TIP;
uCallbackMessage :=wm_trayicon;
hIcon :=form1.Icon.Handle;
szTip :='系统托盘图标编程示例';
end;
shell_notifyicon(NIM_delete,@myicon);
form1.visible :=true;
showmessage('鼠标左键单击返回');
end;
end;
Top
2 楼fcjg(★飘来飘去!★)回复于 2003-12-04 08:45:52 得分 0
upTop
3 楼outer2000(天外流星)回复于 2003-12-04 09:19:28 得分 0
找个现成的TTRAYICON吧,GOOGLE搜索;Top
4 楼linnet2000(缘目求鱼)回复于 2003-12-04 09:21:08 得分 0
upTop
5 楼TranceChow(国家养的猪)回复于 2003-12-04 10:47:28 得分 0
不行啊,按任务栏按钮或者显示桌面程序都还留在任务栏上,我是xp系统Top
6 楼fjyhs(辉辉)回复于 2003-12-04 10:55:26 得分 0
我这有一个控件包rxlib275d6 里面的RxTrayIcon控件非常好用
要的话留下email.
Top
7 楼TranceChow(国家养的猪)回复于 2003-12-04 19:04:37 得分 0
dragonchow718@hotmail.com,谢谢Top
8 楼jxc163(一寒)回复于 2003-12-05 08:23:48 得分 0
你到www.2ccc.com去,有个控件可以下载.Top
9 楼delphiseabird(沙鸥)回复于 2003-12-05 08:35:01 得分 0
ShowWindow(Application.Handle,SW_HIDE); //在任务栏上隐藏图标
main.Hide;//隐藏窗体;Top
10 楼wlyx2003(网络游侠)回复于 2003-12-05 10:45:23 得分 0
只要在Form的OnCreate事件中加入如下代码即可使程序在工具栏中隐形
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);Top
11 楼wlyx2003(网络游侠)回复于 2003-12-05 10:49:10 得分 0
在工程文件的dpr文件中加入如下代码可使程序在任务管理器中隐形
Application.title:='';
Application.Initialze;
Application.CreateForm(TForm1.Form1);
Application.Run;
或在Form1的OnCreate中加入如下代码:
RegisterServiceProcess(GetCurrentProcessID(),RSP_SIMPLE_SERVICE);Top
12 楼wlyx2003(网络游侠)回复于 2003-12-05 10:59:25 得分 0
上述第一种方法对于98适用,2000或XP无法实现,第二种方法可适用于2000,XP未验证Top
13 楼TranceChow(国家养的猪)回复于 2003-12-05 12:09:42 得分 0
我不是不会在任务栏上隐藏,我是不会在用户按下显示桌面的时候让程序在任务栏上隐藏,我的程序怎么知道用户按下了显示桌面的按钮,拜托各位了!Top
14 楼wlyx2003(网络游侠)回复于 2003-12-07 18:28:51 得分 0
在窗口最小化事件里进行处理。因为当你按显示桌面的时候,会发最小化消息给每个窗口,所以只要响应最小化事件即可。Top
15 楼TranceChow(国家养的猪)回复于 2003-12-10 08:32:20 得分 0
wlyx2003(网络游侠)你试过没有啊,按显示桌面的时候程序根本就没有处在最小化状态,怎么会收到最小化的消息呢Top
16 楼wlyx2003(网络游侠)回复于 2003-12-10 11:20:12 得分 0
以下是我的测试代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils,Classes, Controls, Forms,ShellApi;
const
MY_TRAY_ICON=0;
WM_TRAYNOTIFY=WM_USER+1;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
protected
procedure OnMin(Sender:TObject);
procedure WMTrayNotify(Var Msg:TMessage);message WM_TRAYNOTIFY;
private
{ Private declarations }
public
{ Public declarations }
NT:TNOTIFYICONDATA;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//窗体最小化事件
procedure TForm1.OnMin(Sender:TObject);
begin
ShowWindow(Application.Handle,SW_HIDE);
Application.Minimize;
end;
//响应鼠标在托盘区图标上的活动事件
procedure TForm1.WMTrayNotify(var Msg:TMessage);
begin
if (Msg.LParam=WM_LBUTTONUP)then
begin
ShowWindow(Application.Handle,SW_SHOW);
Application.Restore;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
with NT do
begin
cbsize:=sizeof(TNOTIFYICONDATA);
WND:=HANDLE;
UID:=MY_TRAY_ICON;
uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallBackMessage:=WM_TRAYNOTIFY;
hIcon:=Icon.Handle;
szTip:='测试程序'#0;
end;
Shell_NotifyIcon(NIM_ADD,@NT);
Application.OnMinimize:=OnMin;
Application.OnDeactivate:=OnMin;
end;
end.Top
17 楼delphiseabird(沙鸥)回复于 2003-12-15 17:06:22 得分 0
楼上要是不行的话 那就用Hook试试吧Top
18 楼ccyx(打死也不说)回复于 2003-12-15 20:07:13 得分 0
CoolTrayIcon 这个控件可以试一试 还包含BallonTip功能 很好用
我自己跟据C++Builder 6中的TrayIocn写了一个也可以显示BallonTip可觉得没CoolTrayIcon
好用于是就扔掉了 由时间找回来请各位大虾帮我改一下
Top
19 楼dqycxf(真爱你的云)回复于 2003-12-15 20:40:14 得分 0
//隐藏任务条
ShowWindow(Application.Handle, SW_HIDE);
//显示任务条
ShowWindow(Application.Handle, SW_RESTORE);
Top
20 楼xiaoqiang123(xiaoqiang)回复于 2003-12-16 14:36:39 得分 0
楼主,我上个星期做了一个,最小化状态栏没有,只有个托盘图标,和FLATGET一样的,你要我就发源码给你,你发消息给我就行了,注明是哪张贴的哦Top




