Форум: "Основная";
Текущий архив: 2003.06.16;
Скачать: [xml.tar.bz2];
ВнизСоздание алгоритма для CheckBox Найти похожие ветки
← →
Jaxtor (2003-06-03 11:32) [0]Всем День добрый!!! В программе моей должна быть визуализация значений CheckBox"ов используя двоичную систему исчисления. Привожу кусок программы для визуализации 3-х CheckBox"ов, для значения 2:
var CheckBoxVariable:TCheckBox;
...
CheckBoxVariable:=TCheckBox.Create(MainForm);
...
begin
n:=1;
PropertiesArray[2]:=2;
DescriptionCount:=3;
If (PropertiesArray[n+1]>2*(DescriptionCount-1)) or (PropertiesArr
ay[n+1]=2*(DescriptionCount-1)) then
CheckBoxVariable.Checked:=true else
CheckBoxVariable.Checked:=false;
dec(DescriptionCount);
end;
У меня стоит значение 2.
Если 2>=2^2; CheckBox1=Unchecked
Если 2>=2^1; CheckBox2=Checked
Если 2-2^1>=2^0; CheckBox3=UnChecked
Все бы хорошо, но как реализовать строчку 2-2^1?
Т.е. пока у меня считается последняя строчка как 2>=2^0, а надо
как 2-2^1>=2^0.
← →
Sandman25 (2003-06-03 11:39) [1]>надо как 2-2^1>=2^0.
Почему? Надо именно value >= 2^N, где N от 0 до 2
В чем смысл визуализации? Битовое представление?
← →
Jaxtor (2003-06-03 11:44) [2]Вот, допустим, визуализация числа 3:
3>=2^2 Unchecked
3>=2^1 Checked
3-2^1>=2^0 Checked.
Двоичная арифметика!
← →
Jaxtor (2003-06-03 11:50) [3]Тупо можно сделать:
Занести в массив значения(3,3,3)
и для последнего значения массива сделать как
3-2^1>=2^0. А для других значений: просто 3>=2^1 , 3>=2^2...
А по другому можно?
← →
Sandman25 (2003-06-03 12:01) [4]CB0.Checked := Value and (1 shl 0) > 0;
CB1.Checked := Value and (1 shl 1) > 0;
CB2.Checked := Value and (1 shl 2) > 0;
CB2 CB1 CB0
← →
Jaxtor (2003-06-03 12:19) [5]>Sandman25 Вроде правильно. Спасибо!
Еще маленький вопрос, а как заносить эти значения для твоего варианта?
Я сделал так:
MaxColumnCount:=50;
For i:=1 to 20 do begin
Ch[1]:=0;
Ch[2]:=0;
Ch[3]:=0;
Ch[4]:=0;
Cycle:=False;
For j:=1 to MaxColumnCount do
If not (ParametersForm.FindComponent("CheckBox"+ IntToStr(i)+LettersArray[j])=nil) then begin
If (ParametersForm.FindComponent("CheckBox"+ IntToStr(i)+LettersArray[j]) as TCheckBox).checked then Ch[j]:=1
else Ch[j]:=0;
Cycle:=True;
end;
If Cycle then CharacteristicsArray[i]:=1*Ch[1]+2*Ch[2]+4*Ch[3];
end;
Как избавиться от ошибки?
← →
Jaxtor (2003-06-03 12:26) [6]If Cycle then CharacteristicsArray[i]:=4*Ch[3]+2*Ch[2]+1*Ch[1];
При таком коде все работает для 3-х CheckBox"ов...
Проще нельзя?
← →
Sandman25 (2003-06-03 12:26) [7]for i:= 1 to 20 do
begin
CharacteristicsArray[i] := 0;
for j := 0 to MaxColumnCount-1 do
If ParametersForm.FindComponent("CheckBox"+ IntToStr(i)+LettersArray[j])<>nil then begin
If (ParametersForm.FindComponent("CheckBox"+ IntToStr(i)+LettersArray[j]) as TCheckBox).checked then
CharacteristicsArray[i]:= CharacteristicsArray[i] + 1 shl j;
end;
end;
← →
Sandman25 (2003-06-03 12:28) [8]Там немного подправить надо, но общую идею Вы можете понять.
← →
Jaxtor (2003-06-03 12:35) [9]>Sandman25
Спасибо. Операция shl почему-то напроч вылетела из моей головы...
← →
Sandman25 (2003-06-03 12:37) [10]Можно и без shl.
Перед внутренним циклом factor := 1;
внутри цикла factor := factor * 2; Хотя быстрее factor := factor shl 1;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c