Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.16;
Скачать: CL | DM;

Вниз

Создание алгоритма для 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
7-50532
nokk9
2003-04-11 02:14
2003.06.16
Телефон


14-50434
Anics
2003-05-29 13:43
2003.06.16
Кто знает, есть ли такой компонент ?


6-50427
Rem100
2003-04-11 17:18
2003.06.16
Как отключить удаленных пользователей?


14-50526
Belkova
2003-05-31 21:55
2003.06.16
MainMenu


1-50271
Denwill
2003-06-03 08:53
2003.06.16
Как в Delphi создать панельки, такие как в MSOffice?