Cześć! Wiem Wiem, jest sezon ogórkowy, ale ja coś tam sobie drapie i
natknąłem się na pewne trudności liczę na waszą pomoc.
Programik jest w WinAPI. Do SysMenu dodaje 2 nowe pozycje
aby je teraz obsłużyć muszę przechwytywać je w sekcji
WM_SYSCOMMAND: a to blokuje wszystkie standardowe zdarzenia w sysmenu
i muszę je sam obsłużyć. Wiem jak obsłużyć SC_CLOSE czyli
zamknięcie okna, ale nie wiem jak obsłużyć poruszanie okna za pomocą
myszki, co powinno odbywać się w sekcji WM_WINDOWPOSCHANGING:
Jeśli ktoś wie jak rozwiązać ten problem, niech napisze.
program TimeINFO;
uses
Windows,
Messages;
const
AppName : PChar = 'TimeINFO';
idWassup = 100;
idZmieniacz = 101;
function WindProc(Wnd: HWND; uMsg: UINT; wPar: WPARAM; lPar: LPARAM): LRESULT; stdcall;
begin
Result := 0;
case uMsg of
WM_CREATE:
begin
AppendMenu (GetSystemMenu (Wnd, FALSE),
MF_SEPARATOR, 0, '');
AppendMenu (GetSystemMenu (Wnd, FALSE),
MF_STRING, idWassup, 'Wassup');
AppendMenu (GetSystemMenu (Wnd, FALSE),
MF_STRING, idZmieniacz,'Zmieniacz tapet...');
end;
WM_SYSCOMMAND: // przez ten komunikat nie moge poruszac oknem
case wPar of
idWassup: MessageBox(Wnd,'TimeINFO','TimeInfo click na Wassup',0);
SC_CLOSE: PostQuitMessage(0);
end;
WM_WINDOWPOSCHANGING:
begin
// jak obsłużyć poruszanie okna za pomocą myszki ?
end;
WM_DESTROY:
begin
PostQuitMessage(0);
end;
else Result := DefWindowProc(Wnd, uMsg, wPar, lPar);
end;
end;
var
Wnd: TWndClass;
Msg: TMsg;
begin
Wnd.lpfnWndProc := @WindProc;
Wnd.hInstance := hInstance;
Wnd.lpszClassName := AppName;
Wnd.hbrBackground := COLOR_WINDOW;
windows.RegisterClass(Wnd);
CreateWindowEX(WS_EX_TOOLWINDOW or WS_EX_TOPMOST,AppName, ' 00:00:00',
ws_Overlapped+WS_SYSMENU+WS_VISIBLE,
2*(GetSystemMetrics(SM_CXSCREEN) div 3), 0, 126, 24,
0, 0, hInstance, nil);
while GetMessage(msg, 0, 0, 0) do DispatchMessage(msg);
end.