Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Битовые флаги [D7]


QAT ©   (2008-03-25 18:57:00) 

Совсем запутался. Например у меня есть DWord, задача сохранить в него состояние двух CheckBox'ов при помощи битовых флагов. И потом считать их.

MyDWord := MyDWord xor ($0001 and Word(WordBool(CheckBox1.Checked)));
MyDWord := MyDWord xor ($0002 and Word(WordBool(CheckBox2.Checked)));


Я хочу в зависимости от состояния CheckBox'ов, либо установить например $0001 во флаге, либо убрать его. Как это сделать?

И как сичтывать надо такие данные, что бы потом по DWord'у восстановить состояние CheckBox'ов?

Спасибо.


Anatoly Podgoretsky   (2008-03-25 21:49:00) [1]

http://www.podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Delphi/Podgoretsky/bits.html&file_id=app-bits


Anatoly Podgoretsky   (2008-03-25 21:48:00) [2]

> Германн  (25.03.2008 19:12:05)  [5]

Не потеряем, у него 30 бит не используются, по этому достаточно масок 1,2 и 2, 1 соответственно


Anatoly Podgoretsky   (2008-03-25 21:46:00) [3]

> Reindeer Moss Eater  (25.03.2008 19:08:04)  [4]

Вообще то и байта очень много.


Семеныч   (2008-03-25 19:32:00) [4]

Вдогонку: [6] - это если можно менять другие биты. А если нельзя, то cохранять надо так:
MyDWord := MyWord and $FFFFFFFС or (DWord(CheckBox2.Checked) shl 1) or DWord(CheckBox1.Checked);


Семеныч   (2008-03-25 19:13:00) [5]

Сохранение:
MyDWord := (Byte(CheckBox2.Checked) shl 1) or Byte(CheckBox1.Checked);

Чтение:
CheckBox1.Checked := (MyDWord and 1) <> 0;
CheckBox2.Checked := (MyDWord and 2) <> 0;


Германн   (2008-03-25 19:12:00) [6]


> Reindeer Moss Eater ©   (25.03.08 19:05) [3]
>
> else MyDWord := MyDWord and $FFFE;
>
> Старшее слово потеряем.
>

Ага. Не обратил внимания на DWord.


Reindeer Moss Eater   (2008-03-25 19:08:00) [7]

хотя если чекбоксов два ....
но тогда и байта вместо дворда за глаза.....


Reindeer Moss Eater   (2008-03-25 19:05:00) [8]

else MyDWord := MyDWord and $FFFE;

Старшее слово потеряем.


Германн   (2008-03-25 19:03:00) [9]

if CheckBox1.Checked then MyDWord := MyDWord or $0001
else MyDWord := MyDWord and $FFFE;


Reindeer Moss Eater   (2008-03-25 19:02:00) [10]

Примерно так:

if cb1.Checked then MyDword := (MyDword or 1) else (MyDword := MyDword and $FFFFFFFE);

cb1.Checked := (MyDWORD and 1) = 1;


Наверх

Титульная страница Поиск, карта сайта Написать письмо