Главная страница
    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.035 c
14-1127374560
Kolan
2005-09-22 11:36
2005.10.23
Как найти утечку память с помощью MemProof


2-1128086497
MacCybex
2005-09-30 17:21
2005.10.23
В названиях сообщений высвечивается старое название проекта!


2-1126844211
Annet
2005-09-16 08:16
2005.10.23
DBF


14-1128316485
Ega23
2005-10-03 09:14
2005.10.23
С днем рождения! 3 октября


1-1127978088
Friend
2005-09-29 11:14
2005.10.23
res файл





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