Wie Du herausgefunden hast hat die TScrollbox-Klasse keine entsprechenden Events, aber das läßt sich ziemlich einfach nachflicken. Ich habe in meiner alten Sammlung eine Control gefunden, das ich vor Urzeiten mal für eine ähnliche Frage auf den alten Borland-Foren geschrieben hatte. Keine Ahnung für welche Delphi-Version, aber es sollte auch für die neuen Versionen funktionieren. Weist Du, wie man eine eigenen Komponente per Designtime
package in der
IDE installiert?
Delphi-Quellcode:
unit EvScrollBox;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, Forms;
type
TEvScrollBox =
class(TScrollBox)
private
FVScrollEvent: TNotifyEvent;
FHScrollEvent: TNotifyEvent;
Procedure WMVScroll(
Var msg: TWMVScroll );
Message WM_VSCROLL;
Procedure WMHScroll(
Var msg: TWMHScroll );
Message WM_HSCROLL;
protected
Procedure DoVScroll;
Procedure DOHSCroll;
public
published
property OnVScroll: TNotifyEvent
read FVScrollEvent
write FVScrollEvent;
property OnHScroll: TNotifyEvent
read FHScrollEvent
write FHScrollEvent;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('
Samples', [TEvScrollBox]);
end;
{ TEvScrollBox }
procedure TEvScrollBox.DOHSCroll;
begin
If Assigned( FHSCrollEvent ) The
FHScrollEvent( self );
end;
procedure TEvScrollBox.DoVScroll;
begin
If Assigned( FVSCrollEvent )
Then
FVScrollEvent( self );
end;
procedure TEvScrollBox.WMHScroll(
var msg: TWMHScroll);
begin
inherited;
If msg.ScrollCode <> SB_ENDSCROLL
Then
DoHScroll;
end;
procedure TEvScrollBox.WMVScroll(
var msg: TWMVScroll);
begin
inherited;
If msg.ScrollCode <> SB_ENDSCROLL
Then
DoVScroll;
end;
end.