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 mit Mousemopve beeinflussen (https://www.delphipraxis.net/45558-scrollbox-mit-mousemopve-beeinflussen.html)

Prototypjack 8. Mai 2005 14:50


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:
if (X <> MoveX) then
    scrollbox1.horzScrollBar.Position :=scrollbox1.horzScrollBar.Position+ (X - StartX);
if (Y <> MoveY) then
    scrollbox1.VertScrollBar.Position :=scrollbox1.VertScrollBar.Position+ (Y - StartY);
Könnt Ihr mir irgendwie unter die Arme greifen?
Danke schonmal,
Max

Khabarakh 8. Mai 2005 15:19

Re: Scrollbox mit Mousemopve beeinflussen
 
Ja, das ist mal wieder eine geniale Fehlerbeschreibung :mrgreen: .
Was ist überhaupt MoveX?
Fragen über Fragen :wink: .

Prototypjack 8. Mai 2005 16:33

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

Khabarakh 8. Mai 2005 17:27

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:
X := X - Image1.Left;
Y := Y - Image1.Top;
Das ganze noch mit MoveX/Y und StartX/Y.

TStringlist 8. Mai 2005 17:40

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.

Prototypjack 9. Mai 2005 11:28

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;

TStringlist 9. Mai 2005 16:10

Re: Scrollbox mit Mousemopve beeinflussen
 
Delphi-Quellcode:
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;
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).

Prototypjack 10. Mai 2005 13:15

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 01:10 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