Главная страница
    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.053 c
14-1128000998
imbalancewc3
2005-09-29 17:36
2005.10.23
Помогите узнать название песни


2-1127742995
Гость22
2005-09-26 17:56
2005.10.23
Простой вопрос. Как с помощью SQL-запроса добавить поля втаблицу?


14-1128322503
syte_ser78
2005-10-03 10:55
2005.10.23
С чего начать написание клиента для phpbb форума?


11-1109449924
Shanker
2005-02-26 23:32
2005.10.23
Координаты окна, размер окна


1-1127929275
NikNet
2005-09-28 21:41
2005.10.23
Как правельнно пользоватся aplibu, как архивировать TMemoryStream





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