AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte ssLayout-Komponente
Thema durchsuchen
Ansicht
Themen-Optionen

ssLayout-Komponente

Ein Thema von stahli · begonnen am 18. Aug 2013 · letzter Beitrag vom 7. Okt 2013
Antwort Antwort
Benutzerbild von stahli
stahli
Registriert seit: 26. Nov 2003
Ich habe eine Layout-Komponente erstellt, mit der man m.E. ganz komfortabel Controls anhand definierter Regeln ausrichten kann.
Man definiert Bereiche, in die die Controls automatisch eingepasst werden. Die Align-Eigenschaften werden dabei nicht benutzt.

Video: http://youtu.be/Ta2EYxczge4

Im Moment funktioniert die Komponente unter XE3 - Firemonkey.

Es sollte aber auch möglich sein, die Komponente und den Komponenteneditor unter älteren VCL-Versionen umzusetzen.
In dem Fall müsste ich allerdings auf den Einsatz des ssFrameWorks verzichten, das im Moment die Datenbindung realisiert.

Wenn Interesse besteht, könnte ich entsprechende Umstellungen vornehmen.

In jedem Fall würden mich Rückinfos (Meinungen und Vorschläge) sehr freuen.

Nachti, Nachti,
Stahli


PS: Anbei die Exe, die im Video erzeugt wurde.
Das Projekt enthält keine Zeile Code und die Controls wurden nicht über Align o.ä. ausgerichtet.
Angehängte Dateien
Dateityp: zip ssLayoutDemo.zip (4,03 MB, 47x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (12. Mär 2015 um 23:18 Uhr)
 
Furtbichler
 
#2
  Alt 18. Aug 2013, 13:01
Eine schöne Arbeit. Leider hat man einen sehr hohen Aufwand, um komplexe Formulare zu erstellen. Weiterhin liegt die Stärke des Layouts in der Möglichkeit, Formulare zu skalieren. Nur das ist -zumindest bei Datenerfassungsdialogen- meist nicht erwünscht: Wieso sollte ein Feld 'Kontonummer' wachsen können? Es sind fest (z.B. 16 Stellen), fertig. Das Eingabefeld hat somit eine konstante Größe. Ähnliches gilt für Namen, Datum usw. Nur in seltenen Fällen (Memo, Bild) ist eine Skalierung sinnvoll. Selbst Grids sollten bzw. könnten eine fixe Größe haben, aber hier kommt es auf die Komponente, die Sorgfalt des Programmierers und vor allen Dingen auf den Kunden an ("Ich will alles sehen").

Egal, meist sind Dialoge in ihrer Größe nicht veränderbar. Das definiert Windows auch so.

Aber vermutlich ist das bei FMX und der Entwicklung für unterschiedliche Geräte und Bildschirmgrößen anders.

Ich würde mir wünschen, wenn jedes Control mit einem Label versehen werden kann, d.h. man kann jeden Bereich beschriften. Die Lage der Beschriftung sowie der Abstand zum Control ist dann für jedes TssLayout einstellbar. Die Breite bzw. Höhe des Beschriftungsbereiches ist dann so zu wählen, das alle Beschriftungen gleich breit sind.

Schau Dir mal die TdxLayoutControl-Komponente von DevExpress an (Demo gibts bei denen)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

 
Delphi 11 Alexandria
 
#3
  Alt 18. Aug 2013, 14:35
Ja, die dxLayout ist schon beeindruckend.

Meine Komponente hat aber einen anderen Anspruch. Es geht eher um das Aufteilen eines Formulars in unterschiedliche Bereiche und deren Ausrichtungen. Hilfreich ist das schon zur Designtime auch wenn z.B. ein Dialog dann für den User letztlich nicht größenänderbar ist.

Beschriftungen und Ausrichtungen von Edits usw. habe ich hier nicht vorgesehen (das kann dann innerhalb einer Region geregelt werden).

Geändert von stahli (18. Aug 2013 um 23:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

 
Delphi 11 Alexandria
 
#4
  Alt 6. Okt 2013, 16:51
Mal ein Zwischenstand, allerdings erst mal nur als Video: http://youtu.be/iBi6SM3fjEs

Wenn ich den Komponenteneditor angepasst und die verschiedenen Options realisiert habe werde ich das Package komplett vorstellen.

Die letzten 3 Tabs bilden schon mal reale Situationen ab.
Die ersten 2 sind eher Testfälle.

Bis auf die Timerereignisse für die Formulargrößenänderung braucht das Projekt keinen Quelltext.
Die komplexen Anordnungen sind durch die klassischen Layouteigenschaften und Komponenten m.E. nicht zu erreichen.
  Mit Zitat antworten Zitat
Der schöne Günther

 
Delphi 10 Seattle Enterprise
 
#5
  Alt 6. Okt 2013, 21:17
Wie schon an anderer Stelle: Dem Ding zuzuschauen ist irgendwie putzig

Vor allem der letzte Bildschirm macht es wirklich spannend, das läuft ja wirklich in Perfektion.

Eins fällt mir noch ein: Wie verhält es sich mit Komponenten, die in sich selbst wieder Spaltenbreiten haben wie beispielsweise ein TDBGrid?

PS: Immer wieder klasse, was YouTube bei Videos im kleineren Kreis für Vorschläge für weitere Videoclips hat. Ancient massacre being discovered by archeologists, Webhosting powered by Hulk Hogan, ...
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

 
Delphi 11 Alexandria
 
#6
  Alt 7. Okt 2013, 10:07
"Putzig" war jetzt eigentlich nicht beabsichtigt.
Aber das sind ja auch nur die Nebeneffekte bzw. Extremfälle.

Die ssLayout verändert lediglich die Positionen und Größen der enthaltenen Controls.
Ein DBGrid würde sich entsprechend genau verhalten als wenn es z.B. mit alClient positioniert wäre oder seine Breite durch "DBGrid1.Width := 200;" ändern würde.

Zur Verdeutlichung hätte ich in die Memos mal Text setzen können.
Es wird nichts scaliert oder so, sondern nur die Controls neu positioniert.

An den Controls selbst wird auch nichts verändert. Das sind weiterhin ganz normale Edits, Memos usw. Man kann sie auch jederzeit auf ein Panel umsetzen, wenn man die Ausrichtungsmöglichkeiten nicht mehr braucht.

Man kann sich durch die ssLayout eben die x-fache Verschachtelung diverser Panels, Reaktionen in OnResize u.ä. sparen auch wenn man komplexere Anordnungsregeln benötigt.

Geändert von stahli ( 7. Okt 2013 um 10:31 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
 
#7
  Alt 7. Okt 2013, 18:29
Ja, aber in welchem realen Fall will man denn, das die Controls so umherwandern? 99% aller Controls haben (bei konstantem Font) eine feste Größe, weil z.B. die Kundennummer nun einmal 6-stellig ist. Da muss nix wandern. Die einzigen Controls, die dehnbar sein könnten, sind doch Memos, Grids und Bildchen.

Ich kann mir einfach keinen konkreten Fall aus der echten Welt vorstellen, wo das sinnvoll ist.


Aber deine Einteilung in waagerechte oder senkrechte Bereiche ist schon sehr praktisch. Allerdings sind bei mir *immer* der obere (Titelzeile) und der untere (Buttons) Panel fest (z.B. 50 pixel). Also reichen mir 3 Panels (header, client, buttons).
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

 
Delphi 11 Alexandria
 
#8
  Alt 7. Okt 2013, 18:56
Das Zusammenschieben der verteilten Controls ist natürlich nur ein Nebeneffekt.

Ein recht reales Beispiel ist im letzten Tab zu sehen. In Tab 3 und 4 im Grunde auch schon.
Natürlich ist die Komponente vor allem nützlich, wenn mehrere dehnbare Controls (und dazwischen ggf. auch nicht dehnbare) eingesetzt werden und/oder sonst kompliziere Berechnungen für die Anordnungen notwendig würden.

Wenn Du nur 3 Bereiche brauchst, oben und unten fix und in der Mitte alClient, dann bringt Dir die ssLayout nicht viel.
Für alles, was darüber hinaus geht (schon wenn der Header und Footer in bestimmten Grenzen mitwachsen soll oder zusätzliche Regionen benötigt werden) wird sie schon sehr helfen.

Mit Hilfe der ssLayout kann man Komponenten einfach aneinander docken, wobei dann automatisch einheitliche Abstände definiert werden.

Ich mache das einfach mal fertig, vielleicht überzeugt es ja dann doch noch...
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:32 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