Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.

я сделал по такому принципу но это слишком громозко по коду получается. мне бы как то это дело сократить и минимизировать максимально. у меня таких просто и по 20 штук будет например в разделе боевые моды и потом ангарные . потом еще и дополнительные модификации и того там получится капец как много кода. вот и ищу способ как такого же результата добиться но максимально сокращенно.Смотрю на ваш скриншот и не могу понять, какие же действия предусмотрены для главного чекбокса.
И какие действия предусмотрены для дочерних чекбоксов.
если отмечаю главный чекбокс то и первый дочерний с ним отмечается, другие по выбору пользователя если я снимаю с главного чекбокса то со всех выбранных тоже снимается. если я снимаю со всех дочерних чекбоксов то и с главного тоже снимаетсяЯ вас спросил не об этом, много или мало у вас будет чекбоксов, а отом какие функции будет выполнять главный и дочерние чеки.
Мысль ваша понятна, но только как вы хотите так работают радиобатоны, чекбоксы работают сами по себе.
[Setup]
AppName=ISSprite
AppVername=0.1
AppPublisher=Shegorat
OutputBaseFilename=Example
DefaultDirName={sd}\Example
DisableWelcomePage=False
OutputDir=.
[Files]
Source: "Files\*"; Flags: "dontcopy";
Source: "fmt\btn\Btn_03.png"; Flags: "dontcopy";
Source: "fmt\btn\Btn_04.png"; Flags: "dontcopy";
[Modules]
#include "Modules\ISSprite.iss"
[Code]
var
bn: array of HWND;
procedure ClickHandler(Btn: HWND; Event: Word);
var
i, idx, cnt: Integer;
begin
idx:= -1;
for i:= 0 to High(bn) do
if bn[i] = Btn then begin
idx:= i;
Break;
end;
if idx = 0 then begin
for i:= 1 to High(bn) do
if spBtnGetChecked(bn[i]) <> 1 then begin
for i:= 1 to High(bn) do spBtnSetChecked(bn[i], 1);
spBtnSetChecked(bn[0], 2);
spApplyChanges(spBtnGetParent(Btn));
Exit;
end;
for i:= 1 to High(bn) do spBtnSetChecked(bn[i], 0);
spBtnSetChecked(bn[0], 0);
end else if idx > 0 then begin
cnt:= 0;
for i:= 1 to High(bn) do if spBtnGetChecked(bn[i]) = 1 then Inc(cnt);
if cnt = 0 then spBtnSetChecked(bn[0], 0)
else if cnt = High(bn) then spBtnSetChecked(bn[0], 2)
else spBtnSetChecked(bn[0], 1);
end;
spApplyChanges(spBtnGetParent(Btn));
end;
procedure InitializeWizard;
var
i: Integer;
begin
with WizardForm do
begin
OuterNotebook.Hide;
Bevel.Hide;
Width:= 700;
Height:= 540;
Color:= $2C2C2C;
Position:= poScreenCenter;
spInitialize(False, False);
SetArrayLength(bn, 5);
for i:= 0 to High(bn) do begin
if i = 0 then begin
bn[i]:= spBtnCreate(Handle, 'Btn_04.png', 30, 50, 80, 20, BTN_CHECKBOXEX, 0);
spBtnSetText(bn[0], 'parent');
end else begin
bn[i]:= spBtnCreate(Handle, 'Btn_03.png', 50, 50+30*i, 80, 20, BTN_CHECKBOX, 0);
spBtnSetText(bn[i], 'child ' + IntToStr(i));
end;
spBtnSetFontColor(bn[i], $CCFF33, $999966, $FFFFFF, $444444);
spBtnSetEvent(bn[i], spMouseClick, @ClickHandler);
spBtnSetFont(bn[i], Font.Handle);
end;
CancelButton.Left:= (ClientWidth-CancelButton.Width)-20;
CancelButton.Top:= (ClientHeight-CancelButton.Height)-20;
PostMessage(NextButton.Handle, $10, 0, 0);
spApplyChanges(Handle);
end;
end;
procedure DeinitializeSetup;
begin
spShutdown;
end;
Примерно такесли отмечаю главный чекбокс то и первый дочерний с ним отмечается, другие по выбору пользователя если я снимаю с главного чекбокса то со всех выбранных тоже снимается. если я снимаю со всех дочерних чекбоксов то и с главного тоже снимается
function GetCheckIndex(Sender: TObject): Integer;
var
i: Integer;
begin
Result:= -1;
for i := 3 to 8 do
if Sender = TObject(ModCheckBox[i].GetObject) then
begin
Result:= i;
Break;
end;
end;
procedure CheckBoxOnChange(Sender: TObject);
var
i, Idx: Integer;
AnyChecked: Boolean;
begin
Idx:= GetCheckIndex(Sender);
if Idx = 3 then
begin
if ModCheckBox[3].IsChecked then
begin
if not ModCheckBox[4].IsChecked then
ModCheckBox[4].SetChecked(True);
end else
begin
for i:= 4 to 8 do
ModCheckBox[i].SetChecked(False);
end;
Exit;
end;
AnyChecked:= False;
for i:= 4 to 8 do
if ModCheckBox[i].IsChecked then
begin
AnyChecked:= True;
Break;
end;
if not AnyChecked then
ModCheckBox[3].SetChecked(False);
end;