![]() |
Scrollbox mit Mousemopve beeinflussen
Hallo,
Ich habe in einer Scrollbox ein Bild das dei Scrollbox überschreitet. ICh will jetzt per Onmousemove auf dem Image die Scrollbars der Scrollbox beeinflussen Mein bisheriger Code funzt aber nicht so richtig:
Delphi-Quellcode:
Könnt Ihr mir irgendwie unter die Arme greifen?
if (X <> MoveX) then
scrollbox1.horzScrollBar.Position :=scrollbox1.horzScrollBar.Position+ (X - StartX); if (Y <> MoveY) then scrollbox1.VertScrollBar.Position :=scrollbox1.VertScrollBar.Position+ (Y - StartY); Danke schonmal, Max |
Re: Scrollbox mit Mousemopve beeinflussen
Ja, das ist mal wieder eine geniale Fehlerbeschreibung :mrgreen: .
Was ist überhaupt MoveX? Fragen über Fragen :wink: . |
Re: Scrollbox mit Mousemopve beeinflussen
Hallo,
Erstmal Sry für die Ungenaue Beschreibung ;) X stellt den Punkt dar an dem die Maus gedrückt wurde und MoveX den Punkt zu dem die Maus bewegt wurde(Wegen der Berechnung der Differenz). Mein Code funktioniert eigentlich schon aber man kann das Bild nicht ziehen sondern wenn man die Maus in eine Richtung bewegt scrollt es blitzschnell in die Richtung und nicht in dieser "Ziehgeschwindigkeit" Kann mir wer helfen? ^^ Danke schonmal, Proto |
Re: Scrollbox mit Mousemopve beeinflussen
Ich denke, das Problem ist, dass du auf das TImage.OnMouseMove reagierst und dadurch die Koordinaten relativ zum ganzen Image bekommst, du aber die relativ zum Ausschnitt brauchst. Du musst also die Image- in die Scrollbox-Koordinaten umrechnen:
Delphi-Quellcode:
Das ganze noch mit MoveX/Y und StartX/Y.
X := X - Image1.Left;
Y := Y - Image1.Top; |
Re: Scrollbox mit Mousemopve beeinflussen
Hi, außerdem dürfte dabei auch wichtig sein, dass du dein X, nach einem jeweiligen Scrollen des Bildes, dann auch immer um einen entsprechenden Wert mitkorrigierst. Ansonsten würde dieses bis dato schon getätigte Scrollen ja auch gar nicht registriert und die Diff zwischen X und MoveX ggf. immer größer, obgleich du aber schon nachgescrollt hast.
|
Re: Scrollbox mit Mousemopve beeinflussen
Hmm scheitn immer noch nicht richtig zu funktionieren :(
Hier einfach mal der gesamte "Bewegungs"-Code
Delphi-Quellcode:
procedure TPic_chldfrm.ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin IsMoved := True; StartX := X; StartY := Y; MoveX := X; MoveY := Y; Scrollbox1.DoubleBuffered := True; end; cursor :=crhandpoint; end; procedure TPic_chldfrm.ImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if isMoved then begin if (X <> MoveX) then scrollbox1.horzScrollBar.Position :=scrollbox1.horzScrollBar.Position+ round((X - StartX) div 2); if (Y <> MoveY) then scrollbox1.VertScrollBar.Position :=scrollbox1.VertScrollBar.Position+ round((Y - StartY) div 2); //MoveX := X; //MoveY := Y; x :=MoveX; y :=MoveY; end; end; procedure TPic_chldfrm.ImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin IsMoved := False; Scrollbox1.DoubleBuffered := False; end; cursor :=crdefault; end; |
Re: Scrollbox mit Mousemopve beeinflussen
Delphi-Quellcode:
Obiger Code in ImageMouseMove müsste eigentlich schon ausreichen. Start X brauche ich doch nicht jedesmal mitzukorrigieren, da ja beides auch Koordinaten (sowohl z.B. X als auch dann StartX) auf eben diesem Image selbst sind. Durch die Änderung von dann nur der ScrollBar.Position wird damit aber natürlich auch gleichzeitig das X immer wieder so lange mitverändert, bis diese aktuelle Mausposition dann eben auf dem Bild auch wieder auf der exakt gleichen Stelle herausgekommen ist, auf der du die Maus auch ursprünglich niedergedrückt hast (und dann ist eben wieder X = StartX und der Scrollvorgang damit zu Ende).
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin if isMoved then begin if X <> StartX then begin scrollbox1.horzScrollBar.Position := scrollbox1.horzScrollBar.Position - (X-StartX); end; if Y <> StartY then scrollbox1.vertScrollBar.Position := scrollbox1.vertScrollBar.Position - (Y-StartY); end; end; |
Re: Scrollbox mit Mousemopve beeinflussen
Perfekt! So funktioniert es.
Danke an euch, für die Hilfe. Gruß, Max |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz