Jump to content
Korean Random
EvilAlex

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

Recommended Posts

2 hours ago, DKRUBEN said:

Give-me a error...

Always attach screenshot or part of a code if you post a message about some errors.

Share this post


Link to post

Short link
Share on other sites

@DKRUBEN , i don`t see any mistakes can throw compiler error with "components" more (like that on the screenshot you attached before). Maybe your current error differ from previous?

 

All i can see now, is potentional errors, like: SetInstallStatus(), SetCheckListBoxBGBMP(), SetCheckListBoxEvents() - them are declared in separate script, and you could forgot to copy.

 

You can attach your project archive, i`ll check it (in PM if you don`t want to share it to public).

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites
10 hours ago, DKRUBEN said:

are you there?

Only when i have a free time =)

 

There`s so simple mistake (declaration sequence). Try this: PageComponents.iss

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

@Kotyarko_O , thats are the msn i ricive.

Nova Imagem de Mapa de Bits.bmp

@Kotyarko_O , i try this

Procedure MCTCreatorLaunch();
var
 ResCode: Integer;
 Params: String;
begin
 ResCode := 666;
 if FileExists(ExpandConstant('{app}\Driftkings\MCTCreator\MCTCreator.exe')) then
 begin
  Params := (ExpandConstant('/wot-path "{app}"') + ('/operational-mode=0'));
  if IsComponentSelected('Change the texture of destroyed equipment') then
   Params := Params + '/DPT-mod "FFFFFF"';
  if IsComponentSelected('Change the texture of the downed track/tank') then
   Params := Params + '/CT-mod "FFFFFF"';
  Exec('MCTCreator.exe', Params, ExpandConstant('{app}\Driftkings\MCTCreator'), SW_SHOW, ewWaitUntilTerminated, ResCode);
  if ResCode <> 0 then
   MsgBoxEx(WizardForm.Handle, 'Unexpected error.' + #13#10 + 'Result code: ' + IntToStr(ResCode) + '.', '{#__FILE__}: {#__LINE__}', MB_OK or MB_ICONERROR, 0, 0);
 end else
  MsgBoxEx(WizardForm.Handle, 'MCTCreator files doesn`t exists.', '{#__FILE__}: {#__LINE__}', MB_OK or MB_ICONERROR, 0, 0);
end;

but same error:tears:

Share this post


Link to post

Short link
Share on other sites

Вопрос такой.
После инсталяции применяю подстройку конфига путем замены параметра на уже установленном модпаке.

Следующим путем

1. Проверяю, был ли checked пункта с именем "Пункт1" следующим видом
 

Function ComponentsChecked(Name: String): Boolean;
begin
 Result := _IsComponentSelected(WizardForm.ComponentsList, Name);
end;

 

Function _IsComponentSelected(CheckListBox: TNewCheckListBox; Name: String): Boolean;
var
 I, Idx: Integer;
begin
 Result := False;
 try
  Idx := CheckListBox.Items.IndexOf(Name);
 // Idx := CheckListBox.Items.IndexOfName(Name)
  for I := 0 to CheckListBox.ItemCount - 1 do
   if (Idx <= CheckListBox.ItemCount) and (Idx = I) then
    Result := CheckListBox.Checked[Idx];
 except
  MsgBoxEx(WizardForm.Handle, GetExceptionMessage(), '{#__FILE__}: {#__LINE__}', MB_ICONERROR or MB_OK, 0, 0);
  Log('[CUSTOM LOG]: ' + 'Checked. I = ' + IntToStr(I) + '. Name: "' + Name + '".');
 end;
end;


2. Дальше делаю если пункт выбран, делаю замену  в конечном фонфиге функцией

Procedure ConfigEdit(DefPath, ConfigFile: String; IsComponents: Boolean; OldValue, NewValue: String);
var
 Config: TStringList;
 ConfigPath: String;
 back_num: Integer;
begin
 if IsComponents then
 try
  Config := TStringList.Create;
  ConfigPath := ExpandConstant(DefPath + ConfigFile);
  ChangeConfiguratorStatus(ConfigPath);
  back_num:=Editor(Config, DefPath, ConfigPath, OldValue, NewValue);
  if back_num < 1 then
    MsgBoxEx(WizardForm.Handle, ConfigPath + #13#10 + OldValue + #13#10 + NewValue, 'Config value doesn`t changed', MB_ICONWARNING or MB_OK, 0, 0);
 finally
  Config.Free;
 end;
end;

3. Это все замечательно работает, но не не в странах, где нет русской кодировки. т.е. на этапе поиска/одобрения этого пункта идет затык.


Как мне обойти этот момент? 
Есть еще строчки вида
Name: KMP\punkt1; Description: "{cm:CompName1}";    Flags:  disablenouninstallwarning;     Types: custom;

Вероятно можно делать поиск по  "KMP\punkt1", но тогда какие параметры запроса должны быть в 
_IsComponentSelected(WizardForm.ComponentsList, Name);

и какая сама функция _IsComponentSelected должна быть?
Мы должны искать вместо:
Idx := CheckListBox.Items.IndexOf(Name);
искать
Idx := CheckListBox.Items.IndexOfName( 'KMP\punkt1');
Но при этом ничего не ищет.

В общем вот такая задача.

Edited by Alex_

Share this post


Link to post

Short link
Share on other sites
47 minutes ago, Alex_ said:

3. Это все замечательно работает, но не не в странах, где нет русской кодировки. т.е. на этапе поиска/одобрения этого пункта идет затык.

Речь идёт про "поиск\одобрение" какого конкретно "пункта"? Компонента в списке или строки в конфиге?

 

49 minutes ago, Alex_ said:

Есть еще строчки вида
Name: KMP\punkt1; Description: "{cm:CompName1}";    Flags:  disablenouninstallwarning;     Types: custom;

Вероятно можно делать поиск по  "KMP\punkt1", но тогда какие параметры запроса должны быть в 
_IsComponentSelected(WizardForm.ComponentsList, Name);

и какая сама функция _IsComponentSelected должна быть?
Мы должны искать вместо:
Idx := CheckListBox.Items.IndexOf(Name);
искать
Idx := CheckListBox.Items.IndexOfName( 'KMP\punkt1');
Но при этом ничего не ищет.

Можно просто использовать стандартную функцию, предназначенную для этой цели: IsComponentSelected('KMP\punkt1').

Share this post


Link to post

Short link
Share on other sites
42 минуты назад, Kotyarko_O сказал:

Речь идёт про "поиск\одобрение" какого конкретно "пункта"? Компонента в списке или строки в конфиге?

 

Можно просто использовать стандартную функцию, предназначенную для этой цели: IsComponentSelected('KMP\punkt1').

мы ищем "включена ли галочка" в  WizardForm.ComponentsList.Items
т.к поиск по имени не срабатывает при отсутствии русской кодировки.

 

сейчас проверю 
IsComponentSelected('KMP\punkt1').

А как сделать деревянную функцию поиска этого 'KMP\punkt1' в функции ниже?

function GetIndexComponent(ComponentName: String): Integer;
var
    J: Integer;
    Nowstring: String;
begin
    Result:= -1;
    for J:=0 to WizardForm.ComponentsList.ItemCount-1 do
    begin
      Nowstring:=Lowercase(WizardForm.ComponentsList.Items[J]);
      if (Lowercase(ComponentName)=Nowstring) then
      begin
        Result:=J;
        break;
      end;
    end;
end;

т.к. при функции выше в WizardForm.ComponentsList.Items[J] он выдает опять же текстовое значение пункта, а не Name

Edited by Alex_

Share this post


Link to post

Short link
Share on other sites
46 minutes ago, Alex_ said:

т.к поиск по имени не срабатывает при отсутствии русской кодировки.

Если 1251 (кириллица) не определена для ACP в кодовых страницах, то ни о каком поиске речи идти не может, ведь даже отображение кириллицы не будет нормальным. Тут надо решать проблему или указанием пользователю настроек региональных стандартов, или делать полноценный перевод.

 

46 minutes ago, Alex_ said:

А как сделать деревянную функцию поиска этого 'KMP\punkt1' в функции ниже?

Никак. Обработка этих имён находится на уровне ниже (https://github.com/jrsoftware/issrc/blob/master/Projects/Struct.pas#L174).

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites
2 минуты назад, Kotyarko_O сказал:

Никак. Обработка этих имён находится на уровне ниже.

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

 

Edited by Alex_

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...