Hallo,
ich habe eine Komponente die von einer ScrollBox abgeleitet wird, diese enthält eine PaintBox.
Problem: Meine Komponente scrollt nicht, wenn am MousWheel gedreht wird sondern nur über die ScrollBar der Scrollbox
Ich habe schon versucht WM_MOUSEWHEEL in der jeweiligen WndProc abzufangen sowohl bei der ScrollBox als auch bei einer Ableitung von TPaintBox -> beides jedoch ohne Erfolg. Das einzigste was funktionierte war:
Delphi-Quellcode:
TBlubViewer = class(TScrollBox)
FPaintBox:=TPaintBox;
...
constructor TBlubViewer.Create(AOwner: TComponent);
begin
inherited;
FPaintBox:=TPaintBox.Create(self);
FPaintBox.Parent:=self;
FPaintBox.Left:=0;
FPaintBox.Top:=0;
FPaintBox.OnPaint:=DoPaint;
// Das funktioniert ABER NUR BEI EINER KOMPONENETE PRO FORMULAR :-(
Application.OnMessage:=DoScroll;
......
procedure TBlubViewer.DoScroll(var Msg: TMsg; var Handled: Boolean);
var pnt1, pnt2 : TPoint;
begin
// Nur bei Mausrad reagiren
if (Msg.message = WM_MOUSEWHEEL) then
begin
// Koordinaten des Panels screenweit ermitteln
pnt1 := ClientToScreen(Self.ClientRect.TopLeft);
pnt2 := ClientToScreen(Self.ClientRect.BottomRight);
// Testen, ob Cursor auf Panel liegt
if (Mouse.CursorPos.X >= pnt1.X) and
(Mouse.CursorPos.Y >= pnt1.Y) and
(Mouse.CursorPos.X <= pnt2.X) and
(Mouse.CursorPos.Y <= pnt2.Y) then
begin
if Msg.wParam>0 then
begin
if VertScrollBar.Position > 0 then VertScrollBar.Position:=VertScrollBar.Position-50;
end
else if VertScrollBar.Position < VertScrollBar.Range then VertScrollBar.Position:=VertScrollBar.Position+50;
end;
end;
end;
Wie kann ich mich von "Application.OnMessage" lösen????
thx
baeuerle