Главная страница
    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.036 c
4-1120735919
DeepProg
2005-07-07 15:31
2005.08.28
NetWkstaUserEnum


6-1116262547
Opryshok
2005-05-16 20:55
2005.08.28
TWebBrowser и *.doc


14-1123239992
12DFBDDh
2005-08-05 15:06
2005.08.28
С днем железнодорожника!


9-1115431469
Anim
2005-05-07 06:04
2005.08.28
Как откомпилировать 3d character animator ?


14-1123156968
Knight
2005-08-04 16:02
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский