Delphi-PRAXiS

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/)
-   -   Delphi Main-Form zurücksetzen bzw. neuerstellen nach ChangeScale (https://www.delphipraxis.net/194509-main-form-zuruecksetzen-bzw-neuerstellen-nach-changescale.html)

CodeX 30. Nov 2017 17:14

Main-Form zurücksetzen bzw. neuerstellen nach ChangeScale
 
Ich würde gerne
Delphi-Quellcode:
ChangeScale
verwenden, um die Programmoberfläche bei Bedarf vergrößern zu können. Das funktioniert auch erstaunlich gut (mit diversen manuellen Anpassungen).

Das Problem ist, wenn ich es danach dann doch wieder auf die ursprüngliche Größe setzen möchte. ChangeScale bezieht sich immer auf die aktuellen Abmessungen und nicht auf die ursprünglichen. Wenn man also mehrfach hin und her skaliert, sieht alles ziemlich kaputt aus, da Kommawerte jedes Mal abgeschnitten, wodurch sich Rundungsungenauigkeiten aufschaukeln.

Die einfachste Lösung wäre doch, bei jedem Skalieren die Form in den Ursprungszustand zu versetzen und dann davon ausgehend ChangeScale anzuwenden.

Aber wie bekommt man das am besten hin?
Da es sich um die Main-Form handelt, kann ich diese nicht einfach freigeben und wieder erstellen, da sich dann ja das gesamte Programm beendet.

Gibt es einen anderen Weg, die gesamte Form entsprechend der Ressourcen wieder zurückzusetzen?

Rollo62 1. Dez 2017 05:56

AW: Main-Form zurücksetzen bzw. neuerstellen nach ChangeScale
 
Versuch mal ob das hier funktioniert, müsste man vielleicht an neuere DelpiVersionen anpassen.

Rollo

Jasocul 1. Dez 2017 07:38

AW: Main-Form zurücksetzen bzw. neuerstellen nach ChangeScale
 
Such mal nach TResizeKit. Man muss das Rad ja nicht neu erfinden und das funktioniert eigentlich ganz gut. Fehlendes Verhalten kann man über ein Ereignis leicht nachrüsten. Die Komponente ist allerdings kostenpflichtig.

Ich habe das mal in ähnlicher Form nachprogrammiert mit ein paar speziellen hausinternen Anpassungen. Waren auch nur 500 Zeilen Code.

CodeX 1. Dez 2017 11:48

AW: Main-Form zurücksetzen bzw. neuerstellen nach ChangeScale
 
Also meine Hoffnung ist ja, dass es einfach eine Möglichkeit gibt, die MainForm per VCL oder Windows-API in den Ursprungszustand zu versetzen. Dann wäre mein Problem ja schon gelöst, denn das Hochskalieren funktioniert ja bereits.

Weder TResizeKit2 noch EasySize/TFormResizer scheinen für mich geeignet zu sein, weil es bei meinem Programm standardmäßig möglich sein soll, die Formgröße zu ändern, ohne dass alles darin skaliert (die relevanten Komponenten passen sich per Align und Anchors an). Nur bei Bedarf soll der Anwender "zoomen" können. Das funktioniert ja alles mit ChangeScale bereits wunderbar in eine Richtung. Aufgrund der abgeschnittenen Kommawerte aller Abmessungen aber nicht sonderlich gut zurück. Vielleicht ist es irgendwie möglich, diese Komponenten für meinen Zweck umzubiegen, aber ich bin mir recht sicher, dass ich mir damit nur andere Probleme reinhole.

Der Link in der zweiten Antwort bei SO führt leider ins Leere:
http://delphi.about.com/od/adptips20...controlpos.htm
Sonst hätte ich das gerne gelesen und ggf. ausprobiert. Das klingt von der Beschreibung her eigentlich genau danach, was ich bräuchte.

Die dritte Antwort bei SO verstehe ich nicht wirklich. Die Maße der Komponenten werden dadurch ja trotzdem mehrfach neu berechnet und jedes Mal werden die Größen und Positionen ganzzahlig abgeschnitten. Das macht die Werte doch trotzdem kaputt.

Jasocul 1. Dez 2017 12:09

AW: Main-Form zurücksetzen bzw. neuerstellen nach ChangeScale
 
Vielleicht klingt das jetzt banal, aber merke dir doch einfach die Start-Werte und verwende diese an der richtigen Stelle.

CodeX 1. Dez 2017 12:19

AW: Main-Form zurücksetzen bzw. neuerstellen nach ChangeScale
 
Zitat:

Zitat von Jasocul (Beitrag 1387706)
Vielleicht klingt das jetzt banal, aber merke dir doch einfach die Start-Werte und verwende diese an der richtigen Stelle.

Bei einer handvoll Komponenten würde ich das ja machen. Sind aber schon ein paar mehr und über Panels und Groupboxes verschachtelt. Wenn, dann müsste ich da rekursiv alle Komponenten durchgehen und mir ein System zurechtlegen, alle deren Werte zu speichern. Das erscheint mir dann nicht mehr so banal.

Mal ganz davon abgesehen: Die Werte sind doch schonin den Resourcen gespeichert. Ich glaube, der 404-Link hat beschrieben, wie man diese ausliest und wieder anwendet.

Ich bin halt der Meinung, dass wenn die Anwendung sich beim ersten Mal richtig aufbauen konnte, warum dann nicht auch erneut?

Jasocul 1. Dez 2017 13:25

AW: Main-Form zurücksetzen bzw. neuerstellen nach ChangeScale
 
Wenn ich den Kommentar unter dem 404-Link richtig interpretiere, werden dort auch alle Werte beim Start gespeichert.
Ich mache es genauso mit meiner Komponente. Möglicherweise kann man tatsächlich aus den Ressourcen die Start-Werte auslesen, aber auch dann musst du vermutlich alle Komponenten rekursiv durchgehen.
Aber vielleicht kennt ja doch noch jemand eine andere Lösung. Ich werde das jedenfalls verfolgen und gegebenenfalls meine Komponente optimieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:47 Uhr.

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