Вниз
Скачать: CL | DM;

Как получить message WM_vscroll не от формы, а от ScrollBox   Найти похожие ветки 

 
STARfish ©   (2004-08-18 15:10) [0]

Здравствуйте, Уважаемые! Подскажите как получить сообщение wm_vscroll  от компоненты на форме.
У меня получилось получить его от формы:

type
 procedure MyPaint(Var Param); message WM_vscroll;

 procedure TForm1.MyPaint(var Param);
  begin
   inherited;
   showmessage("Wassap!!!!");
end;

А вот как получить это сообщение от Скроллбокса на форме?


 
STARfish ©   (2004-08-18 15:24) [1]

Как же все таки получить его от скролла?...


 
WondeRu ©   (2004-08-18 15:25) [2]

пишешь компонент от TScroolbox у которого будет метод, который будет реагировать на WM_vscroll


 
STARfish ©   (2004-08-18 15:28) [3]

Не совсем понял.....
А hwnd тут имеет место?


 
Семен Сорокин ©   (2004-08-18 15:33) [4]

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:56) [5]

Окончательно запутался....
А нужно то всего лишь чуть чуть код изменить:

type
procedure MyPaint(Var Param); message WM_vscroll;

procedure TForm1.MyPaint(var Param);
 begin
  inherited;
  showmessage("Wassap!!!!");
end;


 
Григорьев Антон ©   (2004-08-18 16:33) [6]


> STARfish ©   (18.08.04 15:56) [5]
> Окончательно запутался....
> А нужно то всего лишь чуть чуть код изменить:


Да не получится его чуть-чуть изменить. Не может форма просто так реагировать на сообщения, посылаемые совсем другому окну, пусть даже и её дочернему. WondeRu и Семён Сорокин правильно советовали - написать свой компонент, выкинуть из программы ScrollBox и вставить этот компонент.


 
STARfish ©   (2004-08-18 16:35) [7]

Сэнкс элот!


 
wicked ©   (2004-08-18 16:50) [8]

или как drop-in вариант - переприсвоить этому самому ScrollBox"у св-во WindowProc...



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.02 c
3-1092277691
Sirus
2004-08-12 06:28
2004.09.05
Принудительное закрытие базы Interbase...


14-1092724095
Baks
2004-08-17 10:28
2004.09.05
WebBrowser


4-1090552501
SPeller
2004-07-23 07:15
2004.09.05
TWebBrowser. Копирование текста


14-1092567831
Rus_LAN
2004-08-15 15:03
2004.09.05
FireBird (Документация)


8-1087143736
Karol
2004-06-13 20:22
2004.09.05
Задать движение точки по эллипсу на форме




   Наверх