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

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

LoWord [D6, Win2k]


Kair ©   (2004-06-07 20:16:00) 

TBtn = class(TXxxx)
...
property Id: Cardinal read FId;
...
end;

var
 Btn: TBtn;

function WndProc(); stdcall;
begin
...
bn_Clicked:
begin
 case LoWord(WParam) of
  Btn.Id: Beep(100, 100);  // Error: "Constant Expression Expected"
 end;
end;
...
end;

А если сделать if LoWord(WParam) = Btn.Id, то работает (т.е. Делфи дает запустить программу).


YuRock   (2004-06-07 23:45:00) [1]

> akvilon ©   (07.06.04 23:18) [2]

Да нет... Просто в условия case можно подставлять толькоконстанты...


akvilon   (2004-06-07 23:18:00) [2]

Btn.Id типа cardinal (4 байта !!!)
LoWord() -- 2 байта
вот она тебе и ругается на константе, значение которой может превышать то, что уложится в 2 байта (от LoWord)
а при if происходит "приведение" типов - сравниваются только 2 нижних байта от Btn.Id


YuRock   (2004-06-07 20:23:00) [3]

Дизассемблируй case..end, а затем if then begin end else if then ..., тогда поймешь разницу.


Наверх

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