AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TImage Zoom

Ein Thema von Davidlocke13 · begonnen am 19. Sep 2012 · letzter Beitrag vom 20. Sep 2012
 
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.658 Beiträge
 
Delphi 12 Athens
 
#18

AW: TImage Zoom

  Alt 20. Sep 2012, 08:02
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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 14:43 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