![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Битовые флаги [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;