WedX - журнал о программировании и компьютерных науках

Inno Setup добавить текст описания на страницу

У меня возникли проблемы с пониманием того, как использовать Inno Setup. Я создал этот скрипт для установки моего приложения:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "MyApp"
#define MyAppVersion "1.0"
#define MyAppPublisher "Myself"
#define MyAppExeName "MyApp.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{5FA0A2CF-7FD4-4464-AF88-4B73D0857D03}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName=C:\{#MyAppName}
DisableDirPage=no
DefaultGroupName=MyApp
;DisableProgramGroupPage=yes
OutputDir=D:\test
OutputBaseFilename=MyApp
Compression=lzma
SolidCompression=yes
PrivilegesRequired=lowest
UninstallDisplayName=MyApp {#MyAppName}
SetupIconFile="D:\MyApp\MyApp.ico"

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Files]
Source: "D:\MyApp\MyApp.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\MyApp\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[CustomMessages]
FileTemplateDescription=Test description

[Code]
var
  DataDirPage: TInputDirWizardPage;
  FileTemplatePage: TInputQueryWizardPage;
  CustomStatusLabel: TNewStaticText;

procedure InitializeWizard;
begin
  { This part creates the page where to choose the data location directory }
  DataDirPage := CreateInputDirPage(wpSelectDir,
    'Select data directory', 'Where are the files you want to use?',
    'Select the folder where the data files are located, then click Next.',
    False, '');
  DataDirPage.Add('');

  DataDirPage.Values[0] := GetPreviousData('DataDir', '');

  { This part creates the page where to add the filetemplate }
  FileTemplatePage := CreateInputQueryPage(DataDirPage.ID,
    'File template', 'This is an advance option, do not change it if you are not sure.',
    'Please specify the file template, then click Next.');

  // Add items (False means it's not a password edit)
  FileTemplatePage.Add('File template:', False);

  // Set initial values (optional)
  FileTemplatePage.Values[0] := 'GlobalStatReanalysis_temp_sal_ssh_u_v_{{dateTime:%Y%m%d}.nc';

  // Description of the file template
  //  FileTemplatePage.Description := 'Test of description.';
  { S := CustomMessage('FileTemplateDescription');}
    CustomStatusLabel := TNewStaticText.Create(WizardForm);
  CustomStatusLabel.Parent := WizardForm.InstallingPage;
  CustomStatusLabel.Caption := 'Test Text';

end;

//procedure CurPageChanged(CurPageID: Integer);
  //begin
//    M:= TLabel.Create(WizardForm);
    //M.Caption:= (ExpandConstant('{cm:FileTemplateDescription}'));
  //end;

function GetDataDir(Param: String): String;
begin
  { Return the selected DataDir }
  Result := DataDirPage.Values[0];
end;

function GetFileTemplate(Param: String): String;
begin
  // Return values into variables
  Result := FileTemplatePage.Values[0];
end;

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\MyApp.ico"; Parameters: "--path:{code:GetDataDir} --filetemplate:{code:GetFileTemplate} --fileconfig:""{app}\conf.yml"""

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent; Parameters: "--path:{code:GetFileTemplate} --filetemplate:{code:GetDataDir} --fileconfig:""{app}\conf.yml"""

Я создал страницу FileTemplatePage, чтобы пользователь мог добавить шаблон файла. Я хочу добавить описание на эту страницу.

Оглядевшись, я нашел этот другой вопрос. В основном это именно то, что я хочу, но я действительно не понимаю, как работает скрипт.

Если я добавлю процедуру CurPageChanged(CurPageID: Integer), как мне сказать ей изменить FileTemplatePage? Куда мне его положить? Разве я не должен вставить что-то вроде: CurPageChanged(FileTemplatePage.ID) внутри InitializeWizard?

В общем, у меня проблемы с пониманием того, как работает часть [Code], разве нет основной функции?

Я могу скомпилировать и использовать этот сценарий, и я могу визуализировать текст на странице установки, потому что Parent это то, как я могу изменить Parent?.

Я пытался сделать это: CustomStatusLabel.Parent := FileTemplatePage, но получаю ошибку Type mismatch.

Есть ли у вас какие-либо советы? Спасибо.

01.11.2018

  • @MartinPrikryl да, вы правы, я еще не ответил, потому что я все еще обрабатываю другой вопрос, а это другая тема. Извините, я не думал, что это проблема. 02.11.2018
  • @MartinPrikryl, следуя инструкциям дублирующего вопроса, я решил свою проблему. Спасибо! Я изменил свой код таким образом: FileTemplateDescription := TNewStaticText.Create(WizardForm); with FileTemplateDescription do begin Parent := FileTemplatePage.Surface; FileTemplateDescription.Caption := 'Description'; Top := WizardForm.SelectTasksPage.Top + WizardForm.SelectTasksPage.Height - Height; // - ScaleY(8); end; 02.11.2018
  • Кроме того, я не думаю, что WizardForm.SelectTasksPage.Top + WizardForm.SelectTasksPage.Height - Height правильно в вашем случае. Это что-то очень специфичное для исходного вопроса. Вы должны разместить метку способом, специфичным для вашей страницы. 02.11.2018
  • @MartinPrikryl да, спасибо, это был только первый тест, чтобы увидеть, как это работает, я исправлю это лучше 02.11.2018

Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]