求救!!!如何让运行的程序,在windows任务栏上显示呢? (100分)

  • 主题发起人 faguobali
  • 开始时间
F

faguobali

Unregistered / Unconfirmed
GUEST, unregistred user!
如何让运行的程序在windows任务栏上的声音图标的那个地方显示呢。并且在每次启动应用
程序时,在声音图标的位置显示。就象SQL服务管理器一样。
小弟在此表示衷心的谢意:))
 
用第三方的控件包很容易作出来,比如RxLib控件包,里面还有很多例程,看看就明白了.当然
不用也可以不过麻烦些.
要Rxlib可以在这里下载:
http://www.playicq.com/databack/rxlib275.zip
 
请问如何在程序中实现呢?多谢了!:))
 
rxlib的控件包中就有,直接把那个RxTrayIcon1控件放上去就行了,连代码都不用写,还可以控件图标的动画
 
procedure TForm1.ModifyTrayIcon(Action: DWORD);
var
NIData: TNotifyIconData;
begin
with NIData do
begin
cbSize := sizeof(TNotifyIconData);
UID := 0;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
Wnd := Handle;
uCallBackMessage := WM_TRAYICON;
HICON := Application.Icon.Handle;
StrPCopy(szTip, Application.Title);
end;
Shell_NotifyIcon(Action, @NIData);
end;

procedure TForm1.WMTrayIcon(var message: TMessage);
var
MousePos: TPoint;
begin
if message.LPARAM = WM_RBUTTONDOWN then
begin
SetActiveWindow(Handle);
GetCursorPos(MousePos);
PopupMenu.Popup(MousePos.X, MousePos.Y);
end;
end;
 
可以去看看下面的控件
个人感觉比rxlib的好
CoolTrayIcon v3.0.0

自动将Form缩小为TrayIcon,可设置MinimizeToTrayIcon为True,则Form最小化时不显示在任务栏上。
个人认为较RxLib中的RxTrayIcon好用,而且还有源代码哦!

新增加了些属性和方法,如BitMapToIcon方法可以将位图转换为Icon使用。此外,还添加了一个新控件
TextTrayIcon,它直接将文字作为Tray Icon,可以设置字体、颜色等,和Timer结合起来你就可以实现动态文字的TrayIcon了,这还是满酷的嘛:)

完整功能. 源代码: 有
适用于 CB3 CB4 CB5 D2 D3 D4 D5 D6

设置几个属性就可以了
有例子程序

http://www.playicq.com/dispdoc.php?t=&id=257
 

只要用Shell_NotifyIcon处理托盘图标,并且使程序最小化时不在任务栏上显示(可以
用ShowWindow函数),再处理一下托盘图标发回来的消息就行了。
具体内容可以参看《Delphi5开发人员指南》和Delphi的帮助。
《Delphi5开发人员指南》中的例子太长了,就不抄了,想要就留E-mail吧。
其实,dfw的资料下载站就有书下。
 
这是系统托盘编程,网上有好多资料的,自己搜索
 
如果你只想让你的程序在任务栏里显示?我有一段程序,你或许能用的上了。我自己就写过这样一段程序了。
use shellapi//add shellapi单元
……
const
wm_trayicon=2000//是托盘信息,不是自定义信息
private//拦截窗体和窗体菜单信息
procedure wmtrayicon(var msg:tmessage);message wm_trayicon;//
procedure wmsyscommand(var msg:tmessage);message wm_syscommand;
var
tid:tnotifyicondata;//定义托盘信息的变量
procedure tform1.create(sender:tobject);
begin
tid.cbSize:=sizeof(tid);
tid.Wnd:=handle;
tid.uID:=1;
tid.uFlags:=NIF_MESSAGE OR NIF_ICON OR NIF_TIP;
tid.uCallbackMessage:=wm_trayicon;
tid.hIcon:=application.Icon.Handle;//程序本身的图标
shell_notifyicon(nim_add,@tid);//加载图标
end;
procedure tform1.wmsyscommand(var msg:tmessage);
begin
case msg.lparam of
sc_minimize,sc_close:self.hide;//程序最小化,或是关闭的时候,窗体隐藏;
end;
procedure tform1.trayicon(var msg:tmessage);
var
p:tpoint;
begin
if msg.LParam=wm_rbuttondown then //判断是否是鼠标右键按到小图标
begin
getcursorpos(p); //确定得到现在鼠标在屏幕的位置。
popupmenu3.Popup(p.X,p.Y);
end
else if
msg.LParam=wm_lbuttondown then
self.Show;


end;








 
up
保存一下
 
用API实现:

unit TrayIcon;

interface

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

type
//----------------------------------------------------------------------
PNotifyIconData = ^TNotifyIconDataA;
TNotifyIconDataA = record
cbSize : DWORD;
Wnd : HWND;
uID : UINT;
uFlags : UINT;
uCallbackMessage : UINT;
hIcon : HICON;
szTip : array [0..63] of AnsiChar;
end;
//----------------------------------------------------------------------
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
open1: TMenuItem;
close1: TMenuItem;
N1: TMenuItem;
about1: TMenuItem;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure open1Click(Sender: TObject);
procedure close1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
//-------------------------------------------------------------
IconData: TNotifyIconData;
procedure ShowIcon;
procedure IconOnClick(var message:TMessage); message WM_USER+1;
Procedure WMSysCommand(Var message : TMessage) ; Message WM_SYSCOMMAND ;
//-------------------------------------------------------------
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.IconOnClick( var message: Tmessage);
var p : TPoint;
begin
if (message.lParam = WM_LBUTTONDOWN) then
begin
ShowWindow(Handle, SW_SHOW );
end;

if (message.lParam = WM_RBUTTONDOWN) then
begin
GetCursorPos(p);
popupmenu1.Popup( p.x ,p.y );
end;
end;

Procedure TForm1.WMSysCommand(Var Message : TMessage) ;
begin

if (Message.WParam = SC_MINIMIZE) then
begin
ShowIcon;
end
else
Inherited;

end;

procedure TForm1.ShowIcon;
begin
IconData.cbSize := SizeOf( IconData );
IconData.Wnd := Handle;
IconData.uID := 1;
IconData.uFlags := NIF_ICON
or NIF_MESSAGE or NIF_TIP;
IconData.uCallBackMessage := WM_USER+1;
IconData.hIcon := application.Icon.Handle;
IconData.szTip := 'LANChat';
Shell_NotifyIcon( NIM_ADD, @IconData );
ShowWindow(Handle, SW_HIDE);
hide;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Shell_NotifyIcon( NIM_DELETE, @IconData );
end;

procedure TForm1.open1Click(Sender: TObject);
begin
Form1.Show;
end;

procedure TForm1.close1Click(Sender: TObject);
begin
Form1.close;
end;

procedure TForm1.FormShow(Sender: TObject);
begin

showwindow(application.handle,sw_hide);


end;

procedure TForm1.FormCreate(Sender: TObject);
begin
showicon;
end;

end.
 
多人接受答案了。
 
顶部