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

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

Как проверять установлен флаг или нет [D2005, XP]


alex-drob ©   (2008-06-06 01:38:00) 

Есть такие констаны, флаги:
 MESSAGE_FLAG_OFFLINE = $00000001;
 MESSAGE_FLAG_NORECV = $00000004;
 MESSAGE_FLAG_AUTHORIZE = $00000008;
 MESSAGE_FLAG_SYSTEM = $00000040;
 MESSAGE_FLAG_RTF = $00000080;
 MESSAGE_FLAG_CONTACT = $00000200;
 MESSAGE_FLAG_NOTIFY = $00000400;
 MESSAGE_FLAG_MULTICAST = $00001000;
 MAX_MULTICAST_RECIPIENTS = 50;
 MESSAGE_USERFLAGS_MASK = $000036A8;
 MRIM_CS_MESSAGE_ACK = $1009;


и есть переменная flag:dword; в которой установленны какието из флагов. как проверить какие?
Если бы он мог быть один то можно былобы просто проверять

case flag of
MESSAGE_FLAG_NORECV: ...
....

а если сразу несколько флагов?


alex-drob   (2008-06-06 02:33:00) [1]

спасибо ещё раз!


Reindeer Moss Eater   (2008-06-06 02:29:00) [2]

if (mList.Flag and MESSAGE_FLAG_NOTIFY) = MESSAGE_FLAG_NOTIFY then


alex-drob   (2008-06-06 02:28:00) [3]

if (mList.Flag and MESSAGE_FLAG_NOTIFY)=MESSAGE_FLAG_NOTIFY then
то есть так?

спасибо большое всем за помощь!


Германн   (2008-06-06 02:25:00) [4]


> alex-drob ©   (06.06.08 02:19) [7]
>
> да я ему верю! а как мне теперь из интегера булеан получить?
>  ну или как по другому проверить установлены флаги или нет?
>
>

http://www.delphikingdom.com/lyceum/seminar.asp?ID=2


alex-drob   (2008-06-06 02:19:00) [5]

да я ему верю! а как мне теперь из интегера булеан получить? ну или как по другому проверить установлены флаги или нет?


Германн   (2008-06-06 02:14:00) [6]


> Reindeer Moss Eater ©   (06.06.08 02:11) [4]
>
> А ты верь ему. Должен быть булеан. А у тебя integer
>

И слава Борланду.


Германн   (2008-06-06 02:12:00) [7]


> то обе проверки
> if flag and MESSAGE_FLAG_OFFLINE then....
> if flag and MESSAGE_FLAG_RTF then....вернут выполнят действия
> после then?
>

Ни разу не пробовал, ну думая что вернут. Но это либо дурной вкус, либо полное непонимание.


Reindeer Moss Eater   (2008-06-06 02:11:00) [8]

А ты верь ему. Должен быть булеан. А у тебя integer


alex-drob   (2008-06-06 02:04:00) [9]

if mList.Flag and MESSAGE_FLAG_NOTIFY then

пишет ошибку
[Error] main.pas(144): E2012 Type of expression must be BOOLEAN


alex-drob   (2008-06-06 01:57:00) [10]

т.е. если например два флага установленны, ну предположем
MESSAGE_FLAG_OFFLINE = $00000001;
MESSAGE_FLAG_RTF = $00000080;


и у меня есть переменная flag=$0081

то обе проверки
if flag and MESSAGE_FLAG_OFFLINE then....
if flag and MESSAGE_FLAG_RTF then....
вернут выполнят действия после then?


Amoeba   (2008-06-06 01:45:00) [11]

Только для одного флага:
flag and MESSAGE_FLAG_OFFLINE

Для нескольких:
flag and (MESSAGE_FLAG_OFFLINE or MESSAGE_FLAG_NORECV or MESSAGE_FLAG_RTF)


Наверх

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