Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.185.103] |
|
Сообщ.
#1
,
|
|
|
Почему я не могу поймать сообщение WM_NOTIFY? Какие возможные причины могуть быть?
WM_NOTIFY: case PNMHdr(lparam)^.code of PSN_APPLY: MessageBox(hwnd,buf,'',MB_OK); end; |
Сообщ.
#2
,
|
|
|
у меня так работает:
var nm:PNMHDR; ... WM_NOTIFY: begin nm:=PNMHDR(Lparam); if nm.code = TCN_SELCHANGE then begin ... end; end; ... |
Сообщ.
#3
,
|
|
|
Никак не хочет работать...
|
Сообщ.
#4
,
|
|
|
Вы б не могли представить рабочий фрагмент кода?
|
Сообщ.
#5
,
|
|
|
Цитата nrcu, 30.12.03, 11:59 Вы б не могли представить рабочий фрагмент кода? а в Сообщ. #2 что тогда? |
Сообщ.
#6
,
|
|
|
Имеется ввиду код программы. А то, может, я что-то с окном напутал?
|
Сообщ.
#7
,
|
|
|
ааа... понял что тебе надо...
WM_NOTIFY чего ты хотишь поймать я например ловил от WC_TABCONTROL, а ты? возможно у эл-та нотифи которого ты ловишь надо указать чтоб он эти нотифи посылал окну... |
Сообщ.
#8
,
|
|
|
Вот фрагмент моего кода... Возможно, я с главным окном нафурычил, т.к. сообщение WM_HOTKEY ловится вообще черт знает где???
var hWnd: THandle; WndClass: TWndClass; Msg: TMsg; TaskBarCreated: Integer; function WindowProc(hWnd: THandle; uMsg, wParam, lParam: Integer): Integer; stdcall; export; begin Result := 0; if uMsg = TaskBarCreated then TaskBarAddIcon(hWnd, ICON_OPEN, LoadIcon(hInstance, 'OPEN'), WM_ICON_OPEN, PChar(ShowHint)); //Сообщения от меню case uMsg of WM_COMMAND: case wParam of ID_SETTING: begin InitPropertySheet; PropertySheet(psh); end; WM_TIMER: if wParam = ID_TIMER_TRANSPARENT then if not GetTransparentText($FFFFFFFF) then TransparentText(False); // Остальные сообщения Windows WM_DESTROY: begin if SetTimer(hWnd, ID_TIMER_TRANSPARENT, 500, nil) <> 0 then KillTimer(hwnd, ID_TIMER_TRANSPARENT); PostQuitMessage(0); Exit; end; else Result := DefWindowProc(hWnd, uMsg, wParam, lParam); end; end; begin FillChar(WndClass, SizeOf(WndClass), 0); with WndClass do begin hInstance := SysInit.hInstance; lpszClassName := 'myWindow'; lpfnWndProc := @WindowProc; end; RegisterClass(WndClass); hWnd := CreateWindow('myWindow', '', 0, 0, 0, 0, 0, 0, 0, hInstance, NIL); if hWnd = 0 then begin if MessageBox(hwnd,'Error', '', MB_ICONERROR or MB_OK) = ID_OK then Exit; end; //Регистрация сообщения о перезапуске Explorer`а TaskBarCreated := RegisterWindowMessage('TaskbarCreated'); //Скрываем окно ShowWindow(hWnd, SW_HIDE); //Цикл обработки сообщений repeat waitMessage; while GetMessage(Msg, 0, 0, 0) do begin TranslateMessage(Msg); DispatchMessage(Msg); //Сообщение WM_HOTKEY я ловлю здесь, т.к. в окне WindowProc //оно не хочет ловится почему-то??? if msg.message = WM_HOTKEY then case msg.wParam of ID_HOTKEY_OPENTIME: MessageBox(hwnd, 'HOTKEY пойман!', '', MB_OK); end; end; Halt(Msg.wParam); until FALSE; end. |
Сообщ.
#9
,
|
|
|
или что-то не так или одно из двух - ну не вижу я WM_NOTIFY в приведенном коде
а про WM_HOTKEY - да, ты точно нахимичил что-т не то - в WindowProc должно ловится нормально... |
Сообщ.
#10
,
|
|
|
WM_NOTIFY я просто не представил, т.к. меня заинтересовал WM_HOTKEY. Думаю, что если будет ловиться WM_HOTKEY, то и WM_NOTIFY поймается.
|
Сообщ.
#11
,
|
|
|
ладно WM_HOTKEY - так WM_HOTKEY - вот мой пример по этому поводу:
так устанавливаю RegisterHotKey(wnd,100,0,VK_TAB); RegisterHotKey(wnd,101,0,VK_F1); RegisterHotKey(wnd,102,0,VK_F2); так ловлю WM_HOTKEY: begin case HiWord(Lparam) of VK_F1:...; VK_F2:...; VK_TAB:...; end; end; Result:=DefWindowProc(wnd,msg,wparam,lparam); end; так удаляю UnregisterHotKey(wnd,100); UnregisterHotKey(wnd,101); UnregisterHotKey(wnd,102); |
Сообщ.
#12
,
|
|
|
Это все понятно, но в окне WindowProc сообщение WM_HOTKEY не ловится.
|
Сообщ.
#13
,
|
|
|
у меня ловится
|
Сообщ.
#14
,
|
|
|
А как создается окно???
|
Сообщ.
#15
,
|
|
|
так:
MainWnd:=CreateWindowEx(WS_EX_WINDOWEDGE, wc.lpszClassName,'bla-bla-bla',WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX or WS_THICKFRAME, 0,0,300,200, 0,MainMenu,Hinstance, nil); что с этим могут быть траблы? |