iTASmania_IncЦитата: можно на инсталлятор наложить Always on top, чтоб только сообщения не перекрывались инсталлом
-- приемлемого способа я не знаю. Через хуки можно, через внешний таймер и FindWindowEx. Но это все слишком трудоемко. Частично можно решить [more=таким]
Код: [Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
[Code]
Const
HWND_TOP = 0;
HWND_TOPMOST = -1;
HWND_NOTOPMOST = -2;
SWP_NOSIZE = $1;
SWP_NOMOVE = $2;
SWP_NOZORDER = $4;
SWP_NOREDRAW = $8;
SWP_NOACTIVATE = $10;
SWP_FRAMECHANGED = $20;
SWP_SHOWWINDOW = $40;
SWP_HIDEWINDOW = $80;
SWP_NOCOPYBITS = $100;
SWP_NOOWNERZORDER = $200;
SWP_DRAWFRAME = SWP_FRAMECHANGED;
SWP_NOREPOSITION = SWP_NOOWNERZORDER;
function SetWindowPos(hWnd, hWndInsertAfter,
X, Y, cx, cy, wFlags: Longint):Boolean;
external 'SetWindowPos@user32.dll stdcall';
procedure DirOnClick(Sender: TObject);
var
res: Boolean;
UserSelectDir: String;
begin
UserSelectDir:= WizardForm.DirEdit.Text;
res:= BrowseForFolder('Выберите папку из списка и нажмите «ОК»', UserSelectDir, True);
if res then
begin
WizardForm.DirEdit.Text:= UserSelectDir;
end;
end;
procedure InitializeWizard;
begin
WizardForm.DirBrowseButton.OnClick:= @DirOnClick;
SetWindowPos(WizardForm.Handle, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOSIZE or SWP_NOMOVE or SWP_SHOWWINDOW);
end;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
SetWindowPos(WizardForm.Handle, HWND_NOTOPMOST, 0, 0, 0, 0,
SWP_NOSIZE or SWP_NOMOVE or SWP_SHOWWINDOW);
Confirm:= False;
Cancel:= ExitSetupMsgBox;
if Not Cancel then
SetWindowPos(WizardForm.Handle, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOSIZE or SWP_NOMOVE or SWP_SHOWWINDOW);
end;