Текущий архив: 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.47 MB
Время: 0.038 c