program CreateWindow;
{$R CreateWindow.res}
uses
ShellAPI,
Windows, Messages;
var
AWndClass: WNDCLASS;
AWnd: HWND;
AMsg: TMsg;
ANotifyIconData: TNotifyIconData;
AMenu: HMENU;
curpos: TPoint;
function WindowProc(AWnd: HWND; Msg: Integer; wParam: WPARAM; lParam: LPARAM): Longint; stdcall;
begin
case Msg of
WM_CREATE: begin
ZeroMemory(@ANotifyIconData, SizeOf(ANotifyIconData));
ANotifyIconData.cbSize:=SizeOf(ANotifyIconData);
ANotifyIconData.Wnd:=AWnd;
ANotifyIconData.uFlags:=NIF_ICON or NIF_TIP or NIF_MESSAGE;
ANotifyIconData.uCallbackMessage:=WM_USER+$1001;
ANotifyIconData.hIcon:=AWndClass.hIcon;
ANotifyIconData.szTip:='Medvedev O.V.'#13#10'Severodvinsk, 2010';
Shell_NotifyIcon(NIM_ADD, @ANotifyIconData);
AMenu:=CreatePopupMenu;
AppendMenu(AMenu, MF_STRING, 1, 'Exit');
AppendMenu(AMenu, MF_STRING, 2, 'About');
Result:=0;
end;
WM_DESTROY: begin
DestroyMenu(AMenu);
Shell_NotifyIcon(NIM_DELETE, @ANotifyIconData);
Result:=0;
end;
WM_CLOSE: begin
PostQuitMessage(0);
Result:=0;
end;
WM_COMMAND: begin
if HIWORD(wParam)=0 then
begin
if (LOWORD(wParam)=1) then PostQuitMessage(0)
else if (LOWORD(wParam)=2) then MessageBox(0, PChar('Medvedev O.V.'#13#10'Severodvinsk, 2010'), 'About', MB_OK or MB_SYSTEMMODAL);
end;
Result:=0;
end;
WM_USER+$1001: begin
case lParam of
WM_LBUTTONDOWN, WM_RBUTTONDOWN: begin
GetCursorPos(curpos);
TrackPopupMenu(AMenu, 0, curpos.X, curpos.Y, 0, AWnd, nil);
end;
end;
Result:=0;
end;
else Result:=DefWindowProc(AWnd, Msg, wParam, lParam);
end
end;
begin
AWndClass.Style:=0;
AWndClass.lpfnWndProc:=@WindowProc;
AWndClass.cbClsExtra:=0;
AWndClass.cbWndExtra:=0;
AWndClass.hInstance:=HInstance;
AWndClass.hIcon:=LoadIcon(HInstance, 'APPICON');
AWndClass.hCursor:=LoadCursor(0, IDC_ARROW);
AWndClass.hbrBackground:=HBRUSH(COLOR_WINDOW);
AWndClass.lpszMenuName:=nil;
AWndClass.lpszClassName:='TWINAPIFORM';
RegisterClass(AWndClass);
AWnd:=CreateWindowEx(
WS_EX_TOOLWINDOW,
AWndClass.lpszClassName,
AWndClass.lpszClassName,
WS_POPUP,
0, 0, 0, 0, 0, 0,
HInstance,
nil);
while GetMessage(AMsg, 0, 0, 0) do
begin
TranslateMessage(AMsg);
DispatchMessage(AMsg);
end;
DestroyWindow(AWnd);
UnregisterClass(AWndClass.lpszClassName, HInstance);
ExitProcess(0);
end.