Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получение сообщения, когда компонент не в фокусе... [D7, XP]


ekto ©   (2008-12-08 14:28:00) 

Всем привет.
Есть форма, на ней TScrollBox, в ScrollBox запыхиваю фреймы, на них - TChart'ы...
Нужно сделать прокрутку скрулбокса колесиком, но, т.к. фокус поймать нечем, то и сообщения не передаются в него:(

Сделал так:

procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
 MousePos: TPoint; var Handled: Boolean);
begin
 if (ScrollBox1.ScreenToClient(Form1.ClientToScreen(MousePos)).X >= ScrollBox1.Left)
   and (ScrollBox1.ScreenToClient(Form1.ClientToScreen(MousePos)).X <= (ScrollBox1.Left + ScrollBox1.Width))
   and (ScrollBox1.ScreenToClient(Form1.ClientToScreen(MousePos)).Y >= ScrollBox1.Top)
   and (ScrollBox1.ScreenToClient(Form1.ClientToScreen(MousePos)).Y <= (ScrollBox1.Top + ScrollBox1.Height)) then

работает, вроде... А как сделать по-симпотишнее?


clickmaker   (2008-12-08 15:19:00) [1]

> Именно через Perform, форма и передает сообщения компонентам,
> наследникам TGraphicControl

да. Однако, в отличие от оконных компонентов, неоконные сами ничего не обрабатывают. Они даже не рисуют сами себя, а вызывают Parent.PaintControls.
И все сообщения им посылает родительский компонент путем вызова оконной функции, а не через SendMessage, поскольку hwnd у них нет.


ekto   (2008-12-08 14:55:00) [2]


> clickmaker ©   (08.12.08 14:45) [5]


> TLabel не может ничего получать, так как это не оконный
> компонент. Его рисует сама форма



> SomeComponent.Perform(msgid, wparam, lparam);
> SomeComponent должен наследоваться от TWinControl


Так приятно уличить мастера в ошибке:))). Даже в понедельник.
Именно через Perform, форма и передает сообщения компонентам, наследникам TGraphicControl.


clickmaker   (2008-12-08 14:45:00) [3]

> Ведь TLabel, напр, получает же их

TLabel не может ничего получать, так как это не оконный компонент. Его рисует сама форма


> как мне "заставить" TForm передавать сообщения компоненту

SomeComponent.Perform(msgid, wparam, lparam);
SomeComponent должен наследоваться от TWinControl


ekto   (2008-12-08 14:41:00) [4]


> clickmaker ©   (08.12.08 14:37) [3]


> Ega23 ©   (08.12.08 14:32) [1]


Спасибо, Буду знать:)

 Тока я имел в виду несколько иное: как мне "заставить" TForm передавать сообщения компоненту, который не в фокусе? Ведь TLabel, напр, получает же их?


clickmaker   (2008-12-08 14:37:00) [5]

ScrollBox1.BoundsRect, конечно же


clickmaker   (2008-12-08 14:36:00) [6]

if PtInRect(BoundsRect, MousePos) ?


Ega23   (2008-12-08 14:32:00) [7]

procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
var
 pt : TPoint;
begin
 pt := ScrollBox1.ScreenToClient(ClientToScreen(MousePos));
if (pt.X >= ScrollBox1.Left)
  and (pt.X <= (ScrollBox1.Left + ScrollBox1.Width))
  and (pt.Y >= ScrollBox1.Top)
  and (pt.Y <= (ScrollBox1.Top + ScrollBox1.Height)) then


?


Наверх

Титульная страница Поиск, карта сайта Написать письмо