Einzelnen Beitrag anzeigen

Baeuerle

Registriert seit: 17. Mär 2005
Ort: Ettenheim
283 Beiträge
 
Delphi 2005 Professional
 
#1

ScrollBox, Paintbox, MouseWheel

  Alt 30. Okt 2008, 12:19
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
  Mit Zitat antworten Zitat