Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.087 c
5-1093959666
chis
2004-08-31 17:41
2005.08.28
Можно ли убрать поля в PageControl


3-1121339475
ks
2005-07-14 15:11
2005.08.28
Изменение даных в TQuery


1-1123052532
ev
2005-08-03 11:02
2005.08.28
EXE внутри EXE


3-1121691780
GekaNaz
2005-07-18 17:03
2005.08.28
Ошибка - конец файла


14-1123051609
syte_ser78
2005-08-03 10:46
2005.08.28
Глюк при запуске от имени





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский