![]() |
Bild in Scrollbox mit Maus verschieben
Hallo,
ich habe eine TScrollbox, die ein TImage enthält. Das TImage ist größer als die Scrollbox. Wird nun mit der linken Maustatste auf das Bild geklickt, die Maustaste gedrück gehalten und die Maus bewegt, soll die Scrollbox in die Richtung der Mausbewegung scrollen. Also ein verschieben des Bildes mit der Maus. In OnMouseDown vom Bild könnte man sich dazu den ersten geklickten Punkt merken und in OnMouseMove dann irgendwie mit der aktuellen Mausposition verrechnen. Nur wie? Danke! |
Re: Bild in Scrollbox mit Maus verschieben
Hallo,
so schwierig ist das gar nicht:
Delphi-Quellcode:
Gruß Hawkeye
type
TForm1 = class(TForm) : private FMouseAnchor : TPoint; FPanning : Boolean; end; procedure TForm1.ImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FMouseAnchor := Mouse.CursorPos; // absolute Position des Mauszeigers merken FPanning := True; // Verschieben wurde eingeleitet end; procedure TForm1.ImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var CursorPos : TPoint; dx, dy : Integer; begin if (not FPanning) then Exit; // Inhalt der Scrollbox nur bei gedrückter Maustaste bewegen CursorPos := Mouse.CursorPos; dx := CursorPos.X - FMouseAnchor.X; // Verschiebung in x-Richtung dy := CursorPos.Y - FMouseAnchor.Y; // Verschiebung in y-Richtung // horizontale/vertikale Scrollbar aktualisieren ScrollBox.HorzScrollBar.Position := ScrollBox.HorzScrollBar.Position - dx; ScrollBox.VertScrollBar.Position := ScrollBox.VertScrollBar.Position - dy; // "Schmieren" des Bildes vermeiden ScrollBox.Repaint; // absolute Position des Mauszeigers für nächsten Vergleich merken FMouseAnchor := CursorPos; end; procedure TForm1.ImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // Verschieben ist beendet FPanning := False; end; |
AW: Bild in Scrollbox mit Maus verschieben
bei diesem code aktualisieren sich die scrollbars nicht bevor ich nicht mit der maus über eben diese gehe.
scrollbar.refresh, realign, repaint funktioniert nicht. interessanterweise funktioniert es wenn ich scollbar.refresh in einem knopf habe, in einem timer funktioniert das jedoch nicht, sogar wenn ich den timer den knopf klicken lasse oO häckchen bei tracking setzen geht auch nicht wirklich ...ich benutze alphaskins, falls das wichtig ist danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17: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