Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   TImage Zoom (https://www.delphipraxis.net/170474-timage-zoom.html)

Davidlocke13 19. Sep 2012 15:19

AW: TImage Zoom
 
2.
Es hat sich bei mir noch ein weiters Problem ergeben !
Ich wollte auf das Bild jetzt nen Button setzten hat auch in der TScrollBox so weit funktioniert das der auf ein und der Selben Stelle bleibt, nur seit dem Zoom klappt das halt nicht mehr da der Button seine Position nicht durch den Zoom hält und auch nicht mit vergrößert wir !

Gibt es dafür eine Lösung ?

Gruß

Bummi 19. Sep 2012 15:23

AW: TImage Zoom
 
Wenn der Button auch die Größe anpassen soll, könnte ScaleBy des Forms für Dich interessant sein (hat aber reichlich Seiteneffekte)

Davidlocke13 19. Sep 2012 15:35

AW: TImage Zoom
 
Tja das mit dem ScaleBy muss ich erst mal begreifen bevor ich das umsetzen kann ! Ich lese mich da mal durch die Seiten ;-)

Davidlocke13 19. Sep 2012 17:18

AW: TImage Zoom
 
Irgendwie werde ich aus dem ScaleBy nicht so schlau :cry:
Hoffe könnt mir da noch mal helfen

THX

DeddyH 19. Sep 2012 17:23

AW: TImage Zoom
 
Mir ist nicht ganz klar, was daran nicht zu verstehen ist: TWinControl.ScaleBy :gruebel:

Davidlocke13 19. Sep 2012 17:33

AW: TImage Zoom
 
Sorry das ich so ein Idiot bin !
Mitbekommen für was das ist habe ich !
Aber bekomme es damit nicht hin ne vernünftige procedure für meine Buttons zu bastel damit die auf ein und der selben Stelle bleiben und mit dem Zoom größer und kleiner werden !

DeddyH 19. Sep 2012 17:51

AW: TImage Zoom
 
Definier doch erst einmal "an der selben Stelle". Ich nehme einmal an, dass alle 4 Ecken manipuliert werden müssen, damit sie relativ zum Bild bleiben, oder?

DeddyH 20. Sep 2012 08:02

AW: TImage Zoom
 
Mir ist der Gedanke gekommen, dass man das doch mit einfacher Prozentrechnung lösen könnte. Dazu merkt man sich den prozentualen Anteil (als Gleitkommazahl für größere Genauigkeit) der Koordinaten relativ zum gewünschten Rechteck. Der Einfachheit halber habe ich hier testhalber einen neuen Datentyp definiert und als privates Feld in meinem Formular deklariert:
Delphi-Quellcode:
type
  TPercentRect = record
    Left, Top, Width, Height: double;
  end;

  TFormTest = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Private-Deklarationen }
    FPercent: TPercentRect;
  public
    { Public-Deklarationen }
  end;
So, nun rechnet man vor der ersten Größenänderung den jeweiligen Anteil aus und merkt sich den im Record.
Delphi-Quellcode:
procedure TFormTest.FormCreate(Sender: TObject);
begin
  FPercent.Left := Button1.Left / ClientWidth * 100;
  FPercent.Top := Button1.Top / ClientHeight * 100;
  FPercent.Width := Button1.Width / ClientWidth * 100;
  FPercent.Height := Button1.Height / ClientHeight * 100;
end;
Wird nun die Größe geändert, rechnet man die neuen Koordinaten zurück und positioniert den Button neu.
Delphi-Quellcode:
procedure TFormTest.FormResize(Sender: TObject);
var
  NewLeft, NewTop, NewWidth, NewHeight: integer;
begin
  NewLeft := round(ClientWidth / 100 * FPercent.Left);
  NewTop := round(ClientHeight / 100 * FPercent.Top);
  NewWidth := round(ClientWidth / 100 * FPercent.Width);
  NewHeight := round(ClientHeight / 100 * FPercent.Height);
  Button1.SetBounds(NewLeft, NewTop, NewWidth, NewHeight);
end;
In einem kleinen Testprogramm funktioniert das abgesehen von logischerweise auftretenden kleinen Rundungsungenauigkeiten ganz gut. Normalerweise würde ich zwar eher den Button ableiten und den Record dort deklarieren, aber ich wollte es so einfach wie möglich halten.

Davidlocke13 20. Sep 2012 09:29

AW: TImage Zoom
 
unter Var bei der procedure TForm1.FormCanResize werden mir NewWidth, NewHeight mit folgendem Fehler angezeigt:

[Pascal Fehler] WerkPlan.pas(71): E2004 Bezeichner redefiniert: 'NewWidth'

[Pascal Fataler Fehler] Werk2Plan.dpr(5): F2063 Verwendete Unit 'WerkPlan.pas' kann nicht compiliert werden

DeddyH 20. Sep 2012 09:32

AW: TImage Zoom
 
In der CanResize-Methode werden NewWidth und NewHeight als Parameter übergeben, Du kannst also entweder auf OnResize ausweichen wie in meinem Beispiel oder Du benennst die lokalen Variablen um.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.
Seite 2 von 5     12 34     Letzte »    

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