Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ScrollBox, Paintbox, MouseWheel (https://www.delphipraxis.net/123301-scrollbox-paintbox-mousewheel.html)

Baeuerle 30. Okt 2008 12:19


ScrollBox, Paintbox, MouseWheel
 
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

DeddyH 30. Okt 2008 12:28

Re: ScrollBox, Paintbox, MouseWheel
 
Versuch mal, in der Scrollbox die Message CM_MOUSEWHEEL abzufangen.

Baeuerle 30. Okt 2008 12:52

Re: ScrollBox, Paintbox, MouseWheel
 
du meinst
Delphi-Quellcode:
TBlubViewer = class(TScrollBox)
private
  procedure CMMouseWheel(var Message: TCMMouseWheel); message CM_MOUSEWHEEL;
...
geht leider nicht, die Prozedur wird nicht erreicht..

DeddyH 30. Okt 2008 13:00

Re: ScrollBox, Paintbox, MouseWheel
 
Wäre auch Quatsch, stelle ich gerade fest, TWinControl hat schon ein Event OnMouseWheel. Nur wird das hier unter Delphi 5 auch nicht ausgeführt :gruebel:

Baeuerle 30. Okt 2008 13:14

Re: ScrollBox, Paintbox, MouseWheel
 
Habs mit einer Lösung von marabu gemacht funktioniert, ist allerdiings nicht so schön. Besser wäre es natürlcih wenn ich es in die Komponente integrieren könnte...

DeddyH 30. Okt 2008 13:30

Re: ScrollBox, Paintbox, MouseWheel
 
Naja, Du könntest ja wahlweise auf den Parent oder die ParentForm Deiner Kompo Einfluss nehmen, obwohl ich so etwas auch nicht so doll finde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz