请问Delphi中怎么样可以使不在任务拦内显示,而只在系统拦里显示....像Winamp/QQ一样??..(50分)

  • 主题发起人 主题发起人 namelysweet
  • 开始时间 开始时间
N

namelysweet

Unregistered / Unconfirmed
GUEST, unregistred user!
请问Delphi中怎么样可以使[red]不在任务拦内显示[/red],而只在系统拦里显示....像Winamp/QQ一样??..


thx...
 
没人知道吗??? [:(!]
 
我以前是使用trayIcon控件来完成的,你可以到delphi深度历险中去下载。
只需要少许代码即可以完成你要的功能
 
看看这个例子
unit Unit1;

interface

{ 记住在uses部分中包括 ShellAPI}

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

{自定义消息,当小图标捕捉到鼠标事件时Windows向回调函数发送此消息}
const MY_MESSAGE = WM_USER + 100;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormPaint(Sender: TObject);
private
procedure OnIconNotify(var Message: TMessage);
message MY_MESSAGE;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

{当小图标捕捉到鼠标事件时进入此过程}
procedure TForm1.OnIconNotify(var Message: TMessage);
const
Busy: Boolean = false;
begin
if not Busy then begin

Busy := true;
if Message.LParam=WM_LBUTTONDOWN then
if Application.MessageBox('Are you sure',
'Exit', MB_YESNO)=IDYES then Close;
Busy := false;
end;
end;

{当主Form建立时通知Windows加入小图标}
procedure TForm1.FormCreate(Sender: TObject);
var
nid: TNotifyIconData;
begin
nid.cbSize := sizeof(nid); // nid变量的字节数
nid.Wnd := Handle; // 主窗口句柄
nid.uID := -1; // 内部标识,可设为任意数
nid.hIcon := Application.Icon.Handle; // 要加入的图标句柄,可任意指定
nid.szTip := 'This is a test application'; // 提示字符串
nid.uCallbackMessage := MY_MESSAGE; // 回调函数消息

nid.uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE; // 指明哪些字段有效
if not Shell_NotifyIcon(NIM_ADD, @nid) then begin
ShowMessage('Failed!');
Application.Terminate;
end;
{将程序的窗口样式设为TOOL窗口,可避免在任务条上出现}
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
end;

{程序被关闭时通知Windows去掉小图标}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
nid: TNotifyIconData;
begin
nid.cbSize := sizeof(nid); // nid变量的字节数
nid.uID := -1; //内部标识,与加入小图标时的数一致
nid.Wnd := Handle; //主窗口句柄
Shell_NotifyIcon(NIM_DELETE, @nid); //去掉小图标

end;

{主窗口初始化完毕并显示时将激活Paint重画事件,此时将主窗口隐藏}
procedure TForm1.FormPaint(Sender: TObject);
begin
Hide;
end;

end.
 
不在任务栏中显示:
ShowWindow(Application.Handle, SW_HIDE);
在托盘区显示:
用控件最简单了,如RxTrayIcon
 
RxTrayIcon 在哪里可以找到? thx...
 
同意naughtboy,但需要加入TapplicationEnvents,在最小化事件中加入:
Form1.hide;
这样最小化时才不显示,否则最小化时会在屏幕左下脚显示!
 
RxTrayIcon是控件包RxLib2.75里的一个控件,到处都有下载
 
刚学习DELPHI没2天,水平很菜,请问这句
ShowWindow(Application.Handle, SW_HIDE);

应该加到哪啊???谢谢
 
你在什么时候想把图标从任务栏中消失,就在哪里用。
比如:
//BUTTON1的caption为“隐藏图标”
procedure TForm1.Button1Chick(Sender:TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
同理,你也可以显示图标。
用 ShowWindow(Application.Handle, SW_SHOW);
 
thx

i will test:)[:D]
 
后退
顶部