AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Image in einer ScrollBox richtig positionieren...
Thema durchsuchen
Ansicht
Themen-Optionen

Image in einer ScrollBox richtig positionieren...

Ein Thema von Thunder1968 · begonnen am 18. Apr 2015 · letzter Beitrag vom 21. Jun 2016
 
Thunder1968

Registriert seit: 19. Mai 2009
8 Beiträge
 
#1

Image in einer ScrollBox richtig positionieren...

  Alt 18. Apr 2015, 19:26
Hallo und Guten Abend,

seit langem habe ich mal wieder ein Problemchem. Ich habe eine ScrollBox die ein TImage enthält. In dieses TImage wird dann ein PNG-File geladen was ca. 2,5 MB groß ist. Das verschieben des TImages funktioniert problemlos. Aber jetzt möchte ich das ganze mit dem Mausrad vergrößern und auch verkleinern. Mein Problem liegt jetzt darin das ich gerne den aktuellen Mittelpunkt der ScrollBox / TImage auch mittig bleiben soll. Wenn ich das Mausrad betätige (vergrößern, verkleinern) verschiebt sich das TImage so das der aktuell angezeigte Mittelpunkt sich verschiebt und ich dann mit der Maus das die alte Position wieder in die Mitte ziehen muß um es beim nächsten Zoom-Vorgang nicht wieder aus den Augen zu verlieren. Wo liegt mein Denkfehler oder hat jemand eine Idee??? Wäre auch Dankbar für ein komplettes Beispiel... Den Quellcode habe ich angehängt und für eine rasche Hilfe wäre ich Euch sehr Dankbar... Bei den beiden Bilder im Anhang soll verdeutlicht werden wie sich das ganze auswirkt und darstellt... Viele Grüße...


Delphi-Quellcode:
function TFormMain.DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean;
var
   NewScrollPosX, NewScrollPosY : Integer;
   OldScrollPosX, OldScrollPosY : Integer;
   TempValue : Integer;

begin
     // Bild zoomen

     if ssCtrl in Shift then
     begin
          Image1.AutoSize := False;
          Image1.Center := True;
          Image1.Proportional := True;
          Image1.Stretch := True;

          OldScrollPosX := ScrollBox1.HorzScrollBar.Position;
          OldScrollPosY := ScrollBox1.VertScrollBar.Position;

          Image1.Left := Round(Image1.Left - (((Image1.Width * ZoomFactor) - Image1.Width) / 2));
          Image1.Top := Round(Image1.Top - (((Image1.Height * ZoomFactor) - Image1.Height) / 2));
          Image1.Width := Round(Image1.Width * ZoomFactor);
          Image1.Height := Round(Image1.Height * ZoomFactor);

          TempValue := Round(OldScrollPosX * ZoomFactor);
          NewScrollPosX := Round((OldScrollPosY - TempValue) / (ZoomFactor));

          TempValue := Round(OldScrollPosX * ZoomFactor);
          NewScrollPosY := Round((OldScrollPosY - TempValue) / (ZoomFactor));

          ScrollBox1.HorzScrollBar.Position := ScrollBox1.HorzScrollBar.Position + (NewScrollPosX div 2);
          ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position + (NewScrollPosY div 2);
     end;

     Image1.Repaint;

     ScrollBox1.DoubleBuffered := True;
end;

function TFormMain.DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean;
var
   NewScrollPosX, NewScrollPosY : Integer;
   OldScrollPosX, OldScrollPosY : Integer;
   TempValue : Integer;

begin
     // Bild verkleinern

     if ssCtrl in Shift then
     begin
          Image1.AutoSize := False;
          Image1.Center := True;
          Image1.Proportional := True;
          Image1.Stretch := True;

          OldScrollPosX := ScrollBox1.HorzScrollBar.Position;
          OldScrollPosY := ScrollBox1.VertScrollBar.Position;

          Image1.Left := Round(Image1.Left + (((Image1.Width * ZoomFactor) - Image1.Width) / 2));
          Image1.Top := Round(Image1.Top + (((Image1.Height * ZoomFactor) - Image1.Height) / 2));
          Image1.Width := Round(Image1.Width / ZoomFactor);
          Image1.Height := Round(Image1.Height / ZoomFactor);

          TempValue := Round(OldScrollPosX / ZoomFactor);
          OldScrollPosX := Round((OldScrollPosX - TempValue) / (ZoomFactor));

          TempValue := Round(OldScrollPosY / ZoomFactor);
          OldScrollPosY := Round((OldScrollPosY - TempValue) / (ZoomFactor));

          ScrollBox1.HorzScrollBar.Position := ScrollBox1.HorzScrollBar.Position - (OldScrollPosX div 2);
          ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position - (OldScrollPosY div 2);
     end;

     Image1.Repaint;

     ScrollBox1.DoubleBuffered := True;
end;
Angehängte Grafiken
Dateityp: png Vorher.png (54,5 KB, 74x aufgerufen)
Dateityp: png Nachher.png (40,9 KB, 62x aufgerufen)

Geändert von Thunder1968 (18. Apr 2015 um 20:00 Uhr)
  Mit Zitat antworten Zitat
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:17 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