Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.18;
Скачать: CL | DM;

Вниз

Получение сообщения, когда компонент не в фокусе...   Найти похожие ветки 

 
ekto ©   (2008-12-08 14:28) [0]

Всем привет.
Есть форма, на ней 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

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


 
Ega23 ©   (2008-12-08 14:32) [1]

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


?


 
clickmaker ©   (2008-12-08 14:36) [2]

if PtInRect(BoundsRect, MousePos) ?


 
clickmaker ©   (2008-12-08 14:37) [3]

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


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


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


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


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

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


 
clickmaker ©   (2008-12-08 14:45) [5]

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

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


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

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


 
ekto ©   (2008-12-08 14:55) [6]


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


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



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


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


 
clickmaker ©   (2008-12-08 15:19) [7]

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

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



Страницы: 1 вся ветка

Текущий архив: 2009.01.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
15-1227066451
Slider007
2008-11-19 06:47
2009.01.18
С днем рождения ! 19 ноября 2008 среда


2-1228213679
Sasha
2008-12-02 13:27
2009.01.18
TServerSocket и интернет


15-1226943419
Маэстро
2008-11-17 20:36
2009.01.18
Почему не дают больничный когда депрессия?


15-1227260800
Petr V. Abramov
2008-11-21 12:46
2009.01.18
Топ-менеджер Microsoft признался в обмане потребителей


15-1226901755
Kolan
2008-11-17 09:02
2009.01.18
Ручная отрисовка ячеек TListView, позиция текста.