Перейти к содержимому
Korean Random
EvilAlex

Создание инсталляторов для модпаков на базе Inno Setup

Рекомендуемые сообщения

(изменено)
28 minutes ago, Alex_ said:

1. т.е. только IsComponentSelected('KMP\punkt1').?

Да.

 

28 minutes ago, Alex_ said:

2. а как функцию выше переделать, чтобы она выдавала все названия 'KMP\***'  (т.е. спускалась "ниже")?

Если конкретно все, то простой пробежкой по циклу:

var
 I: Integer;
 S: String;
begin
 for I := 0 to WizardForm.ComponentsList.ItemCount - 1 do
  S := S + WizardForm.ComponentsList.Items[I] + #13#10;

Если все дочерние от конкретного компонента, то нужно внедрять в цикл фильтр уровня (ItemLevel - одно из свойств компонента). Пример работы с ним можно найти тут: https://bitbucket.org/Kotyarko_O/kmp/src/master/Resourses/ReadyMemo.iss.

Изменено пользователем Kotyarko_O

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)

1. но WizardForm.ComponentsList.Items выдает текстовое название пункта, а не его "name" 'KMP\punkt1'

2. Еще вопрос, как реализовать смену текстовых значений пунктов при выборе другого языка установки (русский, английский).Есть готовые решения?

Изменено пользователем Alex_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 minute ago, Alex_ said:

1. но WizardForm.ComponentsList.Items выдает текстовое название пункта, а не его "name" 'KMP\punkt1'

Тут я проглядел, при чтении предыдущего вопроса. Думал, что имеется ввиду просто прошерстить все компоненты. Но если речь конкретно об имени в [Components], то, как я уже говорил, никак.

 

4 minutes ago, Alex_ said:

2. Еще вопрос, как реализовать смену текстовых значений пунктов при выборе другого языка установки (русский, английский).Есть готовые решения?

Есть:

[Languages]
Name: En; MessagesFile: "English.isl";
Name: Ru; MessagesFile: "Russian.isl";

[CustomMessages]
En.FirstComponent=First component.
Ru.FirstComponent=Первый компонент.

[Components]
Name: A; Description: "{cm:FirstComponent}";

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
(изменено)
13 минут назад, Kotyarko_O сказал:

Тут я проглядел, при чтении предыдущего вопроса. Думал, что имеется ввиду просто прошерстить все компоненты. Но если речь конкретно об имени в [Components], то, как я уже говорил, никак.

 

Есть:


[Languages]
Name: En; MessagesFile: "English.isl";
Name: Ru; MessagesFile: "Russian.isl";

[CustomMessages]
En.FirstComponent=First component.
Ru.FirstComponent=Первый компонент.

[Components]
Name: A; Description: "{cm:FirstComponent}";

 

теперь все понятно. Вопрос с проблемами кирилицы решен. Спасибо!

Изменено пользователем Alex_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Kotyarko_O , hello again, I got the idea of @night_dragon_on , made it work ...
Code:

//====================[MCTCREATOR TEST]=====================//
Source: "MODS\ComponetsPage\MCTCREATOR\*.cfg";                DestDir: "{app}\_AuthorName_\MCTCreator"; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: SetInstallStatus('Extart MTCreator...');                                    Check: ComponentsChecked('Changing game texture (MCTCreator):');
Source: "MODS\ComponetsPage\MCTCREATOR\7za.exe";              DestDir: "{app}\_AuthorName_\MCTCreator"; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: SetInstallStatus('Extart MTCreator...');                                    Check: ComponentsChecked('Changing game texture (MCTCreator):');
Source: "MODS\ComponetsPage\MCTCREATOR\MCTCreator.exe";       DestDir: "{app}\_AuthorName_\MCTCreator"; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: SetInstallStatus('Extart MTCreator...'); AfterInstall: MCTCreator();  Check: ComponentsChecked('Changing game texture (MCTCreator):');

///////////////
//Test Proced//
///////////////
procedure TextureCreator();
var
  WotPath, TempPath, Params: String;
  ResultCode: Integer;
begin
  if FileExists(ExpandConstant('{app}\_AuthorName_\MCTCreator\MCTCreator.exe')) then
  begin
    WotPath:= ExpandConstant('{app}');
    TempPath:= ExpandConstant('{app}\_AuthorName_\MCTCreator\texture\res\');
    Params:= '/wot-path "' + WotPath + '" /mods-path "' + TempPath + '" /operational-mode=0';
    if ComponentsChecked('Change the texture of destroyed tank') then
      Params := Params + ' /DPT-mod "#2AAAFF" /ITS-mod "#2AAAFF"';
    if ComponentsChecked('Change the texture of the downed track') then
      Params := Params + ' /CT-mod "#D9D9D9"';
    Exec(ExpandConstant('{app}\_AuthorName_\MCTCreator\MCTCreator.exe'), Params, ExpandConstant('{app}\_AuthorName_\MCTCreator'), SW_SHOW, ewWaitUntilTerminated, ResultCode);
    if ResultCode <> 0 then
      MsgBox('Unexpected error.' + #13#10 + 'Result code: ' + IntToStr(ResultCode) + '.', mbInformation, MB_OK);
  end else
    MsgBox('MCTCreator files doesn`t exists.' + #13#10 + 'Please restart the installer.', mbInformation, MB_OK);
end;

procedure PackageCreator();
var
  ModsPath, TempPath, Params: String;
  ResultCode: Integer;
begin
  if FileExists(ExpandConstant('{app}\_AuthorName_\MCTCreator\7za.exe')) then
  begin
    ModsPath:= ExpandConstant('{app}\mods\{#Patch}\_AuthorName_\crash_texture.wotmod');
    TempPath:= ExpandConstant('{app}\_AuthorName_\MCTCreator\texture\*');
    Params:= 'a -tzip -ssw -mx0 -r0 "' + ModsPath + '" "' + TempPath + '"';
    Exec(ExpandConstant('{app}\_AuthorName_\MCTCreator\7za.exe'), Params, ExpandConstant('{app}\_AuthorName_\MCTCreator'), SW_HIDE, ewWaitUntilTerminated, ResultCode);
    if ResultCode <> 0 then
      MsgBox('Unexpected error.' + #13#10 + 'Result code: ' + IntToStr(ResultCode) + '.', mbInformation, MB_OK);
  end else
    MsgBox('Files of the utility "MCTCreator" were not found.' + #13#10 + 'Please restart the installer.', mbInformation, MB_OK);
end;

procedure MCTCreator();
begin
  if ComponentsChecked('Change the texture of destroyed tank') or ComponentsChecked('Change the texture of the downed track') then
    TextureCreator();
    PackageCreator();
    DelTree(ExpandConstant('{app}\_AuthorName_\MCTCreator'), true, true, true);
end;
///////////////

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

всем приветы. народ подскажите в чем может быть проблема. короче один пишет что все время у него было всё нормально а потом вдруг в установщике пропали кнопки вперед назад и тд и надпись тоже сместилась. у него винда 10.  вот его скрин 

AJ0DmaG5.jpg

 

я ему посоветовал глянуть эти два параметра, но пишет что не помогло.

hvadai2v.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Kotyarko_O

 

in your code, its possible add some function for download components and extract them to game pach. I see a lot of examples but didn't work.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
On 8/12/2018 at 9:40 PM, ЛОМ said:

я ему посоветовал глянуть эти два параметра, но пишет что не помогло.

Там нужно перезаход в систему делать, без него изменение масштабности может не помочь.

 

@DKRUBEN , possible.

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 12.08.2018 в 21:40, ЛОМ сказал:

всем приветы. народ подскажите в чем может быть проблема. короче один пишет что все время у него было всё нормально а потом вдруг в установщике пропали кнопки вперед назад и тд и надпись тоже сместилась. у него винда 10.  вот его скрин

Через ScaleX и ScaleY переделай координаты всех элементов. Тогда они будут масштабироваться вместе с окном инсталлятора.

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, AtotIK сказал:

Через ScaleX и ScaleY переделай координаты всех элементов. Тогда они будут масштабироваться вместе с окном инсталлятора.

так вроде у меня через это и прописаны координаты

 

JHnWQPrh.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
40 минут назад, ЛОМ сказал:

так вроде у меня через это и прописаны координаты

Делай лучше так: SetBounds(ScaleX(130), ScaleY(415), ScaleX(13), ScaleY(13));

Где (Left, Top, Width, Height).

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
4 часа назад, AtotIK сказал:

Делай лучше так: SetBounds(ScaleX(130), ScaleY(415), ScaleX(13), ScaleY(13));

Где (Left, Top, Width, Height).

вот так ? 

 

AQekqKtV.jpg

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×