Текущий архив: 2004.09.05;
Скачать: 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 вся ветка
Текущий архив: 2004.09.05;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.054 c