1
Ваши вопросы / Re: Элемент Флажок
« : 18 Ноября 2025, 13:51:01 »
Здравствуйте.
Можно построить вектор состояния действий, в котором каждый бит соответствует одному действию и биты упорядочены справа-налево в порядке следования действий.
Пока порядок не нарушен, у каждого бита = 0 все "левые" соседи будут равны 0, что проверяется обычным сравнение целых чисел - значением вектора и 2 в степени номер бита + 1.
Скрипт изменилась основная переменная объекта "Флажок":
Уменьшить количество вызовов предыдущего скрипта на одно нажатие флажка (по числу флажков) можно до одного скрипта по изменению переменной (с потерей простого доступа к свойствам флажка):
Пример во вложении.
Можно построить вектор состояния действий, в котором каждый бит соответствует одному действию и биты упорядочены справа-налево в порядке следования действий.
Пока порядок не нарушен, у каждого бита = 0 все "левые" соседи будут равны 0, что проверяется обычным сравнение целых чисел - значением вектора и 2 в степени номер бита + 1.
Скрипт изменилась основная переменная объекта "Флажок":
Код: (delphi)
begin
with Sender as TM_CheckBox do
if (not Checked) and (AsInt >= Setbit(0, BitNumber + 1, true)) then // флажок не установлен, но есть "левые" установленные биты
Text1.Text := Text1.Text + Caption + ' пропущен' + #10;
end.
Код: (delphi)
begin
var i: integer;
b: boolean;
begin
with Sender as TM_Text do
begin
Text := '';
i := 0;
b := AsInt <> 0;
while b and (i < 31) do
begin
b := AsInt >= Setbit(0, i + 1, true); // признак наличия "левых"
if (not GetBit(AsInt, i)) and b then // флажок не установлен, но есть "левые" установленные биты
Text := Text + 'пропущен этап ' + IntToStr(i + 1) + #10;
i := i + 1;
end;
end;
end.