Inno Setup (создание инсталяционных пакетов). Часть 2

  • Автор темы Автор темы YURSHAT
  • Дата начала Дата начала
Статус
В этой теме нельзя размещать новые ответы.
Shegorat,
Что верно :)) Утром не было времени отписаться.
Стандартным способом можно это сделать или нет?
 
Обновил сборку InnoUltra, Для самого компилятора, русика пока нет ни для одной из версий. Комплект скинов обновлен - отобраны самые лучшие, благодарим товарища Devils Night
Множество пожеланий не выполнено, за что прошу прощения - сильная нехватка времени, но все ваши пожелания уже в работе.
 
В общем изначально была интересна озвучка кнопок, долго искал вариант, перебирал коды, всё приходило к тому что без текстурирования озвучка не пашет, но в конечном счёте нашёл такой вариант.

Код:
[Setup]
AppName=Test
AppVersion=1.0
DefaultDirName={pf}\Test
DefaultGroupName=Test
AllowNoIcons=yes
OutputDir=.
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
DisableReadyMemo=true
DisableProgramGroupPage=true


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

[Types]
Name: full; Description: Components; Flags: iscustom

[Components]
Name: text; Description: Test; Types: full
Name: text\rus; Description: Test comp; Flags: exclusive


[Tasks]
Name: a; Description: 2; Flags: exclusive
Name: a; Description: 2

[Files]
Source: "Click.wav"; DestDir: "{tmp}"; Flags: dontcopy
Source: "Check.wav"; DestDir: "{tmp}"; Flags: dontcopy


[ code]
function PlaySound(lpszSoundName: AnsiString; uFlags: cardinal):integer; external 'sndPlaySoundA@winmm.dll stdcall';


procedure Click (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  begin
    PlaySound(ExpandConstant('{tmp}\Click.wav'),$0001);
  end;


procedure Check (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  begin
    PlaySound(ExpandConstant('{tmp}\Check.wav'),$0001);
  end;


procedure ClickWav();
begin
if not FileExists(ExpandConstant('{tmp}\Click.wav')) then ExtractTemporaryFile('Click.wav');
if not FileExists(ExpandConstant('{tmp}\Check.wav')) then ExtractTemporaryFile('Check.wav');
end;


var
CheckBoxChecked: Boolean;
CheckBox1: TCheckBox;

procedure ClickButton();

begin
with WizardForm do begin

      with NextButton do begin
        OnMouseDown := @Click;
      end

      with BackButton do begin
        OnMouseDown := @Click;
      end
      
      with CancelButton do begin
        OnMouseDown := @Click;
      end

      with NoIconsCheck do begin
        OnMouseDown := @Check;
      end

      with DirBrowseButton do begin
        OnMouseDown := @Click;
      end

      with GroupBrowseButton do begin
        OnMouseDown := @Click;
      end

      with YesRadio do begin
        OnMouseDown := @Check;
      end

      with NoRadio do begin
        OnMouseDown := @Check;
      end

      with DirEdit do begin
        OnMouseDown := @Click;
      end

      with GroupEdit do begin
        OnMouseDown := @Click;
      end

      with TypesCombo do begin
        OnMouseDown := @Click;
      end

      with PreparingYesRadio do begin
        OnMouseDown := @Check;
      end

      with PreparingNoRadio do begin
        OnMouseDown := @Check;
      end

      with ReadyMemo do begin
        OnMouseDown := @Click;
      end

      with TypesCombo do begin
        OnMouseDown := @Click;
      end

      with WelcomeLabel1 do begin
        OnMouseDown := @Click;
      end

      with ReadyLabel do begin
        OnMouseDown := @Click;
      end

      with TasksList do begin
        OnMouseDown := @Check;
      end

      with RunList do begin
        OnMouseDown := @Check;
      end

      with LicenseAcceptedRadio do begin
        OnMouseDown := @Check;
      end

      with LicenseNotAcceptedRadio do begin
        OnMouseDown := @Check;
      end

      with ComponentsList do begin
        OnMouseDown := @Click;
      end

      with SelectComponentsPage do begin
        OnMouseDown := @Click;
      end
end;
end;

Procedure InitializeWizard();
begin
ClickButton();  
ClickWav();
end;
теперь вопрос стоит в том как правильней допилить его, чтоб там где не надо не озвучивало и работала озвучка при наведении, а то я уже что-то довольно сильно перемудрил.
Вот содержимое.

Может кому пригодится.
Вариант довольно интересный, но геморройный, папка установки и меню пуск в GroupBox.
Единственный плюс, это то что всё содержимое передвигается вместе с групбохом.

Код:
[Setup]
AppId={{B4AF0554-6E6C-46E9-8CA3-DF407492C258}
AppName=Test
AppVersion=1.0
;AppVerName=Test 1.0
AppPublisher=Моя компания, Inc.
AppPublisherURL=http://www.сайт.com/
AppSupportURL=http://www.сайт.com/
AppUpdatesURL=http://www.сайт.com/
DefaultDirName={pf}\Test
DefaultGroupName=Test
AllowNoIcons=yes
OutputDir=.
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
DisableReadyMemo=true
DisableProgramGroupPage=true

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

[Messages]
russian.WizardSelectDir=Выбор папки установки и папки меню пуск
russian.SelectDirDesc=В какую папку вы хотите установить [name] и в какой папке должны создаться ярлыки?

[CustomMessages]
russian.DirEdit=Папка установки
russian.GroupEdit=Папка меню пуск

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Icons]
Name: {group}\Test; Filename: {app}\MyProg.exe
Name: {group}\{cm:UninstallProgram,Test}; Filename: {uninstallexe}
Name: {commondesktop}\Test; Filename: {app}\MyProg.exe; Tasks: desktopicon

[Run]
Filename: {app}\MyProg.exe; Description: {cm:LaunchProgram,Test}; Flags: nowait postinstall skipifsilent

[ Code]
var
  NewGroupBox1: TNewGroupBox;
  NewGroupBox2: TNewGroupBox;

procedure InitializeWizard();
begin
  with WizardForm do
  begin
    AutoScroll := False;
    ClientHeight := ScaleY(400);
    ClientWidth := ScaleX(537);
  end;

  with WizardForm.Bevel do
  begin
    Top := ScaleY(353);
    Width := ScaleX(537);
  end;

  with WizardForm.Bevel1 do
  begin
    Width := ScaleX(539);
  end;

  with WizardForm.CancelButton do
  begin
    Left := ScaleX(452);
    Top := ScaleY(367);
  end;

  with WizardForm.NextButton do
  begin
    Left := ScaleX(367);
    Top := ScaleY(367);
  end;

  with WizardForm.BackButton do
  begin
    Left := ScaleX(288);
    Top := ScaleY(367);
  end;

  with WizardForm.OuterNotebook do
  begin
    Width := ScaleX(537);
    Height := ScaleY(353);
  end;

  with WizardForm.WizardBitmapImage do
  begin
    Height := ScaleY(354);
  end;

  with WizardForm.InnerNotebook do
  begin
    Width := ScaleX(457);
    Height := ScaleY(277);
  end;

  with WizardForm.LicenseNotAcceptedRadio do
  begin
    Top := ScaleY(248);
  end;

  with WizardForm.LicenseAcceptedRadio do
  begin
    Top := ScaleY(228);
  end;

  with WizardForm.LicenseMemo do
  begin
    Width := ScaleX(457);
    Height := ScaleY(188);
  end;

  with WizardForm.PasswordEdit do
  begin
    Width := ScaleX(305);
  end;

  with WizardForm.InfoBeforeMemo do
  begin
    Width := ScaleX(457);
    Height := ScaleY(245);
  end;

  with WizardForm.UserInfoSerialEdit do
  begin
    Width := ScaleX(457);
  end;

  with WizardForm.UserInfoOrgEdit do
  begin
    Width := ScaleX(457);
  end;

  with WizardForm.UserInfoNameEdit do
  begin
    Width := ScaleX(457);
  end;

  with WizardForm.ComponentsList do
  begin
    Width := ScaleX(457);
  end;

  with WizardForm.TypesCombo do
  begin
    Width := ScaleX(457);
  end;

  with WizardForm.TasksList do
  begin
    Width := ScaleX(457);
    Height := ScaleY(232);
  end;

  with WizardForm.ReadyMemo do
  begin
    Width := ScaleX(457);
    Height := ScaleY(245);
  end;

  with WizardForm.ProgressGauge do
  begin
    Width := ScaleX(457);
  end;

  with WizardForm.InfoAfterMemo do
  begin
    Width := ScaleX(457);
    Height := ScaleY(245);
  end;

  with WizardForm.MainPanel do
  begin
    Width := ScaleX(537);
  end;

  with WizardForm.WizardSmallBitmapImage do
  begin
    Left := ScaleX(480);
  end;

  with WizardForm.WizardBitmapImage2 do
  begin
    Height := ScaleY(354);
  end;

    NewGroupBox1 := TNewGroupBox.Create(WizardForm);
  with NewGroupBox1 do
  begin
    Name := 'NewGroupBox1';
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(0);
    Top := ScaleY(0);
    Width := ScaleX(457);
    Height := ScaleY(136);
    Caption := CustomMessage('DirEdit');
  end;


  NewGroupBox2 := TNewGroupBox.Create(WizardForm);
  with NewGroupBox2 do
  begin
    Name := 'NewGroupBox2';
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(0);
    Top := ScaleY(136);
    Width := ScaleX(457);
    Height := ScaleY(136);
    Caption := CustomMessage('GroupEdit');
  end;


  with WizardForm.SelectDirBitmapImage do
  begin
    Parent := NewGroupBox1;
    Top := ScaleY(15);
    Left := ScaleX(8);
  end;

  with WizardForm.SelectDirLabel do
  begin
    Parent := NewGroupBox1;
    Top := ScaleY(25);
//    Width := ScaleX(325);
    Left := ScaleX(44);
  end;

  with WizardForm.SelectDirBrowseLabel do
  begin
    Parent := NewGroupBox1;
    Top := ScaleY(48);
    Left := ScaleX(8);
//    Width := ScaleX(393);
  end;

  with WizardForm.DiskSpaceLabel do
  begin
    Parent := NewGroupBox1;
    Left := ScaleX(8);
    Top := ScaleY(110);
 //   Width := ScaleX(393);
  end;


  with WizardForm.DirBrowseButton do
  begin
    Parent := NewGroupBox1;
    Left := ScaleX(372);
  end;

  with WizardForm.DirEdit do
  begin
    Parent := NewGroupBox1;
    Left := ScaleX(8);
    Width := ScaleX(362);
  end;



  with WizardForm.SelectGroupBitmapImage do
  begin
    Parent := NewGroupBox2;
    Top := ScaleY(15);
    Left := ScaleX(8);
  end;

  with WizardForm.SelectStartMenuFolderLabel do
  begin
    Parent := NewGroupBox2;
//    Width := ScaleX(325);
    Top := ScaleY(25);
    Left := ScaleX(44);
  end;

  with WizardForm.SelectStartMenuFolderBrowseLabel do
  begin
    Parent := NewGroupBox2;
    Top := ScaleY(48);
//    Width := ScaleX(393);
    Left := ScaleX(8);
  end;

  with WizardForm.GroupBrowseButton do
  begin
    Parent := NewGroupBox2;
    Left := ScaleX(372);
  end;

  with WizardForm.GroupEdit do
  begin
    Parent := NewGroupBox2;
    Left := ScaleX(8);
    Width := ScaleX(362);
  end;

  with WizardForm.NoIconsCheck do
  begin
    Parent := NewGroupBox2;
    Top := ScaleY(110);
    Left := ScaleX(8);
//    Width := ScaleX(401);
  end;

  NewGroupBox1.TabOrder := 5;
  NewGroupBox2.TabOrder := 6;
end;

единственное что не понял прикола с [CustomMessages]
пытаюсь сделать между "Папка установки" пробелы и не вникаю чего они не ставятся
[CustomMessages]
russian.DirEdit=Папка установки
russian.GroupEdit=Папка меню пуск

хотя на прямую Caption := ' Папка меню пуск ' без проблем.
 
Последнее редактирование:
Devils Night, можно сделать так к примеру:
Код:
Caption := ExpandConstant('{cm:GroupEdit} ');
пробел после фигурной скобки.
 
как правильней допилить его, чтоб там где не надо не озвучивало и работала озвучка при наведении
допиливать не стал
сделал свою версию
звук при наведении, при нажатии, при отпускании кнопки(можешь и другим контролам назначить по своему усмотрению)
главное чтоб они поддерживали события OnMouseEnter, OnMouseDown, OnMouseUp

Код:
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
LicenseFile=compiler:License.txt

[Files]
Source: UI\buttonclick.WAV; Flags: dontcopy
Source: UI\buttonclickrelease.WAV; Flags: dontcopy
Source: UI\buttonrollover.WAV; Flags: dontcopy

[  Code]
function sndPlaySound(lpszSoundName: AnsiString; uFlags: cardinal): Integer; external 'sndPlaySoundA@winmm stdcall delayload'; /// функция проигрывания звука

procedure PlaySoundOnEnter(Sender: TObject); /// процедура при наведении
begin
  sndPlaySound(ExpandConstant('{tmp}\buttonrollover.WAV'),$0001);
end;

procedure PlaySoundOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);  /// при нажатии кнопки
begin
  sndPlaySound(ExpandConstant('{tmp}\buttonclick.WAV'),$0001);
end;

procedure PlaySoundOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);  /// при отпускании кнопки
begin
  sndPlaySound(ExpandConstant('{tmp}\buttonclickrelease.WAV'),$0001);
end;

procedure InitializeWizard;
begin
  ExtractTemporaryFile('buttonclick.WAV'); /// функцией ExtractTemporaryFile извлекаем файл во временную папку - при нажатии кнопки мыши по контролу (не путать с кликом)
  ExtractTemporaryFile('buttonclickrelease.WAV'); /// при отпускании кнопки мыши с контрола
  ExtractTemporaryFile('buttonrollover.WAV');  /// при наведении
  
  with WizardForm do
  begin
    with NextButton do
    begin
      OnMouseEnter := @PlaySoundOnEnter;
      OnMouseDown := @PlaySoundOnMouseDown;
      OnMouseUp := @PlaySoundOnMouseUp;
    end;
    
    with BackButton do
    begin
      OnMouseEnter := NextButton.OnMouseEnter;
      OnMouseDown := NextButton.OnMouseDown;
      OnMouseUp := NextButton.OnMouseUp;
    end;
    
    with CancelButton do
    begin
      OnMouseEnter := NextButton.OnMouseEnter;
      OnMouseDown := NextButton.OnMouseDown;
      OnMouseUp := NextButton.OnMouseUp;
    end;
    
    with DirBrowseButton do
    begin
      OnMouseEnter := NextButton.OnMouseEnter;
      OnMouseDown := NextButton.OnMouseDown;
      OnMouseUp := NextButton.OnMouseUp;
    end;
    
    with GroupBrowseButton do
    begin
      OnMouseEnter := NextButton.OnMouseEnter;
      OnMouseDown := NextButton.OnMouseDown;
      OnMouseUp := NextButton.OnMouseUp;
    end;
  end;
end;
архив со всем необходимым (звуки взял из GUI халфы 2) :
 

Вложения

Последнее редактирование:
Mailchik, понял свою ошибку, Спасибо. Про ExpandConstant совсем забыл.
Nasgul, Спасибо.
 
Последнее редактирование:
Нуждаюсь в помощи:
Я немного изменил скрипт запроса пароля при удалении (сделал его подтверждением удаления), проблема в том, что я не могу убрать шифрование текста. Как снять это шифрование и после этого окна убрать подтверждение удаления:
bd1a49a2e22b40984c43d9c7114a7cd9.jpg
Код:
[Setup]
AppName=UninsPassword
AppVerName=UninsPassword
DisableProgramGroupPage=true
DisableStartupPrompt=true
DefaultDirName={pf}\UninsPassword

[ Code]
function AskPassword(): Boolean;
var
  Form: TSetupForm;
  OKButton, CancelButton: TButton;
  PwdEdit: TPasswordEdit;
  NewStaticText1: TNewStaticText;
begin
  Result := false;
  Form := CreateCustomForm();
  try
    Form.ClientWidth := ScaleX(380);
    Form.ClientHeight := ScaleY(145);
    Form.Caption := 'Подтверждение удаления';
    Form.BorderIcons := [biSystemMenu];
    Form.BorderStyle := bsDialog;
    Form.Center;

    OKButton := TButton.Create(Form);
    OKButton.Parent := Form;
    OKButton.Width := ScaleX(75);
    OKButton.Height := ScaleY(23);
    OKButton.Left := Form.ClientWidth - ScaleX(275);
    OKButton.Top := Form.ClientHeight - ScaleY(30);
    OKButton.Caption := 'OK';
    OKButton.ModalResult := mrOk;
    OKButton.Default := true;

    CancelButton := TButton.Create(Form);
    CancelButton.Parent := Form;
    CancelButton.Width := ScaleX(75);
    CancelButton.Height := ScaleY(23);
    CancelButton.Left := Form.ClientWidth - ScaleX(175);
    CancelButton.Top := Form.ClientHeight - ScaleY(30);
    CancelButton.Caption := 'Отмена';
    CancelButton.ModalResult := mrCancel;
    CancelButton.Cancel := True;

    NewStaticText1 := TNewStaticText.Create(Form);
    NewStaticText1.Parent := Form;
    NewStaticText1.Caption := 'Если вы согласны, введите в поле для ввода "Yes" (с большой буквы)' + #13#10 +
         'При этом, все что связанно с игрой (кроме сохранений)' + #13#10 +
         'Будет удалено с вашего компьютера' + #13#10 +
         'Если вы не согласны, просто нажмите кнопку "Отмена"' + #13#10 +
         'Вы действительно хотите удалить игру ?';
    NewStaticText1.Left := ScaleX(15);
    NewStaticText1.Top := ScaleY(15);
    NewStaticText1.Width := ScaleX(359);
    NewStaticText1.Height := ScaleY(66);

    PwdEdit := TPasswordEdit.Create(Form);
    PwdEdit.Parent := Form;
    PwdEdit.Width := ScaleX(210);
    PwdEdit.Height := ScaleY(23);
    PwdEdit.Left := ScaleX(85);
    PwdEdit.Top := ScaleY(90);

    Form.ActiveControl := PwdEdit;
    if Form.ShowModal() = mrOk then
    begin
      Result := PwdEdit.Text = 'Yes';
      if not Result then
            MsgBox('Неправильный ответ, удаление отменено.', mbInformation, MB_OK);
    end;
  finally
    Form.Free();
  end;
end;

function InitializeUninstall(): Boolean;
begin
  Result := AskPassword();
end;
 
AntonOVS, заменил форму на расширенный месседжбокс (на основе примера Restools - Example_MsgBoxEx_InputBoxEx.iss)
как просил:
1. шифрования текста нет
2. тихое удаление
текст месседж бокса сам впиши. Размер самонастроится
под расширенную версию:
Код:
#ifdef IS_ENHANCED
  #if (Ver < 0x5020300) || (Pos('ee', IS_Ver_Str) < 1)
    #pragma error 'Enhanced edition of Inno Setup (5.2.3.ee1 or higher) is required to compile this script'
  #endif
#else
  #error Enhanced edition of Inno Setup (restools) is required to compile this script
#endif

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
SolidCompression=yes
Compression=lzma/ultra	
PrivilegesRequired=none
OutputDir=.
UninstallFilesDir={app}\uninstall

[Files]
Source: "key.ico"; DestDir: {#SetupSetting("UninstallFilesDir")}; Flags: ignoreversion nocompression solidbreak sortfilesbyextension; Attribs: hidden system

[  code]
var
  Ico: UINT;

const
  IMAGE_ICON = 1;
  LR_LOADFROMFILE = $10;

function LoadImage(hInst: UINT; ImageName: String; ImageType: UINT; X, Y: Integer; Flags: UINT): THandle;
#ifdef UNICODE
external 'LoadImageW@user32.dll stdcall';
#else
external 'LoadImageA@user32.dll stdcall';
#endif

function LoadIcon(hInstance: UINT; lpIconName: UINT): HICON;
#ifdef UNICODE
external 'LoadIconW@user32.dll stdcall';
#else
external 'LoadIconA@user32.dll stdcall';
#endif

function CheckUninstallPassword(): Boolean;
var
  AResult: Boolean;
  AResultStr: String;
begin
  Result := False;
  AResult := InputBoxEx(0, 'This is a Example' + #13#10#13#10 + 'Enter your password:', 'Confirm Password', 'пароль', '', ico, 300, 0, 0, AResultStr);
  Result := AResult and (AResultStr = '123');
end;



function InitializeUninstall(): Boolean;
var
  ErrorCode: Integer;
begin
  Result := False;

  if not UninstallSilent then
  begin
    Exec(ExpandConstant('{uninstallexe}'), '/VERYSILENT', '', SW_SHOW, ewNoWait, ErrorCode);
    Exit;
  end;

  if FileCopy(ExpandConstant('{#SetupSetting("UninstallFilesDir")}\key.ico'), ExpandConstant('{tmp}\key.ico'), True) then
  begin
    Ico := LoadImage(0, ExpandConstant('{tmp}\key.ico'), IMAGE_ICON, 32, 32, LR_LOADFROMFILE);
    Result := CheckUninstallPassword;
  end;
end;
пароль удаления: 123

архив со всем необходимым:
 

Вложения

Последнее редактирование:
Такая вот проблема есть скрипт с ботва2 там всего 3 страницы начало выбор папки и тд и установку вопрос можно ли как то сделать дополнительные страницы в инсталяторе?
 
AVG
держи прототипы функций создания страниц

function CreateInputQueryPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String): TInputQueryWizardPage;
function CreateInputOptionPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; Exclusive, ListBox: Boolean): TInputOptionWizardPage;
function CreateInputDirPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; AAppendDir: Boolean; ANewFolderName: String): TInputDirWizardPage;
function CreateInputFilePage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String): TInputFileWizardPage;
function CreateOutputMsgPage(const AfterID: Integer; const ACaption, ADescription, AMsg: String): TOutputMsgWizardPage;
function CreateOutputMsgMemoPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; const AMsg: AnsiString): TOutputMsgMemoWizardPage;
function CreateOutputProgressPage(const ACaption, ADescription: String): TOutputProgressWizardPage;
function CreateCustomPage(const AfterID: Integer; const ACaption, ADescription: String): TWizardPage;
 
AVG
держи прототипы функций создания страниц

function CreateInputQueryPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String): TInputQueryWizardPage;
function CreateInputOptionPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; Exclusive, ListBox: Boolean): TInputOptionWizardPage;
function CreateInputDirPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; AAppendDir: Boolean; ANewFolderName: String): TInputDirWizardPage;
function CreateInputFilePage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String): TInputFileWizardPage;
function CreateOutputMsgPage(const AfterID: Integer; const ACaption, ADescription, AMsg: String): TOutputMsgWizardPage;
function CreateOutputMsgMemoPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; const AMsg: AnsiString): TOutputMsgMemoWizardPage;
function CreateOutputProgressPage(const ACaption, ADescription: String): TOutputProgressWizardPage;
function CreateCustomPage(const AfterID: Integer; const ACaption, ADescription: String): TWizardPage;
а попподробнее можно как именно страницы сделать?
 
I have a question about the Isexec function in Isdone project, the variable percent of total didn't work correctly, it always is 100 :(, or where was I wrong :(
 
Добрый вечер, извиняюсь за тупой вопрос, я создал панель, затем в diredit указал родителем созданный панель, и теперь
diredit не показывается вообше, что теперь делать, делать diredit через tnewedit?
 
nazbek010, А панель показывает? координаты дирэдита соотнес с размерами панели? Наверняка просто положение эдита лево-верх больше, чем размеры панели.
 
  • Like
Реакции: Adil
nazbek010, + выложил бы сразу код. А тут уже тебе точно подсказали бы, что к чему.
 
  • Like
Реакции: Adil
Всем привет у кого есть скрипт на апдейтера киньте пожалуйста
 
Inno Setup Ultra

Обновлена сборка InnoUltra. Исправлены вроде-бы, все ошибки интеграции в проводник, исправлено несколько неявных багов.
Добавлены русификаторы всех версий. За предоставленные русификаторы расширенной версии благодарим Devils Night, для стандартной версии нашел в SamLab. Качество русиков не блещет - видно, что автор плохо знаком с предметом, некоторые моменты будут совсем непонятны непосвященному, но в целом - жить можно. Перевод стандартной версии выполнен отдельным языковым файлом, поэтому, когда надоест - можно просто удалить файл Compil32.RUS из папки C:\Program Files (x86)\Inno Setup 5(или, куда вы ставите) для стандартной версии, либо файл Russian_***.lng из подпапки ISLanguages в папке с установленной сборкой.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху