Главная страница
    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.038 c
1-1106458556
Alex_pv2
2005-01-23 08:35
2005.02.06
hint для Items в ListBox


11-1089331291
Vladimyr
2004-07-09 04:01
2005.02.06
Rotated text - не вращается, хоть тресни...


3-1105333049
Владимир
2005-01-10 07:57
2005.02.06
Как сделать так, чтобы если при добавлении нового цвета в таблицу


14-1106199071
Бабу
2005-01-20 08:31
2005.02.06
только мне не видно?


14-1106125811
uny
2005-01-19 12:10
2005.02.06
почему она спрашивает?





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