Цитата Johny777:
Добрые люди скажите пожалуйста как добавить разделитель во сплывающее меню? »
|
Johny777, смотри реализацию в Example_Menu_StatusBar.iss
Цитата Johny777:
странное мигание скроллбокса (в частности картинок и ричэдитов) на второй странице »
|
Johny777, если инсталлятор запускать прямо из IDE по F9, то мерцание обеспечено, т.к. IDE запускает сетап в режиме отладки. Этот медленный процесс в совокупности с медленной операцией рисования и вызывает мерцание. При запуске двойным кликом мерцания я не заметил, скроллил как мог.
Цитата Johny777:
есть код для выкатывающейся панели через таймер, но с его использованием вылетают непонятные и жуткие ошибки »
|
Johny777, глюков не увидел. Но ставить такой низкий интервал таймеру не рекомендую - минимум 10 мс, и таймеров многовато - достаточно одного. А можно и без таймеров:
читать дальше »
Код:
![Выделить весь код](images/misc/selectcode.png)
[code]
const
GWL_EXSTYLE = (-20);
WS_EX_COMPOSITED = $2000000;
AW_HIDE = $10000;
AW_VER_POSITIVE = $4;
AW_VER_NEGATIVE = $8;
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';
function AnimateWindow(hwnd: HWND; dwTime, dwFlags: DWORD): BOOL; external 'AnimateWindow@user32.dll stdcall';
var
SettingPanel: TPanel;
procedure NewButton1Click(Sender: TObject);
begin
with SettingPanel do
begin
//временно отрубаем стиль WS_EX_COMPOSITED, а то AnimateWindow плавненько не отработает
SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) xor WS_EX_COMPOSITED);
AnimateWindow(Handle, 1000, (AW_VER_POSITIVE * dword(not Visible)) or ((AW_HIDE or AW_VER_NEGATIVE) * dword(Visible)));
SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_COMPOSITED);
Visible := not Visible;
end;
end;
procedure InitializeWizard();
begin
SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_COMPOSITED);
SettingPanel := TPanel.Create(WizardForm);
with SettingPanel do
begin
Parent := WizardForm;
SetBounds(ScaleX(0), ScaleY(0), WizardForm.ClientWidth, WizardForm.OuterNotebook.ClientHeight);
Visible := False;
end;
with TNewButton.Create(WizardForm) do
begin
Parent := WizardForm;
SetBounds(ScaleX(40), ScaleY(327), ScaleX(75), ScaleY(25));
Caption := 'open';
OnClick := @NewButton1Click;
end;
end;
Цитата Johny777:
другой пример использвания таймера привел к тому что он (таймер) не работал (то была проверки на странице выбора директории установки)
речь идёт об этом незамысловатом примере: »
|
Johny777, такую проверку нужно делать в обработчике OnChange компонента WizardForm.DirEdit:
читать дальше »
Код:
![Выделить весь код](images/misc/selectcode.png)
[code]
procedure DirEditOnChange(Sender: TObject);
begin
WizardForm.NextButton.Enabled := TEdit(Sender).Text <> '123';
end;
procedure InitializeWizard();
begin
WizardForm.DirEdit.OnChange := @DirEditOnChange;
end;