Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024

Профиль | Отправить PM | Цитировать


Цитата Johny777:
Добрые люди скажите пожалуйста как добавить разделитель во сплывающее меню? »
Johny777, смотри реализацию в Example_Menu_StatusBar.iss

Цитата Johny777:
странное мигание скроллбокса (в частности картинок и ричэдитов) на второй странице »
Johny777, если инсталлятор запускать прямо из IDE по F9, то мерцание обеспечено, т.к. IDE запускает сетап в режиме отладки. Этот медленный процесс в совокупности с медленной операцией рисования и вызывает мерцание. При запуске двойным кликом мерцания я не заметил, скроллил как мог.

Цитата Johny777:
есть код для выкатывающейся панели через таймер, но с его использованием вылетают непонятные и жуткие ошибки »
Johny777, глюков не увидел. Но ставить такой низкий интервал таймеру не рекомендую - минимум 10 мс, и таймеров многовато - достаточно одного. А можно и без таймеров:
читать дальше »

Код: Выделить весь код
[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:
читать дальше »

Код: Выделить весь код
[code]
procedure DirEditOnChange(Sender: TObject);
begin
    WizardForm.NextButton.Enabled := TEdit(Sender).Text <> '123';
end;

procedure InitializeWizard();
begin
    WizardForm.DirEdit.OnChange := @DirEditOnChange;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:51, 23-04-2012 | #1629