📄 ctmain.pas
字号:
unit CtMain;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls,
ExtCtrls, Menus, ImgList, CoolTrayIcon;
type
TMainForm = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
PopupMenu1: TPopupMenu;
ShowWindow1: TMenuItem;
HideWindow1: TMenuItem;
N1: TMenuItem;
Exit1: TMenuItem;
ImageList1: TImageList;
rdoCycle: TRadioGroup;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
GroupBox2: TGroupBox;
Label3: TLabel;
Edit1: TEdit;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
CheckBox5: TCheckBox;
CheckBox6: TCheckBox;
Label7: TLabel;
ComboBox1: TComboBox;
TrayIcon1: TCoolTrayIcon;
Edit2: TEdit;
Label4: TLabel;
ImageList2: TImageList;
ImageList3: TImageList;
ImageList4: TImageList;
ImageList5: TImageList;
ImageList6: TImageList;
Button4: TButton;
N2: TMenuItem;
BalloonHint1: TMenuItem;
GroupBox3: TGroupBox;
Label5: TLabel;
Label6: TLabel;
Button5: TButton;
Button6: TButton;
ImageList7: TImageList;
Button7: TButton;
procedure FormCreate(Sender: TObject);
procedure ShowWindow1Click(Sender: TObject);
procedure HideWindow1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure CheckBox2Click(Sender: TObject);
procedure TrayIcon1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure TrayIcon1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
procedure CheckBox3Click(Sender: TObject);
procedure CheckBox4Click(Sender: TObject);
procedure CheckBox5Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure rdoCycleClick(Sender: TObject);
procedure TrayIcon1Cycle(Sender: TObject; NextIndex: Integer);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Button4Click(Sender: TObject);
procedure TrayIcon1MouseExit(Sender: TObject);
procedure TrayIcon1MouseEnter(Sender: TObject);
procedure TrayIcon1Startup(Sender: TObject; var ShowMainForm: Boolean);
procedure TrayIcon1BalloonHintClick(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
private
// Some extra stuff necessary for the "Close to tray" option:
SessionEnding: Boolean;
procedure WMQueryEndSession(var Message: TMessage); message WM_QUERYENDSESSION;
end;
var
MainForm: TMainForm;
implementation
{$R *.DFM}
procedure TMainForm.FormCreate(Sender: TObject);
begin
Edit1Change(Self);
CheckBox1Click(Self);
CheckBox2Click(Self);
CheckBox3Click(Self);
CheckBox4Click(Self);
CheckBox5Click(Self);
rdoCycleClick(Self);
ComboBox1.ItemIndex := 0;
end;
procedure TMainForm.ShowWindow1Click(Sender: TObject);
begin
TrayIcon1.ShowMainForm; // ALWAYS use this method to restore!!!
end;
procedure TMainForm.HideWindow1Click(Sender: TObject);
begin
Application.Minimize; // Will hide dialogs and popup windows as well (this demo has none)
TrayIcon1.HideMainForm;
end;
procedure TMainForm.Exit1Click(Sender: TObject);
begin
// We kill the "Close to tray" feature to be able to exit.
if CheckBox6.Checked then
CheckBox6.Checked := False;
Close;
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
HideWindow1Click(Self);
end;
procedure TMainForm.Button2Click(Sender: TObject);
begin
TrayIcon1.IconVisible := not TrayIcon1.IconVisible;
end;
procedure TMainForm.Button6Click(Sender: TObject);
begin
if IsWindowVisible(Application.Handle) then
TrayIcon1.HideTaskbarIcon
else
TrayIcon1.ShowTaskbarIcon;
end;
procedure TMainForm.Button4Click(Sender: TObject);
begin
TrayIcon1.ShowBalloonHint('Balloon hint',
'Use the balloon hint to display important information.' + #13 +
'The text can be max. 255 chars. and the title max. 64 chars.',
bitInfo, 10);
end;
procedure TMainForm.Button5Click(Sender: TObject);
begin
TrayIcon1.HideBalloonHint;
end;
procedure TMainForm.Button7Click(Sender: TObject);
begin
TrayIcon1.SetFocus;
end;
procedure TMainForm.Edit1Change(Sender: TObject);
begin
TrayIcon1.Hint := Edit1.Text;
end;
procedure TMainForm.CheckBox1Click(Sender: TObject);
begin
TrayIcon1.ShowHint := CheckBox1.Checked;
end;
procedure TMainForm.CheckBox2Click(Sender: TObject);
begin
{ Setting the popupmenu's AutoPopup to false will prevent the menu from displaying
when you click the tray icon. You can still show the menu programmatically,
using the Popup or PopupAtCursor methods. }
if Assigned(PopupMenu1) then
PopupMenu1.AutoPopup := CheckBox2.Checked;
end;
procedure TMainForm.CheckBox3Click(Sender: TObject);
begin
TrayIcon1.LeftPopup := CheckBox3.Checked;
end;
procedure TMainForm.CheckBox4Click(Sender: TObject);
begin
TrayIcon1.Enabled := CheckBox4.Checked;
end;
procedure TMainForm.CheckBox5Click(Sender: TObject);
begin
TrayIcon1.MinimizeToTray := CheckBox5.Checked;
end;
procedure TMainForm.ComboBox1Change(Sender: TObject);
begin
TrayIcon1.Behavior := TBehavior(ComboBox1.ItemIndex);
end;
procedure TMainForm.TrayIcon1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Assigned(PopupMenu1) then
if not PopupMenu1.AutoPopup then
begin
SetForegroundWindow(Application.Handle); // Move focus from tray icon to this form
MessageDlg('The popup menu is disabled.', mtInformation, [mbOk], 0);
end;
end;
procedure TMainForm.TrayIcon1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var
Pt: TPoint;
begin
Label1.Caption := 'Mouse pos.: ' + IntToStr(X) + ',' + IntToStr(Y);
Label2.Caption := 'Key status: ';
if ssCtrl in Shift then
Label2.Caption := Label2.Caption + ' Ctrl ';
if ssAlt in Shift then
Label2.Caption := Label2.Caption + ' Alt ';
if ssShift in Shift then
Label2.Caption := Label2.Caption + ' Shift ';
// Get client coords.
Pt := TrayIcon1.GetClientIconPos(X, Y);
Label6.Caption := 'Client pos.: ' + IntToStr(Pt.X) + ',' + IntToStr(Pt.Y);
end;
procedure TMainForm.rdoCycleClick(Sender: TObject);
begin
case rdoCycle.ItemIndex of
0: begin
TrayIcon1.CycleIcons := False;
TrayIcon1.IconList := nil;
ImageList1.GetIcon(0, TrayIcon1.Icon);
Edit2.Text := IntToStr(TrayIcon1.IconIndex);
end;
1: begin
TrayIcon1.IconList := ImageList1;
TrayIcon1.CycleInterval := 400;
TrayIcon1.CycleIcons := True;
end;
2: begin
TrayIcon1.IconList := ImageList2;
TrayIcon1.CycleInterval := 400;
TrayIcon1.CycleIcons := True;
end;
3: begin
TrayIcon1.IconList := ImageList3;
TrayIcon1.CycleInterval := 300;
TrayIcon1.CycleIcons := True;
end;
4: begin
TrayIcon1.IconList := ImageList4;
TrayIcon1.CycleInterval := 100;
TrayIcon1.CycleIcons := True;
end;
5: begin
TrayIcon1.IconList := ImageList5;
TrayIcon1.CycleInterval := 400;
TrayIcon1.CycleIcons := True;
end;
6: begin
TrayIcon1.IconList := ImageList6;
TrayIcon1.CycleInterval := 100;
TrayIcon1.CycleIcons := True;
end;
7: begin
TrayIcon1.IconList := ImageList7;
TrayIcon1.CycleInterval := 150;
TrayIcon1.CycleIcons := True;
end;
end;
end;
procedure TMainForm.TrayIcon1Cycle(Sender: TObject; NextIndex: Integer);
begin
Edit2.Text := IntToStr(TrayIcon1.IconIndex);
end;
procedure TMainForm.WMQueryEndSession(var Message: TMessage);
{ This method is a hack. It intercepts the WM_QUERYENDSESSION message.
This way we can decide if we want to ignore the "Close to tray" option.
Otherwise, when selected, the option would make Windows unable to shut down. }
begin
SessionEnding := True;
Message.Result := 1;
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := ((not CheckBox6.Checked) or SessionEnding);
if not CanClose then
begin
TrayIcon1.HideMainForm;
TrayIcon1.IconVisible := True;
end;
end;
procedure TMainForm.TrayIcon1MouseEnter(Sender: TObject);
begin
Label5.Caption := 'ENTER';
end;
procedure TMainForm.TrayIcon1MouseExit(Sender: TObject);
begin
Label5.Caption := 'EXIT';
end;
procedure TMainForm.TrayIcon1Startup(Sender: TObject; var ShowMainForm: Boolean);
begin
// ShowMainForm := False;
end;
procedure TMainForm.TrayIcon1BalloonHintClick(Sender: TObject);
begin
SetForegroundWindow(Application.Handle); // Move focus from tray icon to this form
ShowMessage('POP!');
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -