unit Unit1;
interface
uses
Windows, Messages, Forms, ShellAPI, Menus, Classes;
type
TForm1 =
class(TForm)
PopupMenu1: TPopupMenu;
Item11: TMenuItem;
Item21: TMenuItem;
Item31: TMenuItem;
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
// für MessageID von RegisterWindowsMessage
TaskBarNewReg : DWORD;
IconData: TNotifyIconData;
public
{ Public-Deklarationen }
procedure WndProc(
var Msg: TMessage);
override;
procedure WMSysCommand(
var Message: TWMSysCommand);
message WM_SYSCOMMAND;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
////////////////////////////////////////////////////////////////////////////////
// auf Mausklicks reagieren, Fensterprozedur erweitern
procedure TForm1.WndProc(
var Msg: TMessage);
var
Point: TPoint;
begin
// WM_USER + 20 ist unsere TNA Icon Nachricht
if Msg.Msg = WM_USER + 20
then
begin
// im lParam steht die Nachricht
case Msg.lParam
of
// rechte Taste für Menü
WM_RBUTTONDOWN:
begin
SetForegroundWindow(
Handle);
GetCursorPos(Point);
PopUpMenu1.PopUp(Point.X, Point.Y);
end;
// linke Taste
WM_LBUTTONDOWN:
begin
//ShowMessage('links runter');
end;
// Doppelklick
WM_LBUTTONDBLCLK:
begin
// Fenster anzeigen
Form1.Show;
// Icon entfernen
Shell_NotifyIcon(NIM_DELETE, @IconData);
end;
end;
end
// Taskbar wurde im System registriert, Icon einfügen
else if Msg.Msg = TaskBarNewReg
then
begin
Shell_NotifyIcon(NIM_ADD, @IconData);
end;
inherited;
end;
////////////////////////////////////////////////////////////////////////////////
// beim Minimieren Fomr verstecken und Icon in die TNA
procedure TForm1.WMSysCommand(
var Message: TWMSysCommand);
begin
// Fenster wurde minimiert
if Message.CmdType
and $FFF0 = SC_MINIMIZE
then
begin
Hide;
// Icon in der TNA anzeigen
Shell_NotifyIcon(NIM_ADD, @IconData);
end
else
inherited;
end;
////////////////////////////////////////////////////////////////////////////////
// Beim beenden Icon entfernen
procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @IconData);
end;
////////////////////////////////////////////////////////////////////////////////
// Beim Erstellen des Formulares TNotifyIconData-Struktur initialisieren
procedure TForm1.FormCreate(Sender: TObject);
begin
// Message ID für Message merken, die gesendet wird, wenn die Taskbar im
// System registriert wird.
TaskBarNewReg := RegisterWindowMessage('
TaskbarCreated');
// IconData Struktur füllen
IconData.cbSize := SizeOf(IconData);
IconData.Wnd :=
Handle;
IconData.uID := 100;
IconData.uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
IconData.uCallBackMessage := WM_USER + 20;
IconData.hIcon := Application.Icon.Handle;
IconData.szTip := '
Dies ist ein TNA-Icon';
// Icon einfügen. Bei Bedarf sofort
//Shell_NotifyIcon(NIM_ADD, @IconData);
end;
end.