Конференция "Начинающим" » Битовые флаги [D7]
 
  • QAT (25.03.08 18:57) [0]
    Совсем запутался. Например у меня есть DWord, задача сохранить в него состояние двух CheckBox'ов при помощи битовых флагов. И потом считать их.

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



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

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

    Спасибо.
  • Reindeer Moss Eater © (25.03.08 19:02) [1]
    Примерно так:

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

    cb1.Checked := (MyDWORD and 1) = 1;
  • Германн © (25.03.08 19:03) [2]
    if CheckBox1.Checked then MyDWord := MyDWord or $0001
    else MyDWord := MyDWord and $FFFE;

  • Reindeer Moss Eater © (25.03.08 19:05) [3]
    else MyDWord := MyDWord and $FFFE;

    Старшее слово потеряем.
  • Reindeer Moss Eater © (25.03.08 19:08) [4]
    хотя если чекбоксов два ....
    но тогда и байта вместо дворда за глаза.....
  • Германн © (25.03.08 19:12) [5]

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

    Ага. Не обратил внимания на DWord.
  • Семеныч (25.03.08 19:13) [6]
    Сохранение:
    MyDWord := (Byte(CheckBox2.Checked) shl 1) or Byte(CheckBox1.Checked);

    Чтение:
    CheckBox1.Checked := (MyDWord and 1) <> 0;
    CheckBox2.Checked := (MyDWord and 2) <> 0;
 
Конференция "Начинающим" » Битовые флаги [D7]
Есть новые Нет новых   [134433   +25][b:0][p:0.001]