Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Вниз

Как запихнуть 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.014 c
15-1140795075
Piter
2006-02-24 18:31
2006.03.19
Как вытащить данные с CD-RW, которой сделали "Быструю очистку"?


8-1128443263
Silver...
2005-10-04 20:27
2006.03.19
Распознование картинки


1-1139832920
аноним
2006-02-13 15:15
2006.03.19
gdi+ и ActiveX


2-1141048637
Hadroran
2006-02-27 16:57
2006.03.19
Обновление с проблемой


2-1141386799
DancerMan
2006-03-03 14:53
2006.03.19
Table+DBGrid ins вставляемую запись отобразить в гриде последней





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский