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

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

Как корректно сравнить/присвоить Longint с Сишными TRUE и FALSE? [D7, XP]


Незарегистрированный ©   (2016-02-15 17:46:00) 

У меня довольно глупый вопрос по WinAPI... Точнее как с Си переводится на паскаль...

Вот что написано в доках:


> When the wParam parameter is FALSE,
> an application should return TRUE to бла-бла,
> or it should return FALSE to бла-бла-бла.


Делаю так:

if wParam=0 then result:=1;

Поведение вообще не такое как должно быть.
Си не изучал, только синтаксис понимаю. Подскажите пожалуйста - как правильно отобразить Сишные TRUE и FALSE в Паскаль?


Игорь Шевченко   (2016-02-15 21:41:00) [1]


> Делаю так:
>
> if wParam=0 then result:=1;


Правильно делаешь


> Поведение вообще не такое как должно быть.


значит ошибка в другом месте


sniknik   (2016-02-15 21:23:00) [2]

> Или вы так предлагаете?:
> if wParam=Integer(BOOL(False)) then result:=Integer(BOOL(True));
просто
if wParam=Integer(False) then result:=Integer(True);

> Всё равно нет нужного поведения...
значения в коде выше смотрел?


Незарегистрированный   (2016-02-15 19:09:00) [3]

> не поверишь... пиши true и false будет однозначно.

wParam это WPARAM это Longint
result это LRESULT это тоже Longint
Просто "пиши true и false" даёт "Incompatible types: 'Integer' and 'Boolean'".

Или вы так предлагаете?:

if wParam=Integer(BOOL(False)) then result:=Integer(BOOL(True));

Всё равно нет нужного поведения...
гм. Перепишу-ка на Си, посмотрю как там будет работать. Может в доках опечатка?


sniknik   (2016-02-15 18:54:00) [4]

> и всякие экзотические варианты, например, когда TRUE это -1...
дельфя -
 Memo1.Lines.Add(IntToStr(Integer(boolean(true))));
 Memo1.Lines.Add(IntToStr(Integer(boolean(false))));
 Memo1.Lines.Add(IntToStr(Integer(BOOL(true))));
 Memo1.Lines.Add(IntToStr(Integer(BOOL(false))));

> как правильно отобразить Сишные TRUE и FALSE в Паскаль
не поверишь... пиши true и false будет однозначно.


Dimka Maslov   (2016-02-15 18:44:00) [5]

Бывают разные случаи.

1. FALSE это нуль, TRUE это не нуль (обычно это тип BOOL)
2. FALSE это нулевой первый бит, TRUE это единичный первый бит, в старших битах может быть что угодно (обычно это тип bool)

и всякие экзотические варианты, например, когда TRUE это -1...


Наверх

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