Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

LoWord   Найти похожие ветки 

 
Kair ©   (2004-06-07 20:16) [0]

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 20:23) [1]

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


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

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


 
YuRock ©   (2004-06-07 23:45) [3]

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

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



Страницы: 1 вся ветка

Текущий архив: 2004.07.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.047 c
14-1088168177
DeadMeat
2004-06-25 16:56
2004.07.18
Загадка


10-1020840236
Олег Лаукарт
2002-05-10 11:36
2004.07.18
Глюк в TSocketConnection и в клиенте (Midas, DCOM)


4-1086198608
Lessa
2004-06-02 21:50
2004.07.18
Кнопка ПУСК


14-1088245578
dzmitry[li]
2004-06-26 14:26
2004.07.18
статистика... траффика логических дисков...


3-1087998414
AlexG
2004-06-23 17:46
2004.07.18
Сохранение активности программы