[Setup] AppName=My Program AppVerName=My Program v 1.5 DefaultDirName={pf}\My Program OutputDir=. [Languages] Name: ru; MessagesFile: "compiler:Languages\Russian.isl" [code] #define A = (Defined UNICODE) ? "W" : "A" const GWL_WNDPROC = -4; WM_DESTROY = $0002; WM_SYSCOMMAND = $0112; function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint; external 'CallWindowProc{#A}@user32.dll stdcall delayload'; function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall delayload'; procedure AboutSetupClick; begin //здесь обрабатываем нажатие на пункт меню "О программе ..." MsgBox('bla-bla-bla', mbInformation, MB_OK); end; function FProc(h:HWND;Msg,wParam,lParam:Longint):Longint; begin if (Msg = WM_SYSCOMMAND) and (wParam = 9999) then begin Result := 0; AboutSetupClick; end else begin if (Msg = WM_DESTROY) then SetWindowLong(WizardForm.Handle,GWL_WNDPROC,OldProc); Result:=CallWindowProc(OldProc,h,Msg,wParam,lParam); end; end; procedure InitializeWizard(); begin OldProc:=SetWindowLong(WizardForm.Handle, GWL_WNDPROC, CallbackAddr('FProc')); end; procedure DeinitializeSetup(); begin SetWindowLong(WizardForm.Handle, GWL_WNDPROC, OldProc); end; |