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

Вниз

Как ловить сообщение, но не от формы, а от компонента   Найти похожие ветки 

 
Андрей Молчанов   (2005-08-07 19:46) [0]

Подскажите сабж пожалуйста.


 
3DxFantastika ©   (2005-08-07 19:48) [1]

какого типа сообщение?


 
Андрей Молчанов   (2005-08-07 19:53) [2]


> какого типа сообщение?

WM_Char


 
Юрий Зотов ©   (2005-08-07 20:13) [3]

Обычным образом. Получателю без разницы, кем послано сообщение.


 
Leonid Troyanovsky ©   (2005-08-07 20:18) [4]


> Андрей Молчанов   (07.08.05 19:53) [2]
>
> > какого типа сообщение?
>
> WM_Char


Обычно такие компоненты есть TWinControl.
Но, даже если б он был TControl, то можно б было подменить
ему WindowProc {:TWndMethod} на свою.
Не забывай только про вызов старой процедуры.

--
Regards, LVT.


 
Андрей Молчанов   (2005-08-07 20:24) [5]

Компонент - TTreeView. Надо это чтобы отключить озвучивание клавиши Space. Но как пользоваться этим WindowProc?


 
Leonid Troyanovsky ©   (2005-08-07 20:31) [6]


> Андрей Молчанов   (07.08.05 20:24) [5]
> Компонент - TTreeView. Надо это чтобы отключить озвучивание
> клавиши Space. Но как пользоваться этим WindowProc?


Как пользоваться есть пример даже в хелпе.
Как отключать - если ты уверен, что пробел тебе не нужен, то
при обработке его WM_CHAR не вызывай старую (замененную)процедуру.

--
Regards, LVT.


 
begin...end ©   (2005-08-07 20:40) [7]

> Андрей Молчанов   (07.08.05 20:24) [5]

> Но как пользоваться этим WindowProc?

type
 TMyForm = class(TForm)
   TreeView: TTreeView;
   procedure FormCreate(Sender: TObject);
 private
   OldWndProc: TWndMethod;
   procedure NewWndProc(var Message: TMessage);
 public
 end;

...

procedure TMyForm.NewWndProc(var Message: TMessage);
begin
 with Message do
   if (Msg = WM_CHAR) and (WParam = 32) then
     Beep;
 OldWndProc(Message)
end;

procedure TMyForm.FormCreate(Sender: TObject);
begin
 OldWndProc := TreeView.WindowProc;
 TreeView.WindowProc := NewWndProc;
end


 
begin...end ©   (2005-08-07 20:47) [8]

> Андрей Молчанов   (07.08.05 20:24) [5]

> Надо это чтобы отключить озвучивание клавиши Space.

Пардон, сразу не заметил. Тогда так:

procedure TMyForm.NewWndProc(var Message: TMessage);
begin
 with Message do
   if not ((Msg = WM_CHAR) and (WParam = 32)) then
     OldWndProc(Message)
end


Что и было сказано в [6].


 
Leonid Troyanovsky ©   (2005-08-07 20:47) [9]


> begin...end ©   (07.08.05 20:40) [7]

>  with Message do
>    if (Msg = WM_CHAR) and (WParam = 32) then
>      Beep;
>  OldWndProc(Message)
> end;


Если не озвучивать, то

   if not ((Msg = WM_CHAR) and (WParam = VK_SPACE)) then
     OldWndProc(Message);

--
Regards, LVT.


 
Андрей Молчанов   (2005-08-07 21:01) [10]

А-а, все вспомнил про что Вы. Только вот, я раньше где такое видел - тас везде вроде было SetWindowLong и в FormDestroy все возвращалось обратно. Здесь такого не нужно?


 
Leonid Troyanovsky ©   (2005-08-07 21:08) [11]


> Андрей Молчанов   (07.08.05 21:01) [10]
> А-а, все вспомнил про что Вы. Только вот, я раньше где такое
> видел - тас везде вроде было SetWindowLong и в FormDestroy
> все возвращалось обратно. Здесь такого не нужно?


Сабкласcировать собственные контролы в дельфи проще.
SetWindowLong может потребываться лишь для тех,
что создавались напрямую CreateWindow*.

--
Regards, LVT.


 
Андрей Молчанов   (2005-08-07 21:17) [12]

Все работает! Большое спасибо вам всем!!!!!!!!!!!!!!! :)


 
Юрий Зотов ©   (2005-08-07 22:19) [13]

> Андрей Молчанов   (07.08.05 21:17) [12]

Это замечательно, но все же стоит точнее формулировать вопросы. Вы написали "как ловить сообщение ОТ компонента", а выяснилось, что нужно ловить сообщение К компоненту. Задача, можно сказать, прямо противоположная.

Меж тем, как стоило задать вопрос "как есть", не подменяя истинную проблему своим ее видением - и все было бы абсолютно ясно: "Как отключить озвучивание клавиши Space в TTreeView". А ведь это появилось только в 5 посте.


 
Андрей Молчанов   (2005-08-07 22:30) [14]


> Это замечательно, но все же стоит точнее формулировать вопросы.
> Вы написали "как ловить сообщение ОТ компонента", а выяснилось,
> что нужно ловить сообщение К компоненту. Задача, можно сказать,
> прямо противоположная.

Если честно, то я под ОТ подразумевал К. В следующий раз постараюсь формулировать точнее. Спасибо.



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

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

Наверх




Память: 0.5 MB
Время: 0.038 c
1-1123482790
rolex
2005-08-08 10:33
2005.08.28
Как в TreeView загрузить дерево папок?


4-1120382355
unregister_256
2005-07-03 13:19
2005.08.28
Работа с каталогами


6-1116090998
Valera
2005-05-14 21:16
2005.08.28
IcmpClient


8-1113997439
Comrade
2005-04-20 15:43
2005.08.28
Просмотр Видио файла


14-1123089550
DillerXX
2005-08-03 21:19
2005.08.28
Что вы знаете про...