![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить message WM_vscroll не от формы, а от ScrollBox
STARfish © (2004-08-18 15:10:00)Здравствуйте, Уважаемые! Подскажите как получить сообщение wm_vscroll от компоненты на форме.
У меня получилось получить его от формы:
type
procedure MyPaint(Var Param); message WM_vscroll;
procedure TForm1.MyPaint(var Param);
begin
inherited;
showmessage('Wassap!!!!');
end;
А вот как получить это сообщение от Скроллбокса на форме?
wicked (2004-08-18 16:50:00) [1]или как drop-in вариант - переприсвоить этому самому ScrollBox'у св-во WindowProc...
STARfish (2004-08-18 16:35:00) [2]Сэнкс элот!
Григорьев Антон (2004-08-18 16:33:00) [3]
> STARfish © (18.08.04 15:56) [5]
> Окончательно запутался....
> А нужно то всего лишь чуть чуть код изменить:
Да не получится его чуть-чуть изменить. Не может форма просто так реагировать на сообщения, посылаемые совсем другому окну, пусть даже и её дочернему. WondeRu и Семён Сорокин правильно советовали - написать свой компонент, выкинуть из программы ScrollBox и вставить этот компонент.
STARfish (2004-08-18 15:56:00) [4]Окончательно запутался....
А нужно то всего лишь чуть чуть код изменить:
type
procedure MyPaint(Var Param); message WM_vscroll;
procedure TForm1.MyPaint(var Param);
begin
inherited;
showmessage('Wassap!!!!');
end;
Семен Сорокин (2004-08-18 15:33:00) [5]
unit ScrBox;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, Forms;
type
TScrollDirect = (sdVert, sdHorz);
TScrollEvent = procedure (Sender: TScrollBox; Direct: TScrollDirect; Position: integer) of object;
TScrBox = class(TScrollBox)
private
FOnScroll: TScrollEvent;
FOnMouseEnter : TNotifyEvent;
FOnMouseLeave : TNotifyEvent;
procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
procedure WMNCHitTest(var Message: TMessage); message WM_NCHITTEST;
procedure WMMouseEnter(var MSg: TMessage); message CM_MOUSEENTER;
procedure WMMouseLeave(var MSg: TMessage); message CM_MOUSELEAVE;
published
property OnMouseEnter : TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave : TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
property OnScroll: TScrollEvent read FOnScroll write FOnScroll;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TScrBox]);
end;
{ ------------------------------- TScrBox ------------------------------------ }
procedure TScrBox.WMHScroll(var Message: TWMHScroll);
begin
inherited;
if Assigned(FOnScroll) then
FOnScroll(TScrollBox(Self), sdHorz, HorzScrollBar.Position)
end;
procedure TScrBox.WMMouseEnter(var MSg: TMessage);
begin
inherited;
if Assigned(FOnMouseEnter) then
FOnMouseEnter(self)
end;
procedure TScrBox.WMMouseLeave(var MSg: TMessage);
begin
inherited;
if Assigned(FOnMouseLeave) then
FOnMouseLeave(self)
end;
procedure TScrBox.WMNCHitTest(var Message: TMessage);
begin
DefaultHandler(Message)
end;
procedure TScrBox.WMVScroll(var Message: TWMVScroll);
begin
inherited;
if Assigned(FOnScroll) then
FOnScroll(TScrollBox(Self), sdVert, VertScrollBar.Position)
end;
end.
STARfish (2004-08-18 15:28:00) [6]Не совсем понял.....
А hwnd тут имеет место?
WondeRu (2004-08-18 15:25:00) [7]пишешь компонент от TScroolbox у которого будет метод, который будет реагировать на WM_vscroll
STARfish (2004-08-18 15:24:00) [8]Как же все таки получить его от скролла?...