Delphi-PRAXiS
Seite 2 von 3     12 3      

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/)
-   -   Nicht nur Form vergrößern, sondern auch Elemente (https://www.delphipraxis.net/78740-nicht-nur-form-vergroessern-sondern-auch-elemente.html)

sakura 10. Okt 2006 15:30

Re: Nicht nur Form vergrößern, sondern auch Elemente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich denke, dass was er sucht ist das wirkliche Scaling. Folgende Methode erledigt die Aufgabe. Im Anhang ist auch ein Beispielprojekt.
Delphi-Quellcode:
procedure TForm1.MaximizeAndScale;
var
  sWidth: Double;
  sHeight: Double;
begin
  sWidth := Screen.MonitorFromWindow(Handle).Width / Width;
  sHeight := Screen.MonitorFromWindow(Handle).Height / Height;
  if sWidth < sHeight then
  begin
    ScaleBy(Round(Screen.MonitorFromWindow(Handle).Width * 1.02), Width);
  end
  else
  begin
    ScaleBy(Round(Screen.MonitorFromWindow(Handle).Height * 1.02), Height);
  end;
  WindowState := wsMaximized;
end;
...:cat:...

DP-Maintenance 10. Okt 2006 15:40

DP-Maintenance
 
Dieses Thema wurde von "sakura" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.

-=cats=- 11. Okt 2006 07:18

Re: Nicht nur Form vergrößern, sondern auch Elemente
 
:dancer: Coooool :thumb:

Das war genau das was ich gesucht hatte !!!!!!!!!!

Vielen Dank !!!!! :)

-=cats=- 11. Okt 2006 08:09

Re: Nicht nur Form vergrößern, sondern auch Elemente
 
Kannst Du mir noch erklären, was genau in diesem Abschnitt passiert ?

Zitat:

Zitat von sakura
Delphi-Quellcode:
  if sWidth < sHeight then
  begin
    ScaleBy(Round(Screen.MonitorFromWindow(Handle).Width * 1.02), Width);
  end
  else
  begin
    ScaleBy(Round(Screen.MonitorFromWindow(Handle).Height * 1.02), Height);
  end;

Warum *1.02 ?

kalmi01 11. Okt 2006 08:20

Re: Nicht nur Form vergrößern, sondern auch Elemente
 
Moin, moin,
Zitat:

Zitat von sakura
Ich denke, dass was er sucht ist das wirkliche Scaling. Folgende Methode erledigt die Aufgabe

Einzger Haken dabei ist die ScaleBy-interne Rundung auf ganze Pixel.
Dadurch zerlegt es das Formular, wenn es häufig vergrößert/verkleinert wird.

sakura 11. Okt 2006 08:26

Re: Nicht nur Form vergrößern, sondern auch Elemente
 
Zitat:

Zitat von -=cats=-
Warum *1.02 ?

Wie Kalmi schon geschrieben hat, wird intern viel gerundet und über die Zeit habe ich einfach festgestellt, dass beim Vergrößern ca. 2% Abweichung korrigiert werden wollen. Beim Verkleinern muss man diese wieder negativieren. Aber wenn es oft hin und her geht, dann geht das Layout verloren. Zum Starten ist es okay, aber häufig nutzen ist imo keine gute Idee.

...:cat:...

kalmi01 11. Okt 2006 08:37

Re: Nicht nur Form vergrößern, sondern auch Elemente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Die im Anhang befindliche Unit sollte da etwas "geschmeidiger" Funktionieren, als ScaleBy :hi:

-=cats=- 11. Okt 2006 09:15

Re: Nicht nur Form vergrößern, sondern auch Elemente
 
Zitat:

Zitat von sakura
Aber wenn es oft hin und her geht, dann geht das Layout verloren.

Was meinst Du damit ?
Sitzen die Buttons dann nicht mehr richtig ? Oder verschwinden sie komplett ?
Also, ich nutze das schon häufig mit der Größe (das sie verändert werden muss).

kalmi01 11. Okt 2006 10:03

Re: Nicht nur Form vergrößern, sondern auch Elemente
 
Zitat:

Sitzen die Buttons dann nicht mehr richtig ? Oder verschwinden sie komplett ?
Wenn die Koordinate mehrfach berechnet werden und das Ergebnis wir anschl. auf integer gerundet, dann veränder sich halt die Positionen.
Dito was die Größe der Buttons angeht.
Irgendwann ist das Form dann nur noch Schrott.

messie 11. Okt 2006 11:42

Re: Nicht nur Form vergrößern, sondern auch Elemente
 
Zitat:

Zitat von kalmi01
Die im Anhang befindliche Unit sollte da etwas "geschmeidiger" Funktionieren, als ScaleBy :hi:

Magst Du die Kompo mal mit ein paar Worten beschreiben? Woher, wohin, wozu?



@ cats: Wenn Du die ScaleBy-Funktion nutzt, solltest Du Dein Form beim Schließen freigeben und es beim Aufruf neu erzeugen. Dann hast Du auch keine Rundungseffekte, jedenfalls wenn Du BorderStyle bsSingle setzt.

Grüße, Messie


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 Uhr.
Seite 2 von 3     12 3      

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