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

Вниз

Dialog+WM_KEYDOWN   Найти похожие ветки 

 
i-s-v ©   (2005-08-18 02:14) [0]

Есть окно диалога, созданного ф-цией DialogBoxParam. Как перехватить сообщение WM_KEYDOWN для контрола на этом диалоге (например, для EDIT"a)?


 
Leonid Troyanovsky ©   (2005-08-18 08:47) [1]


> i-s-v ©   (18.08.05 02:14)  
> Есть окно диалога, созданного ф-цией DialogBoxParam. Как
> перехватить сообщение WM_KEYDOWN для контрола на этом диалоге
> (например, для EDIT"a)?


Сабкласcировать окно оного EDIT.
{RTFM: Subclassing a Window}.

--
Regards, LVT.


 
alpet ©   (2005-08-18 09:14) [2]

Или вписать обработку сообщения в цикл сообщений, хотя это нестандартно.
Код выглядит примерно так:

while (IsWindow (hDlg) and GetMessage (Msg, 0, 0, 0) ) do
begin
 if (Msg.Message = WM_KEYDOWN) and (Msg.hWnd = hEdit1) then  
     OnKeyDown_edit;
 TranslateMessage (Msg);
 DispatchMessage (Msg);
end;


А чем не подходит обработка EN_CHANGE?


 
Игорь Шевченко ©   (2005-08-18 11:42) [3]

Leonid Troyanovsky ©   (18.08.05 08:47) [1]

Еще только видя заголовок и начало первого поста в ветке, у меня уже сложился ответ. Слово в слово с постом [1] :)


 
Leonid Troyanovsky ©   (2005-08-18 13:42) [4]


> Игорь Шевченко ©   (18.08.05 11:42) [3]

> Еще только видя заголовок и начало первого поста в ветке,
> у меня уже сложился ответ. Слово в слово с постом [1] :)


Повторение - мать учения, и бабушка скуки :)

--
Regards, LVT.


 
i-s-v ©   (2005-08-20 00:57) [5]

Thanks!

А чем не подходит обработка EN_CHANGE?
Нужно отловить нажатие клавиш Enter, Up, Down...


 
Вжжжик   (2005-08-22 02:22) [6]

Игорь Шевченко ©   (18.08.05 11:42) [3]

>> Еще только видя заголовок и начало первого поста в ветке, у
>> меня уже сложился ответ. Слово в слово с постом [1] :)

неправильный у Вас сложился ответ.


type
 TForm1 = class(TForm)
   Edit1: TEdit;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   OldOnMsg : TMessageEvent;
   procedure OnMessage(var Msg: TMsg; var Handled: Boolean);
 end;

procedure TForm1.OnMessage(var Msg: TMsg; var Handled: Boolean);
begin
 if ((Msg.hwnd = Edit1.Handle) and (Msg.message = WM_KEYDOWN)) then
   begin
     // здесь делаете обработку WM_KEYDOWN для Вашего Edit1
   end;

 // как правило Application.OnMessage не определён по-умолчанию,
 // но всё же...
 if Assigned(OldOnMsg) then
   OldOnMsg(Msg, Handled);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 OldOnMsg:=Application.OnMessage;
 Application.OnMessage:=OnMessage;
end;



 
Вжжжик   (2005-08-22 02:28) [7]

Не заметил что речь о диалоге. В этом случае решение
 
 alpet ©   (18.08.05 09:14) [2]
 
предпочтительнее. оно в сущности отличается только по форме от установки Application.OnMessage.


 
Leonid Troyanovsky ©   (2005-08-22 08:44) [8]


> Вжжжик   (22.08.05 02:28) [7]
> Не заметил что речь о диалоге. В этом случае решение
>  
>  alpet ©   (18.08.05 09:14) [2]
>  
> предпочтительнее. оно в сущности отличается только по форме
> от установки Application.OnMessage.


В сущности EN_CHANGE отличается от WM_KEYDOWN.

--
Regards, LVT.


 
Вжжжик   (2005-08-22 10:34) [9]

а причем тут EN_CHANGE? я про него ни словом не обмолвился..


 
Игорь Шевченко ©   (2005-08-22 10:38) [10]

Вжжжик   (22.08.05 02:22) [6]


> неправильный у Вас сложился ответ.


Долго и утомительно читаем самый первый пост:


> Есть окно диалога, созданного ф-цией DialogBoxParam


Отвечаем себе, как же нам перехватить сообщение, посланное edit-контролу в диалоговом окне, где нету никаких TForm, TApplication и даже TEdit ?

Роясь в памяти, вспоминаем дедушку Windows-программирования Чарльза Петцольда и видим, что наилучшим способом является сабклассинг :)

Удачи!


 
Leonid Troyanovsky ©   (2005-08-22 11:05) [11]


> Вжжжик   (22.08.05 10:34) [9]
> а причем тут EN_CHANGE? я про него ни словом не обмолвился..


А откуда я знаю кто о чем обмолвился.
Если речь про нестандартное, то оно уж очень нестандартное,
тем более, что такой цикл для диалогов неверен.

--
Regards, LVT.



Страницы: 1 вся ветка

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

Наверх





Память: 0.47 MB
Время: 0.043 c
2-1128174460
NightLord
2005-10-01 17:47
2005.10.23
Программное создание компонента


1-1128105720
Volf_555
2005-09-30 22:42
2005.10.23
Проблема с временем


14-1127820717
Del_programmer
2005-09-27 15:31
2005.10.23
Builder X - за и против!


4-1124645216
SpyBoy
2005-08-21 21:26
2005.10.23
Injecting


1-1128015457
Volf_555
2005-09-29 21:37
2005.10.23
Как в RUN-TIME добавить новую вкладку в TPageControl?





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