1. Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту будут также заблокированы.

FAQ FAQ по Inno Setup

Тема в разделе "Inno Setup", создана пользователем Shegorat, 16 июн 2011.

Метки:
  1. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    971
    Симпатии:
    667
    В: Как вывести ComboBox с дисками?
    О: Так (спасибо El Sanchez)
    Код (Inno):
    [Setup]
    AppName=Example
    AppVerName=Example 1.0
    DefaultDirName={pf}\Example
    OutputDir=.

    [Code]
    #define A = (Defined UNICODE) ? "W" : "A"
    const
        DRIVE_NO_ROOT_DIR = 1;
        DRIVE_FIXED = 3;

    var
        cbDrive: TComboBox;

    function GetLogicalDrives: DWORD; external 'GetLogicalDrives@kernel32.dll stdcall';
    function GetDriveType(lpRootPathName: string): UINT; external 'GetDriveType{#A}@kernel32.dll stdcall';

    procedure cbDriveOnClick(Sender: TObject);
    var
        DirValue: string;
    begin
        DirValue := WizardDirValue;
        StringChangeEx(DirValue, AddBackslash(ExtractFileDrive(DirValue)), cbDrive.Items[cbDrive.ItemIndex], True);
        WizardForm.DirEdit.Text := DirValue;
    end;

    procedure DirEditOnChange(Sender: TObject);
    var
        i: Integer;
    begin
        for i := 0 to cbDrive.Items.Count - 1 do
        begin
            if CompareText(cbDrive.Items[i], AddBackslash(ExtractFileDrive(WizardDirValue))) = 0 then
            begin
                cbDrive.ItemIndex := i;
                Break;
            end;
        end;
    end;

    procedure FillCombo;
    var
        dwDrives: DWORD;
        uDriveType: UINT;
        szDriveLetter: string;
        i: Integer;
    begin
        dwDrives := GetLogicalDrives;
        for i := 2 to 25 do if dwDrives and (1 shl i) <> 0 then
        begin
            szDriveLetter := Chr(Ord('A') + i) + ':\';
            uDriveType := GetDriveType(szDriveLetter);
            case uDriveType of
                DRIVE_FIXED:
                    begin
                        cbDrive.Items.Add(szDriveLetter);
                        if CompareText(cbDrive.Items[cbDrive.Items.Count - 1], AddBackslash(ExtractFileDrive(WizardDirValue))) = 0 then
                            cbDrive.ItemIndex := cbDrive.Items.Count - 1;
                    end;
                DRIVE_NO_ROOT_DIR: Continue;
            end;
        end;
    end;

    procedure InitializeWizard;
    begin
        WizardForm.DirEdit.OnChange := @DirEditOnChange;
        cbDrive := TComboBox.Create(WizardForm.SelectDirPage);
        with cbDrive do
        begin
            Parent := WizardForm.DirEdit.Parent;
            Top := WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(5);
            Width := 40;
            Style := csDropDownList;
            OnClick := @cbDriveOnClick;
            FillCombo;
        end;
    end;
     
    Последнее редактирование: 11 фев 2018
    Nemko и YURSHAT нравится это.

Поделиться этой страницей