![]() |
Sollte man ColumnSpan/RowSpan noch verwenden?
Liste der Anhänge anzeigen (Anzahl: 2)
Wird allgemein davon abzuraten, in einem Gridpanel einzelne Komponenten mehrere Zeilen und/oder Spalten füllen zu lassen? In Bild 1 ein einfaches Beispiel: Das Gridpanel ist 2x2 groß, ein Button ist zwei Spalten breit (2x1), die anderen beiden normal 1x1.
Mich treibt folgendes in den Wahnsinn: Baut man den auf Bild 1 abgebildeten Frame nun irgendwo ein, ist alles noch in Ordnung. Noch. Nach einem Programmstart geht Delphi gerne hin und entfernt die ColumSpan/RowSpan-Angaben. Sie sind einfach weg. Das Ergebnis sieht man auf Bild 2. Ich habe keine Ahnung, nach welchem Muster das passiert. Aber es ist nachstellbar. Die Frame-Inhalt liegt immer redundant kopiert auf dem Formular und das zerpfuscht er sich gerne. Stark verwandt ist ![]() Ich würde gerne wissen: Wie bastelt Ihr eure Layouts? Wenn Colspan/Rowspan so fehlerhaft ist kann damit ja kein Mensch arbeiten... |
AW: Sollte man ColumnSpan/RowSpan noch verwenden?
Du hast das Glück, dass das GridPanel bei dir zumindest läuft. :mrgreen:
Wenn ich damit auf die gleiche Weise ein Layout basteln will, setzt er die Column- und RowSpans schon beim Compilen zurück und beim Start der Anwendung erhalte ich dann die Meldung "Eine Spalte die ein Steuerelement enthält, kann nicht gelöscht werden". Bumm und fertig und das Programm terminiert mit 'ner Exception wieder zurück in die IDE. GridPanel scheint 'ne schöne Idee zu sein, wenn sie nur funktionieren würde. Leider habe ich auch noch keine anderen Lösungen gefunden, TMS und Jedi bieten auch keine Alternativen an. :( |
AW: Sollte man ColumnSpan/RowSpan noch verwenden?
Ja, meistens schon beim Kompilieren. Ein kleiner Trick ist, dass Formular danach zu Schließen. Er wird die DFM nicht kaputtspeichern da er ja auch der Meinung ist, dass sich nichts geändert hat.
Ich finde das Gridpanel essenziell. Ich wüsste ehrlich gesagt nicht, wie man ohne überhaupt eine Oberfläche zusammenbekäme. Aber die ColSpan/Rowspan-Eigenschaften sind irgendwie- Wenn auf eingebetteten Frames- kaputt... |
AW: Sollte man ColumnSpan/RowSpan noch verwenden?
Hast du schon einen QC Eintrag mit einem guten Beispiel usw. erstellt? Wenn nicht, wird das wohl kaum behoben werden.
Ich selbst hatte damit bisher nur manchmal ein wenig Probleme die Prozentwerte richtig zu definieren, aber sonst funktionierte bei mir alles. Besonders oft habe ich das aber auch nicht benutzt, in der Regel reichen mir Align, Anchors & Co vollkommen aus. |
AW: Sollte man ColumnSpan/RowSpan noch verwenden?
Nein, als erstes muss ich ja wissen, ob ich etwas offensichtliches falsch mache und ob das jemand nachstellen kann.
In reinem Code kann man das nicht nachstellen. Was sollte ich schreiben? "Drücke ein paar mal F9 und F12, irgendwann wirds schon kaputt gehen."? :-D Bevor wir uns dem QC zuwenden: Könnte es an der
Delphi-Quellcode:
-Direktive der entsprechenden Properties liegen?
Default
Delphi-Quellcode:
Ich versuche derweil einmal herauszufinden, ob man eine 100%ig sichere Möglichkeit hat, dass Properties ungewollt auf 1 zurückspringen.
TControlItem = class(TCollectionItem)
[...] published property ColumnSpan: TCellSpan read FColumnSpan write SetColumnSpan default 1; property RowSpan: TCellSpan read FRowSpan write SetRowSpan default 1; end; PS: Hier zum Vergleich die DFMs: Frame
Delphi-Quellcode:
wird auf dem Formular mit der Zeit abgebildet durch
object GridPanel1: TGridPanel
[...] ColumnCollection = < item Value = 50.000000000000000000 end item Value = 50.000000000000000000 end> ControlCollection = < item Column = 0 ColumnSpan = 2 Control = Button1 Row = 0 RowSpan = 2 end > object Button1: TButton [...] end end
Delphi-Quellcode:
object Form25: TForm25
inline Frame261: TFrame26 [...] inherited GridPanel1: TGridPanel ControlCollection = < item Column = 0 Control = Frame261.Button1 Row = 0 end > inherited Button1: TButton [...] end end end end |
AW: Sollte man ColumnSpan/RowSpan noch verwenden?
Zitat:
Habs jetzt explizit nochmal nach deiner Anleitung gemacht und bei mir setzt er die ColumSpan für Button1 schon zurück, wenn ich nur Strg+F9 drücke. |
AW: Sollte man ColumnSpan/RowSpan noch verwenden?
Ja, ich habe nur Angst, da eine halbe Stunde Arbeit reinzustecken, wenn es bei Embarcadero dann jemand nachstellen will klappt es nicht beim ersten Versuch und wird direkt abgestempelt und beiseite gelegt.
Ich hatte es übrigens beim letzten Versuch schon falsch direkt als man den Frame eingefügt hat ;-) |
AW: Sollte man ColumnSpan/RowSpan noch verwenden?
Den QC gibt es schon, allerdings ist der schon länger nicht bearbeitet und ist so bei mir auch nicht mehr reproduzierbar mit XE5:
![]() Ich kann es jedoch 100%ig nachstellen, wenn ich es so mache (auf zwei PCs getestet):
Im Formularcode sieht man auch was passiert. Beim Kompilieren werden zwar auch die inherited Komponenten im Formularcode angelegt, aber dabei werden ColumnSpan und RowSpan nicht geschrieben. Ich habe einmal einen neuen QC angelegt: ![]() |
AW: Sollte man ColumnSpan/RowSpan noch verwenden?
Das
Delphi-Quellcode:
tut nix (will nur spielen) und ist - abstrakt betrachtet - nur ein einfaches Attribut ohne jede aktive Auswirkung.
default
![]()
Delphi-Quellcode:
TMyComponent = class( TComponent )
private const DEFAULT_MYVALUE = 1; private FMyValue : integer; public procedure AfterConstruction; override; published property MyValue : integer read FMyValue write FMyValue default DEFAULT_MYVALUE; end; procedure TMyComponent.AfterConstruction; begin inherited; // Man muss selber dafür sorgen, wenn mit dem Default-Wert initialisiert werden soll FMyValue := DEFAULT_MYVALUE; end; |
AW: Sollte man ColumnSpan/RowSpan noch verwenden?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 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