Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.23;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2005.10.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.035 c
1-1128237757
тт
2005-10-02 11:22
2005.10.23
Подскажите ссылку на примеры(или хелп) работы с Word97-2000.


2-1127749588
erika
2005-09-26 19:46
2005.10.23
fb


11-1109010924
deniss
2005-02-21 21:35
2005.10.23
не могу найти стрелочный индикатор , сам пока не напишу :(


1-1128330841
Wolferio
2005-10-03 13:14
2005.10.23
Запуc приложения с параметрами


14-1128342412
oldman
2005-10-03 16:26
2005.10.23
У директора сломался факс :(