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

Вниз

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

 
ShiFT   (2005-10-18 13:14) [0]

http://rsdn.ru/article/controls/WinHotkeyCtrl.xml
Случайно никто не переделывал под Delphi версию для WinAPI?

Меня интересует несколько строк которые я не смог перевести в Delphi
#define MAKEWHCDATA(vkCode, fModSet, fModRel, fIsPressed) \
   ((DWORD)(((BYTE)((DWORD_PTR)(vkCode) & 0xff)) | \
   (((DWORD)((BYTE)((DWORD_PTR)(fModSet) & 0xff))) << 8) | \
   (((DWORD)((BYTE)((DWORD_PTR)(fModRel) & 0xff))) << 16) | \
   (((DWORD)((BYTE)((DWORD_PTR)(fIsPressed) & 0xff))) << 24)))


SetWindowLongPtr(hwndWhc, GWLP_WNDPROC, (LONG)(LONG_PTR)(WNDPROC)_WinHotkeyCtrlProc);
почемуто не равно
SetWindowLong(hwndWhc, GWL_WNDPROC, Integer( @_WinHotkeyCtrlProc));

и

 UINT uMenuID = TrackPopupMenu( hmenu,
   TPM_RIGHTALIGN | TPM_RIGHTBUTTON | TPM_NONOTIFY | TPM_RETURNCMD,
   LOWORD(lParam), HIWORD(lParam), 0, hwnd, NULL);

 if (uMenuID && uMenuID < 256) {
   switch (uMenuID) {
//....
   }
 }

как TrackPopupMenu может возвращать Integer в то время когда он возвращает Boolean??
в MSDN нашел
Return Value
   If you specify TPM_RETURNCMD in the uFlags parameter, the return value is the menu-item identifier of the item that the user selected. If the user cancels the menu without making a selection, or if an error occurs, then the return value is zero.
   If you do not specify TPM_RETURNCMD in the uFlags parameter, the return value is nonzero if the function succeeds and zero if it fails. To get extended error information, call GetLastError.

и как это использовать в Delphi?

Вообщем направте на путь истенный. =)


 
ShiFT   (2005-10-18 13:24) [1]


> SetWindowLongPtr(hwndWhc, GWLP_WNDPROC, (LONG)(LONG_PTR)(WNDPROC)_WinHotkeyCtrlProc);

Может быть так???
 SetWindowLong( hwndWhc, GWL_WNDPROC, Integer( TFNWndProc( @_WinHotkeyCtrlProc)));


 
ShiFT   (2005-10-19 08:13) [2]

help


 
ShiFT   (2005-10-20 06:30) [3]

почему возникает ошибка Rantime error 216??

после этих строчек
 SetWindowLong( hwndWhc, GWL_WNDPROC, LongInt( @_WinHotkeyCtrlProc));
и
 SetWindowLong( hwndWhc, GWL_USERDATA, dwWhcData);


 
ShiFT   (2005-10-20 06:57) [4]

GWL_WNDPROC
   Sets a new address for the window procedure.
   Windows NT/2000/XP: You cannot change this attribute if the window does not belong to the same process as the calling thread.


но у меня ведь в том же процессе, в том же треде.

Как можно решить эту проблему????


 
Leonid Troyanovsky ©   (2005-10-20 10:00) [5]


> ShiFT   (20.10.05 06:30) [3]
> почему возникает ошибка Rantime error 216??
>
> после этих строчек
>  SetWindowLong( hwndWhc, GWL_WNDPROC, LongInt( @_WinHotkeyCtrlProc));
>


И чему равен hwndWhc?
И что значит после строчек?
Если они идут подряд, то, причина, возможно, в первой.
Скажем, неверное соглашение о вызове в WinHotKeyCtrlProc.
(д.б. function(..): LResult; stdcall;)

--
Regards, LVT.


 
ShiFT   (2005-10-20 10:44) [6]


> Скажем, неверное соглашение о вызове в WinHotKeyCtrlProc.
> (д.б. function(..): LResult; stdcall;)

А ведь в натуре. В этом была проблема. =(
Спасибо. Теперь работает.
А где можно прочитать об этих соглашениях о вызове??
Желательно на русском.



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

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

Наверх




Память: 0.48 MB
Время: 0.039 c
4-1129552219
ПЛОВ
2005-10-17 16:30
2005.12.18
Скорости, напряжения, температуры


3-1128086133
Ling
2005-09-30 17:15
2005.12.18
Сжать файлы и сохранить в BLOB


2-1133620282
haldey
2005-12-03 17:31
2005.12.18
Помогите с ComboBox


2-1133272643
FShadow
2005-11-29 16:57
2005.12.18
Как обновить програмно данные в TDBGrid после изменения данныхю.


5-1116931092
Priest
2005-05-24 14:38
2005.12.18
Для чего используется функция RegisterPropertyMapper