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