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

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 5]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 5]

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

Ветеран


Contributor


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


Конфигурация

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


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]
Скрипты Inno Setup. Помощь и советы [часть 4]

Отправлено: 03:49, 21-05-2012

 

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

Ветеран


Contributor


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

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


Цитата Johny777:
Судя по исходному коду инно там используется функция ShellAPI:
function SHGetFileInfo(pszPath: PAnsiChar; dwFileAttributes: DWORD; var psfi: _SHFILEINFO; cbFileInfo, uFlags: UINT): DWORD; external 'SHGetFileInfo{#A}@shell32.dll stdcall'; »
Johny777, хорошая функция, пригодится.

Цитата Johny777:
получился такой код, но иконки не отобржаются (не пойму что не так сделал) »
Johny777, функция SHGetFileInfo с флагом SHGFI_SYSICONINDEX не возвращала хэндл иконки, плюс ошибка в строке ico.Handle := ReadyArray[0].DriveIcon.hIcon;. Предлагаю так:
читать дальше »

Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
;BitmapResource=Drive:img_small.bmp

[code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
    DRIVE_NO_ROOT_DIR = 1;
    DRIVE_REMOVABLE = 2;
    DRIVE_FIXED = 3;
    MAX_PATH = 260;
    SHGFI_ICON = $100;
    SHGFI_SMALLICON = $1;
    SHGFI_DISPLAYNAME = $200;
    SHGFI_TYPENAME = $400;

type
    _SHFILEINFO = record
        hIcon: HICON;
        iIcon: Integer;
        dwAttributes: DWORD;
        szDisplayName: array [0..MAX_PATH-1] of Char;
        szTypeName: array [0..79] of Char;
    end;

    _ULARGE_INTEGER = record
        LowPart: DWORD;
        HighPart: DWORD;
    end;

    DriveInfo = record
        DriveName: String;
        DriveFileSystemName: String;
        DriveSize: Extended;
        DriveFreeSize: array [0..1] of Extended;
        DriveType: String;
        DriveIcon: _SHFILEINFO;
    end;


function SHGetFileInfo(pszPath: String; dwFileAttributes: DWORD; var psfi: _SHFILEINFO; cbFileInfo, uFlags: UINT): DWORD; external 'SHGetFileInfo{#A}@shell32.dll stdcall';
function StrFormatByteSize64(qdw: Currency; var pszBuf: Char; cchBuf: UINT): PAnsiChar; external 'StrFormatByteSize64A@shlwapi.dll stdcall';
function GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer: String; nVolumeNameSize, lpVolumeSerialNumber: DWORD; var lpMaximumComponentLength, lpFileSystemFlags: DWORD; lpFileSystemNameBuffer: String; nFileSystemNameSize: DWORD): BOOL; external 'GetVolumeInformation{#A}@kernel32.dll stdcall';
function GetDriveType(lpRootPathName: String): UINT; external 'GetDriveType{#A}@kernel32.dll stdcall';
function GetDiskFreeSpaceEx(lpDirectoryName: String; var lpFreeBytesAvailableToCaller, lpTotalNumberOfBytes, lpTotalNumberOfFreeBytes: _ULARGE_INTEGER): BOOL; external 'GetDiskFreeSpaceEx{#A}@kernel32.dll stdcall';


function BytesToSize(Bytes: Extended): String;
var
    pszBuf: array [0..15] of Char;
begin
    try
        Result := StrFormatByteSize64(Abs(Bytes div 1E4), pszBuf[0], SizeOf(pszBuf));
    except end;
end;

function CharArrayToString(cArray: array of Char): String;
begin
    Result := '';
    while cArray[Length(Result)] <> #0 do Insert(cArray[Length(Result)], Result, Length(Result)+1);
end;

function Size64(QuadPart: _ULARGE_INTEGER): Extended;
begin
    Result := $7FFFFFFF;
    Result := ((QuadPart.HighPart + integer(QuadPart.LowPart < 0))*Result + QuadPart.HighPart + integer(QuadPart.LowPart < 0))*2 + QuadPart.LowPart;
end;


procedure GetDrivesInfo(var DriveArray: array of DriveInfo);
var
    i, e: Integer;
    iIcon: WORD;
    UndefDriveLetter: String;
    DriveType: UINT;
    DrivePath: String;
    VolumeName, FileSystemName: String;
    ComponentLength, SerialNumber, FileSystemFlags: DWORD;
    FreeBytesAvailableToCaller, TotalNumberOfBytes, TotalNumberOfFreeBytes: _ULARGE_INTEGER;
begin
    for i := 67 to 90 do // Loop from C..Z to determine available drives
    begin
        UndefDriveLetter := Chr(i) + ':\';
        DriveType := GetDriveType(UndefDriveLetter);
        case DriveType of
            DRIVE_REMOVABLE, DRIVE_FIXED: begin
                VolumeName := StringOfChar(#32, MAX_PATH);
                FileSystemName := StringOfChar(#32, MAX_PATH);
                GetVolumeInformation(UndefDriveLetter, VolumeName, MAX_PATH, SerialNumber, ComponentLength, FileSystemFlags, FileSystemName, MAX_PATH);
                GetDiskFreeSpaceEx(UndefDriveLetter, FreeBytesAvailableToCaller, TotalNumberOfBytes, TotalNumberOfFreeBytes);
                SetArrayLength(DriveArray, GetArrayLength(DriveArray)+1);
                e := GetArrayLength(DriveArray)-1;
                SHGetFileInfo(UndefDriveLetter, FILE_ATTRIBUTE_DIRECTORY, DriveArray[e].DriveIcon, sizeof(DriveArray[e].DriveIcon), SHGFI_ICON or SHGFI_SMALLICON or SHGFI_TYPENAME or SHGFI_DISPLAYNAME);
                DriveArray[e].DriveName := CharArrayToString(DriveArray[e].DriveIcon.szDisplayName);
                DriveArray[e].DriveFileSystemName := FileSystemName;
                DriveArray[e].DriveSize := Size64(TotalNumberOfBytes);
                DriveArray[e].DriveFreeSize[0] := Size64(TotalNumberOfFreeBytes);
                if DriveArray[e].DriveSize > 0 then DriveArray[e].DriveFreeSize[1] := DriveArray[e].DriveFreeSize[0]*100/DriveArray[e].DriveSize;
                DriveArray[e].DriveType := CharArrayToString(DriveArray[e].DriveIcon.szTypeName);
            end;
            DRIVE_NO_ROOT_DIR: Continue;
        end;
    end;
end;


procedure DriveListViewOnClick(Sender: TObject);
begin
    if Assigned(TListView(Sender).Selected) then
        WizardForm.DirEdit.Text := AddBackSlash(Copy(TListView(Sender).Selected.Caption, Pos('(', TListView(Sender).Selected.Caption)+1, 2)) + Copy(WizardForm.DirEdit.Text, 4, Length(WizardForm.DirEdit.Text));
end;

procedure DriveListViewColumnClick(Sender: TObject; Column: TListColumn);
begin
    TListView(Sender).Tag := Column.Index;
    with TListView(Sender) do
    begin
        if DesignInfo = 0 then DesignInfo := 1 else DesignInfo := -DesignInfo;
        AlphaSort;
    end;
end;

procedure DriveListViewOnCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
begin
    with TListView(Sender) do
    begin
        if Tag = 0 then
            Compare := DesignInfo*CompareText(Item1.Caption, Item2.Caption)
        else
            Compare := DesignInfo*CompareText(Item1.SubItems[Tag-1], Item2.SubItems[Tag-1]);
    end;
end;

procedure InitializeWizard;
var
    ReadyArray: array of DriveInfo;
    DriveListView: TListView;
    NewColumn: TListColumn;
    ListItem: TListItem;
    ImgList: TImageList;
    i, e: Integer;
    ico: TIcon;
begin
    WizardForm.OuterNotebook.Hide;
    WizardForm.Width := ScaleX(700);
    WizardForm.Bevel.Hide;
    WizardForm.DirEdit.Parent := WizardForm;
    WizardForm.DirEdit.SetBounds(ScaleX(27), ScaleY(27), WizardForm.Width-ScaleX(71), ScaleY(21));

    GetDrivesInfo(ReadyArray);
    e := GetArrayLength(ReadyArray)-1;

    DriveListView := TListView.Create(nil);
    with DriveListView do
    begin
        Parent := WizardForm;
        ViewStyle := vsReport;
        ReadOnly := True;

        SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + ScaleY(40), WizardForm.DirEdit.Width, ScaleY(200));
        OnClick := @DriveListViewOnClick;
        OnColumnClick := @DriveListViewColumnClick;
        OnCompare := @DriveListViewOnCompare;

        ImgList := TImageList.Create(DriveListView);
        ImgList.BkColor := Color;
        for i := 0 to e do
        begin
            ico := TIcon.Create;
            ico.Handle := ReadyArray[i].DriveIcon.hIcon;
            ImgList.AddIcon(ico);
            ico.Free;
        end;
        SmallImages := ImgList;

        NewColumn := Columns.Add;
        NewColumn.Caption := 'Имя';
        NewColumn.Width := ScaleX(130);

        NewColumn := Columns.Add;
        NewColumn.Caption := 'Файловая система';
        NewColumn.Width := ScaleX(105);

        NewColumn := Columns.Add;
        NewColumn.Caption := 'Ёмкость';
        NewColumn.Width := ScaleX(65);

        NewColumn := Columns.Add;
        NewColumn.Caption := 'Свободно';
        NewColumn.Width := ScaleX(90);

        NewColumn := Columns.Add;
        NewColumn.Caption := 'Тип';
        NewColumn.Width := ScaleX(130);

        for i := 0 to e do
        begin
            ListItem := Items.Add;
            with ListItem do
            begin
                Caption := ReadyArray[i].DriveName;
                SubItems.Add(ReadyArray[i].DriveFileSystemName);
                SubItems.Add(BytesToSize(ReadyArray[i].DriveSize));
                SubItems.Add(Format('%s (%d%%)', [BytesToSize(ReadyArray[i].DriveFreeSize[0]), Round(ReadyArray[i].DriveFreeSize[1])]));
                SubItems.Add(ReadyArray[i].DriveType);
                ImageIndex := i;
            end;
        end;
    end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:53, 22-11-2012 | #1311



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


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

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


R.i.m.s.k.y.
Спасибо понял где ошибся

Отправлено: 15:31, 22-11-2012 | #1312


Аватара для pritoreanic

Новый участник


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

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


Цитата Johny777:
pritoreanic, пардон за недоработку. Исправил!

читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
russian.Desc=Описание:
russian.ComponentsDescription0=Наведите курсов мыши на компонент, что бы прочитать его описание.
russian.ComponentsDescription1=Minecraft 1.4.5
russian.ComponentsDescription2=1.
russian.ComponentsDescription3=12.
russian.ComponentsDescription4=123.
russian.ComponentsDescription5=1234.
russian.ComponentsDescription6=12345.
russian.ComponentsDescription7=123456.
russian.ComponentsDescription8=1234567.
russian.ComponentsDescription9=12345678.
russian.ComponentsDescription10=123456789.
russian.ComponentsDescription11=SMP-123.

[Components]
Name: main; Description: Minecraft; Flags: fixed; Types: custom compact full
Name: c\1; Description: rus; Flags: exclusive
Name: c\2; Description: eng; Flags: exclusive
Name: Component1; Description: kom;
Name: c\1; Description: AudioMod; Flags: fixed; Types: custom compact full
Name: c\2; Description: ModLoader; Flags: fixed; Types: custom compact full
Name: c\3; Description: Optifine;
Name: c\4; Description: TooManyItem;
Name: c\5; Description: Rei's Minimap;
Name: Component2; Description: s;
Name: c\1; Description: SMP-s;

[Files]
Source: "C:\InstallFiles\main\Minecraft.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: C:\InstallFiles\main\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Components: main
Source: C:\InstallFiles\comp1\*; DestDir: {app}; Flags: ignoreversion; Components: Component1
Source: C:\InstallFiles\comp2\*; DestDir: {app}; Flags: ignoreversion; Components: Component2

[.code]
var
  DescRTV: TRichEditViewer;

procedure ComponentsListOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
begin
  DescRTV.Text := CustomMessage('ComponentsDescription' + IntToStr(Index+1));
end;

procedure InitializeWizard;
begin
  with WizardForm do
  begin
    ComponentsList.SetBounds(ScaleX(0), SelectComponentsLabel.Top + SelectComponentsLabel.Height + ScaleY(5), (SelectComponentsPage.Width - ScaleX(5)) div 2, ScaleY(165));
    ComponentsList.OnItemMouseMove := @ComponentsListOnItemMouseMove;
    TypesCombo.Hide;
  

    DescRTV := TRichEditViewer.Create(nil)
    with DescRTV do
    begin
      Parent := SelectComponentsPage;
      SetBounds(ComponentsList.Left + ComponentsList.Width + ScaleX(5), ComponentsList.Top, ComponentsList.Width, ComponentsList.Height);
      ReadOnly := True;
      ScrollBars := ssVertical;
      Color := clBtnFace;
      RTFText := CustomMessage('ComponentsDescription0');
    end;
  end;
end;
Спасибо тебе за помощь.
Есть еще проблема с появлением сообщения на скриншоте.
Еще когда наводишь на все компоненты кроме SMP-s сообщение "russian.ComponentsDescription0=Наведите курсов мыши на компонент, что бы прочитать его описание." не показывает.


Последний раз редактировалось pritoreanic, 23-11-2012 в 04:01.


Отправлено: 03:22, 23-11-2012 | #1313


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Цитата pritoreanic:
Есть еще проблема с появлением сообщения на скриншоте. »
Используй флаг disablenouninstallwarning в секции [Components]

По второму вопросу, не знаю поможет или нет, я бы в конце процедуры ComponentsListOnItemMouseMove добавил WizardForm.ComponentsList.Repaint.

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:32, 23-11-2012 | #1314


Новый участник


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

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


R.i.m.s.k.y.,
Цитата R.i.m.s.k.y.:
проще пристрелить
на прошлой странице два раза ответили »
Ну вообще то, меня интересовало как сделать такой выбор чекбоксами, т.е. если выбрать один чекбокс выбор с другого снимается, а не флагом exclusive, но все равно спасибо.

Отправлено: 11:49, 23-11-2012 | #1315


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Цитата JHeavy:
Ну вообще то, меня интересовало как сделать такой выбор чекбоксами, а не флагом exclusive, но все равно спасибо »
убрать флаг exclusive, или задача сложнее описываемой?

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 11:51, 23-11-2012 | #1316


Новый участник


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

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


Да я просто не правильно объясняю похоже, если есть группа чекбоксов, как правило можно выбрать несколько, а мне нужно чтобы при выборе одного снималась галка с другого

Отправлено: 11:54, 23-11-2012 | #1317


Аватара для pritoreanic

Новый участник


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

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


R.i.m.s.k.y. спасибо с первой проблемой помог.

У меня тут проблема, сообщение "russian.ComponentsDescription0=Наведите курсов мыши на компонент, что бы прочитать его описание." не появляется если выводить мышку в стороны красных стрелок и появляется где зеленая стрелка, как сделать что бы это сообщение появлялось в любом случае ?

Отправлено: 13:50, 23-11-2012 | #1318


Аватара для R.i.m.s.k.y.

Ветеран


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

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


pritoreanic, хз

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 13:55, 23-11-2012 | #1319


Аватара для Mailchik

Пользователь


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

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


pritoreanic,
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
russian.Desc=Описание:
russian.ComponentsDescription0=Наведите курсов мыши на компонент, что бы прочитать его описание.
russian.ComponentsDescription1=Minecraft 1.4.5
russian.ComponentsDescription2=1.
russian.ComponentsDescription3=12.
russian.ComponentsDescription4=123.
russian.ComponentsDescription5=1234.
russian.ComponentsDescription6=12345.
russian.ComponentsDescription7=123456.
russian.ComponentsDescription8=1234567.
russian.ComponentsDescription9=12345678.
russian.ComponentsDescription10=123456789.
russian.ComponentsDescription11=SMP-123.

[Components]
Name: main; Description: Minecraft; Flags: fixed; Types: custom compact full
Name: c\1; Description: rus; Flags: exclusive
Name: c\2; Description: eng; Flags: exclusive
Name: Component1; Description: kom;
Name: c\1; Description: AudioMod; Flags: fixed; Types: custom compact full
Name: c\2; Description: ModLoader; Flags: fixed; Types: custom compact full
Name: c\3; Description: Optifine;
Name: c\4; Description: TooManyItem;
Name: c\5; Description: Rei's Minimap;
Name: Component2; Description: s;
Name: c\1; Description: SMP-s;

[Files]
Source: "C:\InstallFiles\main\Minecraft.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: C:\InstallFiles\main\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Components: main
Source: C:\InstallFiles\comp1\*; DestDir: {app}; Flags: ignoreversion; Components: Component1
Source: C:\InstallFiles\comp2\*; DestDir: {app}; Flags: ignoreversion; Components: Component2

[code]
var
  DescRTV: TRichEditViewer;

procedure ComponentsListOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
begin
  DescRTV.Text := CustomMessage('ComponentsDescription' + IntToStr(Index+1));
end;

procedure ComponentsListOnMouseLeave(Sender: TObject);
 begin
  DescRTV.Text := CustomMessage('ComponentsDescription0');
end;

procedure InitializeWizard;
begin
  with WizardForm do
  begin
    ComponentsList.SetBounds(ScaleX(0), SelectComponentsLabel.Top + SelectComponentsLabel.Height + ScaleY(5), (SelectComponentsPage.Width - ScaleX(5)) div 2, ScaleY(165));
    ComponentsList.OnItemMouseMove := @ComponentsListOnItemMouseMove;
    ComponentsList.OnMouseLeave := @ComponentsListOnMouseLeave;
    TypesCombo.Hide;


    DescRTV := TRichEditViewer.Create(nil)
    with DescRTV do
    begin
      Parent := SelectComponentsPage;
      SetBounds(ComponentsList.Left + ComponentsList.Width + ScaleX(5), ComponentsList.Top, ComponentsList.Width, ComponentsList.Height);
      ReadOnly := True;
      ScrollBars := ssVertical;
      Color := clBtnFace;
      RTFText := CustomMessage('ComponentsDescription0');
    end;
  end;
end;

JHeavy,
читать дальше »
Код: Выделить весь код
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: Test; Description: Test1; Types: Full;
Name: Test2; Description: Test22;

[Code]
procedure CompOnClick(Sender: TObject);
begin
  with WizardForm.ComponentsList do begin
   case ItemIndex of
    0 : Checked[1] := False;
    1 : Checked[0] := False;
   end;
  end;
end;

procedure InitializeWizard();
begin
  with WizardForm.ComponentsList do begin
    OnClickCheck:= @CompOnClick;
    CompOnClick(nil);
  end;
end;

Последний раз редактировалось Mailchik, 23-11-2012 в 16:23.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:45, 23-11-2012 | #1320



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 5]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход