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

Вниз

Как работает 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);
попал в procedure TWinControl.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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.049 c
3-1105395316
Nata
2005-01-11 01:15
2005.02.06
dbgrid сортировка


8-1098332767
vg
2004-10-21 08:26
2005.02.06
Помогите в винде "содрать" рисунок.


1-1106291216
Бизон
2005-01-21 10:06
2005.02.06
Доступ к функциям MSWORD из Delphi


1-1106458556
Alex_pv2
2005-01-23 08:35
2005.02.06
hint для Items в ListBox


1-1106259842
Bobby Digital
2005-01-21 01:24
2005.02.06
StringGird pt2





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский