Форум: "Основная";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];
ВнизКак ловить сообщение, но не от формы, а от компонента Найти похожие ветки
← →
Андрей Молчанов (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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.044 c