![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как ловить сообщение, но не от формы, а от компонента
Андрей Молчанов © (2005-08-07 19:46:00)Подскажите сабж пожалуйста.
Андрей Молчанов (2005-08-07 22:30:00) [1]
> Это замечательно, но все же стоит точнее формулировать вопросы.
> Вы написали "как ловить сообщение ОТ компонента", а выяснилось,
> что нужно ловить сообщение К компоненту. Задача, можно сказать,
> прямо противоположная.
Если честно, то я под ОТ подразумевал К. В следующий раз постараюсь формулировать точнее. Спасибо.
Юрий Зотов (2005-08-07 22:19:00) [2]> Андрей Молчанов (07.08.05 21:17) [12]
Это замечательно, но все же стоит точнее формулировать вопросы. Вы написали "как ловить сообщение ОТкомпонента", а выяснилось, что нужно ловить сообщение Ккомпоненту. Задача, можно сказать, прямо противоположная.
Меж тем, как стоило задать вопрос "как есть", не подменяя истинную проблему своим ее видением - и все было бы абсолютно ясно: "Как отключить озвучивание клавиши Space в TTreeView". А ведь это появилось только в 5 посте.
Андрей Молчанов (2005-08-07 21:17:00) [3]Все работает! Большое спасибо вам всем!!!!!!!!!!!!!!! :)
Leonid Troyanovsky (2005-08-07 21:08:00) [4]
> Андрей Молчанов (07.08.05 21:01) [10]
> А-а, все вспомнил про что Вы. Только вот, я раньше где такое
> видел - тас везде вроде было SetWindowLong и в FormDestroy
> все возвращалось обратно. Здесь такого не нужно?
Сабкласcировать собственные контролы в дельфи проще.
SetWindowLong может потребываться лишь для тех,
что создавались напрямую CreateWindow*.
--
Regards, LVT.
Андрей Молчанов (2005-08-07 21:01:00) [5]А-а, все вспомнил про что Вы. Только вот, я раньше где такое видел - тас везде вроде было SetWindowLong и в FormDestroy все возвращалось обратно. Здесь такого не нужно?
begin...end (2005-08-07 20:47:00) [6]> Андрей Молчанов (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:00) [7]
> 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.
begin...end (2005-08-07 20:40:00) [8]> Андрей Молчанов (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
Leonid Troyanovsky (2005-08-07 20:31:00) [9]
> Андрей Молчанов (07.08.05 20:24) [5]
> Компонент - TTreeView. Надо это чтобы отключить озвучивание
> клавиши Space. Но как пользоваться этим WindowProc?
Как пользоваться есть пример даже в хелпе.
Как отключать - если ты уверен, что пробел тебе не нужен, то
при обработке его WM_CHAR не вызывай старую (замененную)процедуру.
--
Regards, LVT.
Андрей Молчанов (2005-08-07 20:24:00) [10]Компонент - TTreeView. Надо это чтобы отключить озвучивание клавиши Space. Но как пользоваться этим WindowProc?
Leonid Troyanovsky (2005-08-07 20:18:00) [11]
> Андрей Молчанов (07.08.05 19:53) [2]
>
> > какого типа сообщение?
>
> WM_Char
Обычно такие компоненты есть TWinControl.
Но, даже если б он был TControl, то можно б было подменить
ему WindowProc {:TWndMethod} на свою.
Не забывай только про вызов старой процедуры.
--
Regards, LVT.
Юрий Зотов (2005-08-07 20:13:00) [12]Обычным образом. Получателю без разницы, кем послано сообщение.
Андрей Молчанов (2005-08-07 19:53:00) [13]
> какого типа сообщение?
WM_Char
3DxFantastika (2005-08-07 19:48:00) [14]какого типа сообщение?