请问各位朋友,我做了个小程序,不论最大化还是最小化,想只在系统托盘区显示图标,请问怎么实现呢?谢谢!
解决方案 »
- TBiDiMode属性是什么意思?
- 我写了一个键盘记录,但是怎么控制键盘记录的开关?
- [100分]这段C的汇编代码转到delphi中如何写?
- 操作EXCEL后,如何在程序中写对EXCEL的保存代码啊
- 【板务醒目】辞去 Windows SDK/API 板斑竹职务 9/10【散分醒目】
- 用什么组件可以高亮度显示html中的部分文字,谢谢
- 如何在ServerSocket发生onClientError事件的时候进行断开连接处理?(分不够再加)
- 怎么样在DBGrid中显示序列?
- 如何在设计表期间字段赋初值(菜鸟级,在线等!)
- 给 TDateTimePicker如何赋值??
- 求delphi 的 gzip 算法,来者有分!
- 数据库 两表合并问题
再加上1楼那句就OK了,或者自己用代码实现托盘图标
就是在程序运行时不在任务栏显示,只在托盘区显示图标,就像千千静听一样。一楼的语句我试了,程序没反应。
代码如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.ShowMainForm:=False;
end;
我已经加上了那个RZTrayIcon。
ShowWindow(Application.Handle, SW_HIDE);
直接用主窗体会有些问题
比较好的办法是主窗体空在那里, 就一个白的就可以按楼上办法, OnCreate 中写到Application.ShowMainForm:=False;
// 这里另建一个窗口作界面
xxxForm := TxxxForm.Create(Self);
xxxForm.Show;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, shellapi, Menus, ExtCtrls;
const
TrayIconID = 1;
CM_TRAYICON=WM_USER+1001;
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
Timer1: TTimer;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
FIcon: TIcon;
Flag: Boolean;
nid: TNotifyIconData;
procedure MessageHandler(var msg: TMessage); message CM_TRAYICON;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
FIcon := TIcon.Create;
FIcon.Handle := LoadIcon(HInstance, 'MainIcon' );
if FIcon.Handle = 0 then
begin
MessageDlg('无法打开图标!', mtError, [mbok], 0);
Application.Terminate;
exit;
end; with nid do
begin
cbSize := sizeof(TNotifyIconData);
Wnd := Handle;
uID := TrayIconID;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallbackMessage := CM_TRAYICON;
hIcon := FIcon.Handle;
StrPCopy(szTip, '这是一个测试程序!')
end;
Shell_NotifyIcon(NIM_ADD, @nid);
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Shell_NotifyIcon(NIM_DELETE, @nid);
FIcon.Free;
end;procedure TForm1.N1Click(Sender: TObject);
begin
MessageDlg('这是一个测试程序!', mtInformation, [mbOK], 0);
end;procedure TForm1.N2Click(Sender: TObject);
begin
close;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := false;
if Flag = false then
if Visible then
Hide
else
Show;
end;procedure Tform1.MessageHandler(var msg: TMessage);
var
Point: TPoint;
begin
if msg.WParam = TrayIconID then
case msg.LParam of
WM_LBUTTONDOWN:
begin
with Timer1 do
begin
Enabled := true;
Interval := GetDoubleClickTime;
end;
end;
WM_LBUTTONDBLCLK:
begin
Flag := true;
MessageDlg('这是一个测试程序!', mtInformation, [mbok], 0);
Flag := false;
end;
WM_RBUTTONDOWN:
begin
GetCursorPos(Point);
PopupMenu1.Popup(Point.X, Point.Y);
end;
end;
end;end.如果要控制就加一个全局控制变量就好了
Form1.Hide;//隐藏窗体
ShowWindow(Application.Handle,SW_HIDE);//隐藏任务栏图标
//如此就可以了
//改变窗体的 GWL_EXSTYLE 属性
setwindowlong(application.Handle,GWL_EXSTYLE,
getwindowlong(application.Handle,GWL_EXSTYLE)
or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);