Inno Setup Определение клиента

tihiy_don

Старожил
@audiofeel, ну да. Через обычные чекбоксы и радиобаттоны я делал, но там много кода получается, чтобы проходить через все дочерние чекбоксы и отрубать или включать родительский. Надеюсь блакфаер скоро очухается и добавит то что я просил.
 

audiofeel

Старожил
"Привет. Подскажи, пожалуйста, делаю сейчас свой инсталл, похожий на твой, но никак не получается сделать прямоугольник, который ездит по разделам с прозрачностью. Не подскажешь или может дашь свой пример" На втором скриншоте как раз раздел Конфиг XVM подсвечен о чем речь идет.
Посмотреть вложение 9059
Посмотреть вложение 9060
"прямоугольник, который ездит по разделам с прозрачностью" :D
примерно так
customTab.gif
 

Вложения

Последнее редактирование:

hitman797

Новичок
Как это примерно все организовать есть в Example_MainMenu + TreeView.iss
Вы имеете ввиду вот так?
Посмотреть вложение 9064

Скорее всего придется предложить что то добавить автору
Я не знаю как это сделать СЕЙЧАС.
Возможно поможет @hitman797
Ingredients:
1. FTreeView (1).
2. FTreeViewItem (7).
3. FCheckBox (6).

Код:
procedure TForm1.CheckBox1Change(Sender: TObject);
begin
  if CheckBox1.IsChecked then
  begin
    CheckBox3.IsChecked:= True;
    CheckBox4.IsChecked:= True;
  end else
  begin
    CheckBox3.IsChecked:= False;
    CheckBox4.IsChecked:= False;
  end;
end;

procedure TForm1.CheckBox2Change(Sender: TObject);
begin
  if CheckBox2.IsChecked then
  begin
    CheckBox5.IsChecked:= True;
    CheckBox6.IsChecked:= True;
  end else
  begin
    CheckBox5.IsChecked:= False;
    CheckBox6.IsChecked:= False;
  end;
end;

procedure TForm1.CheckBox3Change(Sender: TObject);
begin
  CheckBox1.OnChange:= nil;
  if CheckBox3.IsChecked or CheckBox4.IsChecked then
  begin
    CheckBox1.IsChecked:= True;
  end else
  begin
    CheckBox1.IsChecked:= False;
  end;
  CheckBox1.OnChange:= CheckBox1Change;
end;

procedure TForm1.CheckBox4Change(Sender: TObject);
begin
  CheckBox1.OnChange:= nil;
  if CheckBox3.IsChecked or CheckBox4.IsChecked then
  begin
    CheckBox1.IsChecked:= True;
  end else
  begin
    CheckBox1.IsChecked:= False;
  end;
  CheckBox1.OnChange:= CheckBox1Change;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TreeView1.ExpandAll;
end;
 
Последнее редактирование:

tihiy_don

Старожил
Ingredients:
1. FTreeView (1).
2. FTreeViewItem (7).
3. FCheckBox (6).

Код:
procedure TForm1.CheckBox1Change(Sender: TObject);
begin
  if CheckBox1.IsChecked then
  begin
    CheckBox3.IsChecked:= True;
    CheckBox4.IsChecked:= True;
  end else
  begin
    CheckBox3.IsChecked:= False;
    CheckBox4.IsChecked:= False;
  end;
end;

procedure TForm1.CheckBox2Change(Sender: TObject);
begin
  if CheckBox2.IsChecked then
  begin
    CheckBox5.IsChecked:= True;
    CheckBox6.IsChecked:= True;
  end else
  begin
    CheckBox5.IsChecked:= False;
    CheckBox6.IsChecked:= False;
  end;
end;

procedure TForm1.CheckBox3Change(Sender: TObject);
begin
  CheckBox1.OnChange:= nil;
  if CheckBox3.IsChecked or CheckBox4.IsChecked then
  begin
    CheckBox1.IsChecked:= True;
  end else
  begin
    CheckBox1.IsChecked:= False;
  end;
  CheckBox1.OnChange:= CheckBox1Change;
end;

procedure TForm1.CheckBox4Change(Sender: TObject);
begin
  CheckBox1.OnChange:= nil;
  if CheckBox3.IsChecked or CheckBox4.IsChecked then
  begin
    CheckBox1.IsChecked:= True;
  end else
  begin
    CheckBox1.IsChecked:= False;
  end;
  CheckBox1.OnChange:= CheckBox1Change;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TreeView1.ExpandAll;
end;
Спасибо за описания подобного метода. Но думаю всё-таки дождаться улучшения FCheckBoxTree. Так как тут тоже нужно кучу проверок делать :)
 

audiofeel

Старожил
Спасибо за описания подобного метода. Но думаю всё-таки дождаться улучшения FCheckBoxTree. Так как тут тоже нужно кучу проверок делать :)
вы не боитесь количества кода, это ПОКА влияет только на время компиляции. у меня есть примеры и с 0.5 мб, где 129 лейблов и 100 FRectangle
 

tihiy_don

Старожил
@audiofeel, это понятно. Но всё-равно хочется использовать более подходящий для этого компонент. А так конечно тема с FTreeView интересная.
 

hitman797

Новичок
@audiofeel, это понятно. Но всё-равно хочется использовать более подходящий для этого компонент. А так конечно тема с FTreeView интересная.
here is example for TreeView.
copy the file in "FMXInno + SKIA + Blend2D - Final Release [2024-June-10]" folder and compile.
Код:
type
  TCheckBoxTree = record
  Item: FTreeViewItem;
  Box: FCheckBox;
  Btn: FRadioButton;
end;

var
  AForm   : FForm;
  ATreeView: FTreeView;
  CheckBoxTree: array [1..20] of TCheckBoxTree;

procedure FMXInnoInit;
var
  i: Integer;
begin
  AForm   := InitFormHandle;
  ATreeView := InitTreeViewHandle;
  for i:= 1 to 20 do
  begin
    CheckBoxTree[i].Item := InitTreeViewItemHandle;
    CheckBoxTree[i].Box := InitCheckBoxHandle;
    CheckBoxTree[i].Btn := InitRadioButtonHandle;
  end;
end;

function InitializeSetup(): Boolean;
begin
  FMXInnoInit;
  Result := True;
end;

procedure FMXDesigning; forward;

procedure InitializeWizard();
begin
  EmptyWizardForm(False, 640, 480);

  FMXDesigning;
  AForm.Show;
end;

procedure DeinitializeSetup();
begin
  FMXInnoShutDown;
end;

procedure FMXDesigning;
var
  i: Integer;
begin
  AForm.FCreateFluent(WizardForm.Handle, False, False, 0.56, 0);
  if not IsOSMatched(B_WIN11_21H2) then
    AForm.Win10FluentRedrawOnUpdate(True);
  AForm.SetCursor(ExtractAndLoad('Dark.cur'));
  AForm.LoadStyleFromFile(ExtractAndLoad('LightStyle.style'));

  ATreeView.FCreate(AForm.Handle);
  ATreeView.SetBounds(40, 40, 200, 400);
  ATreeView.ItemHeight(20);

  CheckBoxTree[1].Item.FCreate(ATreeView.Handle);
  CheckBoxTree[1].Item.Text('Root 1'); //Root 1

  CheckBoxTree[2].Item.FCreate(ATreeView.Handle);
  CheckBoxTree[2].Item.Text('Root 2'); //Root 2

  CheckBoxTree[3].Item.FCreate(ATreeView.Handle);
  CheckBoxTree[3].Item.Text(''); //Parent 1
  CheckBoxTree[3].Box.FCreate(CheckBoxTree[3].Item.Handle, True, 'Parent 1');
  CheckBoxTree[3].Box.SetBounds(20, 0, 180, 20);

  CheckBoxTree[4].Item.FCreate(ATreeView.Handle);
  CheckBoxTree[4].Item.Text(''); //Parent 2
  CheckBoxTree[4].Box.FCreate(CheckBoxTree[4].Item.Handle, True, 'Parent 2');
  CheckBoxTree[4].Box.SetBounds(20, 0, 180, 20);

  CheckBoxTree[5].Item.FCreate(ATreeView.Handle);
  CheckBoxTree[5].Item.Text(''); //Parent 1
  CheckBoxTree[5].Box.FCreate(CheckBoxTree[5].Item.Handle, True, 'Parent 1');
  CheckBoxTree[5].Box.SetBounds(20, 0, 180, 20);

  CheckBoxTree[6].Item.FCreate(ATreeView.Handle);
  CheckBoxTree[6].Item.Text(''); //Parent 2
  CheckBoxTree[6].Box.FCreate(CheckBoxTree[6].Item.Handle, True, 'Parent 2');
  CheckBoxTree[6].Box.SetBounds(20, 0, 180, 20);

  CheckBoxTree[7].Item.FCreate(ATreeView.Handle);
  CheckBoxTree[7].Item.Text(''); //Child 1
  CheckBoxTree[7].Box.FCreate(CheckBoxTree[7].Item.Handle, True, 'Child 1');
  CheckBoxTree[7].Box.SetBounds(20, 0, 180, 20);

  CheckBoxTree[8].Item.FCreate(ATreeView.Handle);
  CheckBoxTree[8].Item.Text(''); //Child 2
  CheckBoxTree[8].Box.FCreate(CheckBoxTree[8].Item.Handle, True, 'Child 2');
  CheckBoxTree[8].Box.SetBounds(20, 0, 180, 20);

  CheckBoxTree[9].Item.FCreate(ATreeView.Handle);
  CheckBoxTree[9].Item.Text(''); //Child 1
  CheckBoxTree[9].Box.FCreate(CheckBoxTree[9].Item.Handle, True, 'Child 1');
  CheckBoxTree[9].Box.SetBounds(20, 0, 180, 20);

  CheckBoxTree[10].Item.FCreate(ATreeView.Handle);
  CheckBoxTree[10].Item.Text(''); //Child 2
  CheckBoxTree[10].Box.FCreate(CheckBoxTree[10].Item.Handle, True, 'Child 2');
  CheckBoxTree[10].Box.SetBounds(20, 0, 180, 20);

  CheckBoxTree[11].Item.FCreate(ATreeView.Handle);
  CheckBoxTree[11].Item.Text(''); //Child 1
  CheckBoxTree[11].Btn.FCreate(CheckBoxTree[11].Item.Handle, True, 'Child 1');
  CheckBoxTree[11].Btn.SetBounds(20, 0, 180, 20);
  CheckBoxTree[11].Btn.GroupName('Parent 1');

  CheckBoxTree[12].Item.FCreate(ATreeView.Handle);
  CheckBoxTree[12].Item.Text(''); //Child 2
  CheckBoxTree[12].Btn.FCreate(CheckBoxTree[12].Item.Handle, False, 'Child 2');
  CheckBoxTree[12].Btn.SetBounds(20, 0, 180, 20);
  CheckBoxTree[12].Btn.GroupName('Parent 1');

  CheckBoxTree[13].Item.FCreate(ATreeView.Handle);
  CheckBoxTree[13].Item.Text(''); //Child 1
  CheckBoxTree[13].Btn.FCreate(CheckBoxTree[13].Item.Handle, False, 'Child 1');
  CheckBoxTree[13].Btn.SetBounds(20, 0, 180, 20);
  CheckBoxTree[13].Btn.GroupName('Parent 2');

  CheckBoxTree[14].Item.FCreate(ATreeView.Handle);
  CheckBoxTree[14].Item.Text(''); //Child 2
  CheckBoxTree[14].Btn.FCreate(CheckBoxTree[14].Item.Handle, True, 'Child 2');
  CheckBoxTree[14].Btn.SetBounds(20, 0, 180, 20);
  CheckBoxTree[14].Btn.GroupName('Parent 2');

  // AddRoot
  ATreeView.AddItem(CheckBoxTree[1].Item.Handle);
  ATreeView.AddItem(CheckBoxTree[2].Item.Handle);
  // AddParent
  CheckBoxTree[1].Item.AddItem(CheckBoxTree[3].Item.Handle);
  CheckBoxTree[1].Item.AddItem(CheckBoxTree[4].Item.Handle);
  CheckBoxTree[2].Item.AddItem(CheckBoxTree[5].Item.Handle);
  CheckBoxTree[2].Item.AddItem(CheckBoxTree[6].Item.Handle);
  // AddChild
  CheckBoxTree[3].Item.AddItem(CheckBoxTree[7].Item.Handle);
  CheckBoxTree[3].Item.AddItem(CheckBoxTree[8].Item.Handle);
  CheckBoxTree[4].Item.AddItem(CheckBoxTree[9].Item.Handle);
  CheckBoxTree[4].Item.AddItem(CheckBoxTree[10].Item.Handle);
  // AddChild 2
  CheckBoxTree[5].Item.AddItem(CheckBoxTree[11].Item.Handle);
  CheckBoxTree[5].Item.AddItem(CheckBoxTree[12].Item.Handle);
  CheckBoxTree[6].Item.AddItem(CheckBoxTree[13].Item.Handle);
  CheckBoxTree[6].Item.AddItem(CheckBoxTree[14].Item.Handle);

  ATreeView.ExpandAll;
end;

Example_TreeView.iss
 
Последнее редактирование:

audiofeel

Старожил

hitman797

Новичок
OpenWG - WOT

Код:
procedure OnTimer(Sender: TObject);
var
  ClientIndex: Integer;
begin
  ClientIndex:= 0;
  AMemo.AddLine('WOT Add Client: ' + IntToStr(WOT_AddClientW(WOT_GetClientPathW(ClientIndex))));
  AMemo.AddLine('WOT Launcher Get Preferred Client: ' + IntToStr(WOT_LauncherGetPreferredClient(WOT_GetClientLauncherFlavour(ClientIndex))));
  AMemo.AddLine('WOT Launcher Rescan: ' + IntToStr(WOT_LauncherRescan));
  AMemo.AddLine('WOT Launcher Set Default: ' + IntToStr(WOT_LauncherSetDefault(WOT_GetClientVendor(ClientIndex), WOT_GetClientVendor(ClientIndex))));
  AMemo.AddLine('WOT Client Find: ' + IntToStr(WOT_ClientFind(WOT_GetClientPathW(ClientIndex))));
  if WOT_ClientIsStarted(ClientIndex) = True then
  begin
    AMemo.AddLine('WOT Client Is Started: ' + 'True');
  end else
  begin
    AMemo.AddLine('WOT Client Is Started: ' + 'False');
  end;
  if WOT_ClientIsVersionMatch(ClientIndex , WOT_GetClientVersionW(ClientIndex)) = True then
  begin
    AMemo.AddLine('WOT Client Is Version Match: ' + 'True');
  end else
  begin
    AMemo.AddLine('WOT Client Is Version Match: ' + 'False');
  end;
  if WOT_ClientTerminate(ClientIndex) = True then
  begin
    AMemo.AddLine('WOT Client Terminate: ' + 'True');
  end else
  begin
    AMemo.AddLine('WOT Client Terminate: ' + 'False');
  end;
  AMemo.AddLine('WOT Get Clients Count: ' + IntToStr(WOT_GetClientsCount));
  AMemo.AddLine('WOT Get Client Branch: ' + IntToStr(WOT_GetClientBranch(ClientIndex)));
  AMemo.AddLine('WOT Get Client Launcher Flavour: ' + IntToStr(WOT_GetClientLauncherFlavour(ClientIndex)));
  AMemo.AddLine('WOT Get Client Locale: ' + WOT_GetClientLocaleW(ClientIndex));
  AMemo.AddLine('WOT Get Client Path: ' + WOT_GetClientPathW(ClientIndex));
  AMemo.AddLine('WOT Get Client Path Mods: ' + WOT_GetClientPathModsW(ClientIndex));
  AMemo.AddLine('WOT Get Client Path Resmods: ' + WOT_GetClientPathResmodsW(ClientIndex));
  AMemo.AddLine('WOT Get Client Realm: ' + WOT_GetClientRealmW(ClientIndex));
  AMemo.AddLine('WOT Get Client Type: ' + IntToStr(WOT_GetClientType(ClientIndex)));
  AMemo.AddLine('WOT Get Client Vendor: ' + IntToStr(WOT_GetClientVendor(ClientIndex)));
  AMemo.AddLine('WOT Get Client Version: ' + WOT_GetClientVersionW(ClientIndex));
  AMemo.AddLine('WOT Get Client Exe Version: ' + WOT_GetClientExeVersionW(ClientIndex));
  AMemo.AddLine('WOT Client Get Record: ' + CLIENT_FormatString(CLIENT_GetRecord(ClientIndex)));
  ATimer.Enabled(False);
end;
OpenWG_Utils_Demo_FMX.7z
 
Последнее редактирование:

Salamandra

Новичок
OpenWG - WOT

Код:
procedure OnTimer(Sender: TObject);
var
  ClientIndex: Integer;
begin
  ClientIndex:= 0;
  AMemo.AddLine('WOT Add Client: ' + IntToStr(WOT_AddClientW(WOT_GetClientPathW(ClientIndex))));
  AMemo.AddLine('WOT Launcher Get Preferred Client: ' + IntToStr(WOT_LauncherGetPreferredClient(WOT_GetClientLauncherFlavour(ClientIndex))));
  AMemo.AddLine('WOT Launcher Rescan: ' + IntToStr(WOT_LauncherRescan));
  AMemo.AddLine('WOT Launcher Set Default: ' + IntToStr(WOT_LauncherSetDefault(WOT_GetClientVendor(ClientIndex), WOT_GetClientVendor(ClientIndex))));
  AMemo.AddLine('WOT Client Find: ' + IntToStr(WOT_ClientFind(WOT_GetClientPathW(ClientIndex))));
  if WOT_ClientIsStarted(ClientIndex) = True then
  begin
    AMemo.AddLine('WOT Client Is Started: ' + 'True');
  end else
  begin
    AMemo.AddLine('WOT Client Is Started: ' + 'False');
  end;
  if WOT_ClientIsVersionMatch(ClientIndex , WOT_GetClientVersionW(ClientIndex)) = True then
  begin
    AMemo.AddLine('WOT Client Is Version Match: ' + 'True');
  end else
  begin
    AMemo.AddLine('WOT Client Is Version Match: ' + 'False');
  end;
  if WOT_ClientTerminate(ClientIndex) = True then
  begin
    AMemo.AddLine('WOT Client Terminate: ' + 'True');
  end else
  begin
    AMemo.AddLine('WOT Client Terminate: ' + 'False');
  end;
  AMemo.AddLine('WOT Get Clients Count: ' + IntToStr(WOT_GetClientsCount));
  AMemo.AddLine('WOT Get Client Branch: ' + IntToStr(WOT_GetClientBranch(ClientIndex)));
  AMemo.AddLine('WOT Get Client Launcher Flavour: ' + IntToStr(WOT_GetClientLauncherFlavour(ClientIndex)));
  AMemo.AddLine('WOT Get Client Locale: ' + WOT_GetClientLocaleW(ClientIndex));
  AMemo.AddLine('WOT Get Client Path: ' + WOT_GetClientPathW(ClientIndex));
  AMemo.AddLine('WOT Get Client Path Mods: ' + WOT_GetClientPathModsW(ClientIndex));
  AMemo.AddLine('WOT Get Client Path Resmods: ' + WOT_GetClientPathResmodsW(ClientIndex));
  AMemo.AddLine('WOT Get Client Realm: ' + WOT_GetClientRealmW(ClientIndex));
  AMemo.AddLine('WOT Get Client Type: ' + IntToStr(WOT_GetClientType(ClientIndex)));
  AMemo.AddLine('WOT Get Client Vendor: ' + IntToStr(WOT_GetClientVendor(ClientIndex)));
  AMemo.AddLine('WOT Get Client Version: ' + WOT_GetClientVersionW(ClientIndex));
  AMemo.AddLine('WOT Get Client Exe Version: ' + WOT_GetClientExeVersionW(ClientIndex));
  AMemo.AddLine('WOT Client Get Record: ' + CLIENT_FormatString(CLIENT_GetRecord(ClientIndex)));
  ATimer.Enabled(False);
end;
OpenWG_Utils_Demo_FMX.7z
Тему брали с сайта Korean Random???
 

hitman797

Новичок
@hitman797 зачем ты это слил в паблик ??
Извини. ;(
А что плохого в том что человек решил поделиться скриптом адаптированным под FMX Для поиска игры Мир Танков?
Он является владельцем этого сценария. Мне следовало спросить его, прежде чем делиться сценарием. :scratchhead:
 

Salamandra

Новичок
Извини. ;(

Он является владельцем этого сценария. Мне следовало спросить его, прежде чем делиться сценарием. :scratchhead:
Так удалите тогда все равно те кто тут если и есть делает модпаки на стандартном инно ну кто то еще ботву2 задействует и использует оригинал OpenWG_Utils_Demo скачанный с сайта Korean Random где ее автор выкладывает. А этот вариант был переделан спецом под FMX audiofeel и возможно еще кем то, за что отдельная благодарность.
 
Сверху