Форум: "WinAPI";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.033 c