Текущий архив: 2005.02.06;
Скачать: CL | DM;
Вниз
Как работает DefWindowProc? Найти похожие ветки
← →
Bless © (2004-12-20 17:51) [0]Почему код в Делфи
callWindowProc(DefWndProc, edit1.handle, 256, 40, 22020097);
//256 - WM_KEYDOWN
не приводит к возникновению события Edit1.OnKeyDown?
← →
Игорь Шевченко © (2004-12-20 18:00) [1]Edit1.Perform (нужное сообщение, нужные параметры) не поможет ?
С уважением,
← →
Bless © (2004-12-20 20:22) [2]Поможет, конечно. Но мне не надо. :)
Просто столкнулся с ситуацией, когда в отладке, нажав f7 на строчке
callWindowProc(DefWndProc, edit1.handle, 256, 40, 22020097); внутри procedure TWinControl.DefaultHandler(var Message);
попал в procedure TWinControl.MainWndProc(var Message: TMessage);
из чего я сделал вывод, что DefWndProc сгенерировала непонятно с чего вдруг событие WM_KILLFOCUS(это для компонента TDBEditEh. Для стандартного TEdit или TDbEdit в аналогичной ситуации на той самой строчке отрабатывает как и ожидалось, без генерации всяких событий). А вызвав такую же строчку callWindowProc(DefWndProc, edit1.handle, 256, 40, 22020097); явно из программы (по таймеру, чтоб фокус не двигать), никакого события не получил. Вот сижу теперь и думаю, почему DefWndProc себя так загадочно ведет и от чего это зависит.
← →
Bless © (2004-12-20 20:26) [3]Bless [2]> Напутал с тегами.
Хотел так:
Поможет, конечно. Но мне не надо. :)
Просто столкнулся с ситуацией, когда в отладке, нажав f7 на строчкеcallWindowProc(DefWndProc, edit1.handle, 256, 40, 22020097);
внутриprocedure TWinControl.DefaultHandler(var Message);
попал в procedureTWinControl.MainWndProc(var Message: TMessage);
из чего я сделал вывод, что DefWndProc сгенерировала непонятно с чего вдруг событие WM_KILLFOCUS(это для компонента TDBEditEh. Для стандартного TEdit или TDbEdit в аналогичной ситуации на той самой строчке отрабатывает как и ожидалось, без генерации всяких событий). А вызвав такую же строчкуcallWindowProc(DefWndProc, edit1.handle, 256, 40, 22020097);
явно из программы (по таймеру, чтоб фокус не двигать), никакого события не получил. Вот сижу теперь и думаю, почему DefWndProc себя так загадочно ведет и от чего это зависит.
← →
Leonid Troyanovsky © (2004-12-20 21:09) [4]
> Просто столкнулся с ситуацией, когда в отладке, нажав f7
> на строчке
> callWindowProc(DefWndProc, edit1.handle, 256, 40, 22020097);
> внутри procedure TWinControl.DefaultHandler(var Message);
> попал в procedure TWinControl.MainWndProc(var Message: TMessage);
> из чего я сделал вывод, что DefWndProc сгенерировала непонятно
> с чего вдруг событие WM_KILLFOCUS(это для компонента TDBEditEh.
> Для стандартного TEdit или TDbEdit в аналогичной ситуации
> на той самой строчке отрабатывает как и ожидалось, без генерации
> всяких событий). А вызвав такую же строчку callWindowProc(DefWndProc,
> edit1.handle, 256, 40, 22020097); явно из программы (по
> таймеру, чтоб фокус не двигать), никакого события не получил.
> Вот сижу теперь и думаю, почему DefWndProc себя так загадочно
> ведет и от чего это зависит.
DefWndProc, в данном случае, это процедура окна формы.
Если хотелось вызывать оконную процедуру EDIT, то получать
ее следует путем GetWindowLong(edit1.handle, GWL_WNDPROC).
Да и, вообще, что это за 256, 40, 22020097?
Пользуй константы, а то через пару недель забудешь что это.
--
С уважением, LVT.
← →
Bless © (2004-12-21 09:26) [5]Leonid Troyanovsky © (20.12.04 21:09) [4]>
>DefWndProc, в данном случае, это процедура окна формы.
А вот за это замечание спасибо! А то я хотел уже было опровергнуть, но на всякий случай решил проверить.
Оказалось, я упустил из виду, что procedure CreateParams - виртуальная.
Просто я глянул, что в ТControl
FDefWndProc := WindowClass.lpfnWndProc;
...
procedure TWinControl.CreateParams(var Params: TCreateParams);
begin
...
WindowClass.lpfnWndProc := @DefWindowProc;...
...
end;
...
function DefWindowProc; external user32 name "DefWindowProcA"
и ввел себя в заблуждение. Еще раз спасибо, теперь опять есть куда думать.
Страницы: 1 вся ветка
Текущий архив: 2005.02.06;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.026 c