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

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

Как получить 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]

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


Наверх

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