📄 ufmain.pas
字号:
unit ufMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls,ShellApi, Menus,FileCtrl,Registry,StdCtrls, ImgList;
const
MI_ICONEVENT=WM_USER+1;
type
TfMain = class(TForm)
Timer1: TTimer;
PopupMenu1: TPopupMenu;
Normal: TMenuItem;
N2: TMenuItem;
CloseN: TMenuItem;
Label1: TLabel;
mini: TMenuItem;
N4: TMenuItem;
max: TMenuItem;
N5: TMenuItem;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure CloseNClick(Sender: TObject);
procedure NormalClick(Sender: TObject);
procedure miniClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure maxClick(Sender: TObject);
private
MyNotifyStruct: TNotifyIconData;
icount:integer;
{ Private declarations }
public
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
procedure IconOnClick(var message:TMessage); message MI_ICONEVENT;
{ Public declarations }
end;
var
fMain: TfMain;
implementation
{$R *.dfm}
procedure TfMain.FormClose(Sender: TObject; var Action: TCloseAction);
var
nid: TNotifyIconData;
begin
if MessageDlg('确定要退出吗?',mtConfirmation,
[mbYes, mbNo],0) = mrYes then
begin
nid.cbSize := sizeof(nid); // nid变量的字节数
nid.uID := 1; //内部标识,与加入小图标时的数一致
nid.Wnd := Handle; //主窗口句柄
Shell_NotifyIcon(NIM_DELETE, @nid); //去掉小图标
action:=cafree;
end
else
begin
action:=canone;
end;
end;
procedure TfMain.FormShow(Sender: TObject);
begin
timer1.Enabled:=true;
icount:=0;
end;
procedure TfMain.WMSysCommand(var Msg: TWMSysCommand);
begin
if (Msg.CmdType=SC_MINIMIZE) then
begin
ShowWindow(Application.Handle,SW_HIDE);
end;
DefaultHandler(Msg);
end;
procedure TfMain.FormCreate(Sender: TObject);
begin
with Application do
SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW or GetWindowLong(Handle,
GWL_EXSTYLE));
with MyNotifyStruct do begin
cbSize := sizeof(MyNotifyStruct);
Wnd := Handle;
uID := 1;
uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE;
uCallbackMessage := MI_ICONEVENT;
hIcon := Application.Icon.Handle;
szTip := '系统托盘程序';
end;
Shell_NotifyIcon(NIM_ADD, @MyNotifyStruct);
ShowWindow(Application.Handle,SW_HIDE);
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
end;
procedure TfMain.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @MyNotifyStruct);
end;
procedure TfMain.IconOnClick(var message: TMessage);
var
p:TPoint;
begin
//如果按下的是鼠标右键,则显示弹出菜单
if(message.lParam=WM_RBUTTONDOWN)then
begin
GetCursorPos(p);
PopupMenu1.Popup(p.x,p.y);
end;
end;
procedure TfMain.FormActivate(Sender: TObject);
begin
fmain.width:=330;
fmain.Height:=93;
ShowWindow(Application.Handle,SW_HIDE);
end;
procedure TfMain.CloseNClick(Sender: TObject);
begin
close;
end;
procedure TfMain.NormalClick(Sender: TObject);
begin
fmain.repaint;
fmain.width:=330;
fmain.height:=93;
fmain.show;
showwindow(application.handle,SW_ShowNORMAL);
end;
procedure TfMain.miniClick(Sender: TObject);
begin
showwindow(application.handle,SW_Minimize);
end;
procedure TfMain.Timer1Timer(Sender: TObject);
begin
timer1.enabled:=false;
icount:=icount+1;
if icount>4 then icount:=1;
case icount of
1: MyNotifyStruct.hIcon:=LoadIcon(hinstance,'ARROWA');
2: MyNotifyStruct.hIcon:=LoadIcon(hinstance,'ARROWB');
3: MyNotifyStruct.hIcon:=LoadIcon(hinstance,'ARROWC');
4: MyNotifyStruct.hIcon:=LoadIcon(hinstance,'ARROWD');
end;
Shell_NotifyIcon(NIM_MODIFY,@MyNotifyStruct);
timer1.enabled:=true;
end;
procedure TfMain.maxClick(Sender: TObject);
begin
showwindow(application.handle,SW_Maximize);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -