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

Вниз

Как запихнуть LongWord в LongInt ?   Найти похожие ветки 

 
ANB ©   (2006-03-02 14:36) [0]

Имею объявление функции :
function SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;

Мне нужно передать в lParam хендл окна, а оно LongWord, т.е. может быть длиннее 2147483648. Такое число в LongInt не лезет. LParam объявлено как LongInt.

И таки я нарвался на ошибку :

При вызове :
  SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, SC_HOTKEY, hMainWindow); // Один из способов поднять окно на верхний план.
если в hMainWindow число 2147483648, происходит ошибка Range Check Error. Как ее забороть ?


 
umbra ©   (2006-03-02 14:56) [1]

а вообще реально иметь столько окон в системе?
а по сабжу - в свойствах проекта на закладке Compiler в группе Runtime errors убрать галку Range Checking


 
begin...end ©   (2006-03-02 14:59) [2]

LPARAM(hMainWindow). Или отключить Range Checking.


 
MBo ©   (2006-03-02 15:00) [3]

просто привести тип не поможет?
Integer(DwordVar)
однако странно, что хэндл окна может вылезать за MaxInt


 
ANB ©   (2006-03-02 15:06) [4]

Так. Поясняю.
1. Реальный хендл вышел за maxint.
2.Отключать Range Checking неохота, т.к. ошибка может вылезти в другом месте, а пропускать их как то нехочется. Софт то еще дописывается.
3. Задачу решил, правда некузяво, так :

Объявил в интерфейсе

function SendMessageDWord(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: DWord): LRESULT; stdcall;

В реализации

function SendMessageDWord; external user32 name "SendMessageA";

Ну и в коде заменил вызов на новую функцию. Ошибка больше не лезет.

Если кто знает решение лучше - плиз, подскажите.


 
umbra ©   (2006-03-02 15:09) [5]

отключить Range Checking для вызова этой функции, Т.е. перед вызовом написать {$R-}, а после него {$R+}


 
begin...end ©   (2006-03-02 15:12) [6]

> ANB ©   (02.03.06 15:06) [4]

Не совсем понятно, почему не подошло [2] или [3].


 
ANB ©   (2006-03-02 15:12) [7]


> Integer(DwordVar)

Думаю, простым приведением вряд ли обойдемся, т.к. делфа сама неявно должна была приводить и словила ошибку.


 
ANB ©   (2006-03-02 15:13) [8]


> Не совсем понятно, почему не подошло [2] или [3].

Хотя ща попробую . . .


 
ANB ©   (2006-03-02 15:15) [9]

Я был не прав - приведение работает.



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

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

Наверх




Память: 0.48 MB
Время: 0.033 c
2-1141648283
mrAndersen
2006-03-06 15:31
2006.03.19
Работа с текстом в файле.


15-1140901823
unknown
2006-02-26 00:10
2006.03.19
При смене материнской платы придётся покупать Windows


1-1139933625
Robert
2006-02-14 19:13
2006.03.19
Richedit добавить текст в гиперссылку


15-1141033381
DelphiN!
2006-02-27 12:43
2006.03.19
Контроль печати на принтере


2-1141457905
Piero
2006-03-04 10:38
2006.03.19
Строки в TMemo разных цветов