самый простой способ: procedure TRun.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := false;
end;
если форма написана на вин апи то:
function WindowProc (wnd: HWND; msg: integer; wparam: WPARAM; lparam: LPARAM):LRESULT;STDCALL;
begin
case msg of
WM_Destroy:
begin
PostQuitMessage (0);
Result := 0;
Exit;
end;
WM_CLOSE :
exit;
else
Result := DefWindowProc(wnd,msg,wparam,lparam);
end;
end;
или как вариант можно хуками, только емеет свои проблемы
//hHook:cardinal;
function SysMsgProc(code:integer;Wparam:word;Lparam:longint):longint;stdcall;
begin
//f8 - 115
//alt - 18
if (GetKeyState(18)<0) and (Wparam = 115) then
begin
MessageBoxA(0,'Nezya','Nezya',0);
end else
result:=CallNextHookEx(hHook,Code,Wparam,LParam);
end;
procedure TRun.Button1Click(Sender: TObject);
begin
hHook:=SetWindowsHookEx(WH_KEYBOARD,@SysMsgProc,HInstance,0);
end;
procedure TRun.Button2Click(Sender: TObject);
begin
UnhookWindowsHookEx(hHook);
end;
кстати этот код еще и является примером вызова глобального хука без длл-ки (только если закрывать другую прогу с помощью ALT-F4 тогда хук снимается)