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 Bild in Scrollbox mit Maus verschieben (https://www.delphipraxis.net/134110-bild-scrollbox-mit-maus-verschieben.html)

BlueStarHH 15. Mai 2009 18:57


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!

Hawkeye219 15. Mai 2009 19:46

Re: Bild in Scrollbox mit Maus verschieben
 
Hallo,

so schwierig ist das gar nicht:

Delphi-Quellcode:
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;
Gruß Hawkeye

Spectre 14. Feb 2013 13:25

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 08:25 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