Показать сообщение отдельно
  #1  
Старый 02.11.2012, 01:54
митрийG митрийG вне форума
Прохожий
 
Регистрация: 27.10.2012
Сообщения: 12
Репутация: 10
По умолчанию преобразование двоичной в шестнадцатеричную (из чекбокс в едит)

Есть 16 чекбоксов по OnClic на любом из чекбоксов нужно преобразовать их состояние в шестнадцатеричную систему и поместить в Edit.text
я сделал это в лоб:
Код:
var
d:integer;
s:string;
begin
d:=0;

if SDIAppForm.CheckBox1.Checked  then d:=d+(1 shl 0) else d:=d+(0 shl 0);
if SDIAppForm.CheckBox2.Checked  then d:=d+(1 shl 1) else d:=d+(0 shl 1);
if SDIAppForm.CheckBox3.Checked  then d:=d+(1 shl 2) else d:=d+(0 shl 2);
if SDIAppForm.CheckBox4.Checked  then d:=d+(1 shl 3 ) else d:=d+(0 shl 3);
if SDIAppForm.CheckBox5.Checked  then d:=d+(1 shl 4 ) else d:=d+(0 shl 4);
if SDIAppForm.CheckBox6.Checked  then d:=d+(1 shl 5 ) else d:=d+(0 shl 5);
if SDIAppForm.CheckBox7.Checked  then d:=d+(1 shl 6 ) else d:=d+(0 shl 6);
if SDIAppForm.CheckBox8.Checked  then d:=d+(1 shl 7 ) else d:=d+(0 shl 7);
if SDIAppForm.CheckBox9.Checked  then d:=d+(1 shl 8 ) else d:=d+(0 shl 8);
if SDIAppForm.CheckBox10.Checked  then d:=d+(1 shl 9 ) else d:=d+(0 shl 9);
if SDIAppForm.CheckBox11.Checked  then d:=d+(1 shl 10 ) else d:=d+(0 shl 10);
if SDIAppForm.CheckBox12.Checked  then d:=d+(1 shl 11 ) else d:=d+(0 shl 11);
if SDIAppForm.CheckBox13.Checked  then d:=d+(1 shl 12 ) else d:=d+(0 shl 12);
if SDIAppForm.CheckBox14.Checked  then d:=d+(1 shl 13 ) else d:=d+(0 shl 13);
if SDIAppForm.CheckBox15.Checked  then d:=d+(1 shl 14 ) else d:=d+(0 shl 14);
if SDIAppForm.CheckBox16.Checked  then d:=d+(1 shl 15 ) else d:=d+(0 shl 15);

 s := Format('%0x',[d]);
 SDIAppForm.edit4.Text:=s;
может кто подскажет как это сделать более оптимально (с точки зрения количества строк текста - насколько экономичным будет код программы - неважно, это нужно для отладки)
Нужно будет делать и обратное преобразование (по OnExit преобразовывать из Edit.text и заполнять чекбоксы, но над этим я пока не думал)
Ответить с цитированием