Autor Beitrag
Fabian W.
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: Fr 15.09.06 19:09 
Hallo!

Ich hab nun ne ganze Zeit lang gesucht aber nischt gefunden...

Folgendes Problem:

Ich habe ein TImage in einer TScrollbox.
Dieses Image soll man zoomen können - kein problem; strech aktvieren, größe ändern - gezoomt^^
Jetzt das problem an der sache:
Wenn ich die Größe des Image ändere zeigt der Mittelpunkt der Box nicht mehr auf das Pixel auf dem image, auf das er bevor dem zoomen gezeigt hat. Der Auschnitt wird also nicht nur gezoomt sondern auch verschoben.
Genau das möchte ich vermeiden - hatte schonmal jemand dieses Prob (lösen können^^) oder Vorschläge?

mfg
Fabian W. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: Sa 16.09.06 14:40 
*push*
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Sa 16.09.06 14:58 
Hallo,

ich benutze für gewöhnlich für solche Dinge die PaintBox und das vergrößern/verschieben u.ä. mache ich durch etwas Mathematik und die Funktionen von Canvas: StretchDraw u.ä.
Hast du es schon mal damit versucht?

Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
Fabian W. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: Sa 16.09.06 15:05 
Das wäre bei mir etwas umständlich da es nicht nur um das Bild geht. Wenn ich alles zusdammenrechne ist ne scrollbox die optimalere Lösung ;)
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Sa 16.09.06 15:11 
hi

eigentlich musst du doch nur, wenn du zoomst, die hälfte der größenänderung bei Top und Left dazuzählen. Wenn du allerding ganz am rand deinen ausschnitt hast, ist er danach nicht mehr am rand, aber der Ausschnitt fokusiert noch das gleiche Pixel

//EDIT: nicht bei Top,Left sondern halt ScrollBy bei der ScrollBox

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Fabian W. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: Sa 16.09.06 15:51 
@xion: dann würde es immer richtung mitte streben ;)

Danke aber ich konnte das Problem grade mit BenBEs Hilfe slebst lösen ;)
Für alle die's interessiert:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
  mittepixX, mittepixY: integer;
begin
  mittepixX := round(((2 * ScrollBox1.HorzScrollBar.Position + ScrollBox1.Width) / 2) / Lastzoom);
  mittepixY := round(((2 * ScrollBox1.VertScrollBar.Position + ScrollBox1.Height) / 2) / Lastzoom);

  //Änderungen an Komponenten dürchführen

  ScrollBox1.HorzScrollBar.Position := round((mittepixX * zoom) - (ScrollBox1.Width / 2));
  ScrollBox1.VertScrollBar.Position := round((mittepixY * zoom) - (ScrollBox1.Height / 2));

  LastZoom := Zoom;
end;
Zoom wird in in dezimalen angegeben (1 = 100%, 1,5 = 150 % etc)

mfg