Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Frame an Hauptformular automatisch anpassen (https://www.delphipraxis.net/102253-frame-hauptformular-automatisch-anpassen.html)

gsh 25. Okt 2007 15:18


Frame an Hauptformular automatisch anpassen
 
Hi Leute

Ich stehe vor einem Design Problem.
Ich hab verschiedene Frames die ich in das Hauptformular einbinde je nachdem was der Benutzer halt gerade machen möchte.

So nun ist der Frame im Designer ca. 300x300 Pixel groß. (manche Frames haben andere Größen)
Und wenn ich jetzt den Frame ins Hauptformular lade das sagen wir mal 600x600 Pixel groß (kann sich ja jeder selber einstellen) dann sind die Komponenten alle links oben im Eck und der rest ist leer. Des schaut verdamt blöd aus. So nun hab ich mir gedacht wär es ganz fein wenn sich alle Kompos automatisch anpassen. So als würde ich rein zommen. in diesem fall müsste alles doppelt so groß werden aber auch die positionen müssten sich verändern das alles gleich angeordnet bleibt nur halt größer.

Habt ihr eine Idee für mich wie ich des flexibel lösen kann ... also ohne hardcodete Komponentennamen und so?


//edit: Fehler ausgebessert

Phoenix 25. Okt 2007 15:20

Re: Frame an Hauptformular automatisch anpassen
 
Es gibt Anchors und Constraints.
Mit den Anchors kannst Du eine Komponenten an den Seiten des Parents festmachen - will heissen: Der Abstand bleibt immer der gleiche.

Mit den Constraints kannst Du minimal- und Maximalgrößen festlegen. z.B. die 300x300 Pixel des Frames als Mindestgröße.

Spiel einfach mal damit rum - funktioniert auch alles im Designer.

shmia 25. Okt 2007 15:29

Re: Frame an Hauptformular automatisch anpassen
 
Zusätzlich gibt es auch noch TSplitter (Palettenseite "Zusätzlich").
Damit kann der Benutzer selbst entscheiden (in vorgegebenen Grenzen) wieviel Platz er bestimmten Controls einräumt.
Damit TSplitter funktioniert, muss man verstanden haben, wie man das Property Align einsetzt.

gsh 29. Okt 2007 16:28

Re: Frame an Hauptformular automatisch anpassen
 
Zitat:

Zitat von Phoenix
Es gibt Anchors und Constraints.
Mit den Anchors kannst Du eine Komponenten an den Seiten des Parents festmachen - will heissen: Der Abstand bleibt immer der gleiche.

Mit den Constraints kannst Du minimal- und Maximalgrößen festlegen. z.B. die 300x300 Pixel des Frames als Mindestgröße.

Spiel einfach mal damit rum - funktioniert auch alles im Designer.

hab jetzt endlich ein problem gelöst wodurch ich mich jetzt wieder diesem zuwenden kann

also ich hab mit den Anchors rumgespielt aber dadurch bekomme ich keine gute ergebnisse:
wenn ich z.b. [akLeft,akTop,akRight,akBottom] einstelle
dann ziehen sich zwar alle buttons auf aber sie überlagern sich

oder bei [akRight,akBottom]
bleibt alles an der rechten unteren ecke hängen

außerdem funktioniert des nur im desginer aber nicht im prog.
(Das Frame ist auf einem PageControl des auf der Hauptform liegt)

Zitat:

Zitat von shmia
Zusätzlich gibt es auch noch TSplitter (Palettenseite "Zusätzlich").
Damit kann der Benutzer selbst entscheiden (in vorgegebenen Grenzen) wieviel Platz er bestimmten Controls einräumt.
Damit TSplitter funktioniert, muss man verstanden haben, wie man das Property Align einsetzt.

ich glaub du hast meine frage falsch verstanden. Ich kenn TSplitter :zwinker: aber dafür ist er ungeeignet. Trotzdem danke

Deep-Sea 29. Okt 2007 16:36

Re: Frame an Hauptformular automatisch anpassen
 
Ich kenne Programmierer, die seit vielen Jahren auch kommerzielle Software mit Delphi entwickeln und bis heute nicht den Sinn und die Macht von Anchors und Align verstanden haben. Seit D2007 nutze ich dank der "Erscheinung" von Margins und Padding fast nur noch Align, dies ist besonders bei Frames "sicherer" als Anchors - hab damit schon leidige Erfahrungen gemacht. :-D

Was ich sagen will: Sicher geht das, was du willst damit, aber du musst schon verstehen wie es alles abläuft und ggf. auch das ein oder andere Panel als Container nutzen. :o

Du kannst natürlich auch wirklich mit "ScaleBy" skalieren, aber ich würde sagen, dass das erst mal richtig schei** aussieht und nicht gerade dafür gedacht ist :roll:

shmia 29. Okt 2007 16:42

Re: Frame an Hauptformular automatisch anpassen
 
Zitat:

Zitat von gsh
Zitat:

Zitat von shmia
Zusätzlich gibt es auch noch TSplitter (Palettenseite "Zusätzlich").
Damit kann der Benutzer selbst entscheiden (in vorgegebenen Grenzen) wieviel Platz er bestimmten Controls einräumt.
Damit TSplitter funktioniert, muss man verstanden haben, wie man das Property Align einsetzt.

ich glaub du hast meine frage falsch verstanden. Ich kenn TSplitter :zwinker: aber dafür ist er ungeeignet. Trotzdem danke

Und du hast mich missverstanden.
Phoenix hat dir 2 Möglichkeiten genannt, wie du das Verhalten von Controls beeinflussen kannst.
Das Wichtigste Property ist aber Align, denn damit kann man grössenveränderliche Controls sinnvoll an den Container (Panel, Form, Frame, ...) anpassen.
Es gibt 2 Arten von Controls:
1.) grössenveränderliche (TPanel, TMemo, TListbox, TPaintBox, TCheckListBox, ...)
2.) nicht grössenveränderliche (TLabel, TEdit, TComboBox, TCheckbox, TButton, ...)
Das soll nicht heisen, dass ein TEdit nicht vergrössert werden kann, aber es macht keinen Sinn.
Wenn man ein TMemo auf Fenstergrösse bringt, dann macht das sehr wohl einen Sinn.
Also jetzt stellt sich die Frage: verwendest du hauptsächlich Controls der Kategorie 1.) oder 2.)?

gsh 29. Okt 2007 16:50

Re: Frame an Hauptformular automatisch anpassen
 
Typ2:
Das ist ja gerade das Problem da ich somit nicht gut mit Align arbeiten kann.

shmia 29. Okt 2007 17:00

Re: Frame an Hauptformular automatisch anpassen
 
Zitat:

Zitat von gsh
Typ2:
Das ist ja gerade das Problem da ich somit nicht gut mit Align arbeiten kann.

Dann macht es aber auch wenig Sinn, hier irgendwelche Massnahmen vorzunehmen, um die Controls besser zu verteilen.
Angenommen links steht immer ein Label und jeweils rechts davon ein TEdit, TcomboBox oder TCheckBox. z.B. für irgendwelche Programmoptionen.
Wenn man den Zeilenabstand verdoppelt sieht das IMHO auch nicht (viel) besser aus.
Wenn in dem Frame die Information über die Anzahl der Zeilen und eine Zuordnung von Control zur Zeilennr vorhanden wäre, könnte man natürlich die Controls automatisch über die gesamte Fläche (vertikal) verteilen.
Wenn deine Controls aber wirklich diese Struktur haben, dann sähe doch eine Art Laufzeit Objektinspektor viel besser aus.

gsh 29. Okt 2007 17:49

Re: Frame an Hauptformular automatisch anpassen
 
Zitat:

Zitat von shmia
Dann macht es aber auch wenig Sinn, hier irgendwelche Massnahmen vorzunehmen, um die Controls besser zu verteilen.
Angenommen links steht immer ein Label und jeweils rechts davon ein TEdit, TcomboBox oder TCheckBox. z.B. für irgendwelche Programmoptionen.
Wenn man den Zeilenabstand verdoppelt sieht das IMHO auch nicht (viel) besser aus.
Wenn in dem Frame die Information über die Anzahl der Zeilen und eine Zuordnung von Control zur Zeilennr vorhanden wäre, könnte man natürlich die Controls automatisch über die gesamte Fläche (vertikal) verteilen.
Wenn deine Controls aber wirklich diese Struktur haben, dann sähe doch eine Art Laufzeit Objektinspektor viel besser aus.

naja des problem ist des es so alleine und verlassen aussieht wenn die ganzen optionen in der linken oberen ecke sind.
und da wäre es meiner ansicht besser wenn sie verteiltel und z.b. die buttons größer werden. vllt. auch die edit felder dann müsste man nur die schriftgröße anpassen

Deep-Sea 30. Okt 2007 07:25

Re: Frame an Hauptformular automatisch anpassen
 
Zitat:

Zitat von gsh
[...] und da wäre es meiner ansicht besser wenn sie verteiltel und z.b. die buttons größer werden. vllt. auch die edit felder dann müsste man nur die schriftgröße anpassen

Habe ich nicht schon mal gesagt, dass wenn du das wirklich machen willst, es die Funktion "ScaleBy" gibt?! :stupid: ...


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

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