AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sollte man ColumnSpan/RowSpan noch verwenden?

Ein Thema von Der schöne Günther · begonnen am 12. Mär 2014 · letzter Beitrag vom 15. Mär 2014
Antwort Antwort
Seite 1 von 2  1 2      
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Sollte man ColumnSpan/RowSpan noch verwenden?

  Alt 12. Mär 2014, 09:48
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 meine Frage von vor ein paar Monaten.

Ich würde gerne wissen: Wie bastelt Ihr eure Layouts? Wenn Colspan/Rowspan so fehlerhaft ist kann damit ja kein Mensch arbeiten...
Miniaturansicht angehängter Grafiken
1.png   2.png  
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Sollte man ColumnSpan/RowSpan noch verwenden?

  Alt 12. Mär 2014, 10:54
Du hast das Glück, dass das GridPanel bei dir zumindest läuft.

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.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Sollte man ColumnSpan/RowSpan noch verwenden?

  Alt 12. Mär 2014, 11:56
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...
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.356 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Sollte man ColumnSpan/RowSpan noch verwenden?

  Alt 12. Mär 2014, 13:21
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Sollte man ColumnSpan/RowSpan noch verwenden?

  Alt 12. Mär 2014, 13:41
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."?

Bevor wir uns dem QC zuwenden: Könnte es an der Default -Direktive der entsprechenden Properties liegen?

Delphi-Quellcode:
TControlItem = class(TCollectionItem)
   [...]
   published
      property ColumnSpan: TCellSpan read FColumnSpan write SetColumnSpan default 1;
      property RowSpan: TCellSpan read FRowSpan write SetRowSpan default 1;
end;
Ich versuche derweil einmal herauszufinden, ob man eine 100%ig sichere Möglichkeit hat, dass Properties ungewollt auf 1 zurückspringen.


PS:

Hier zum Vergleich die DFMs:

Frame
Delphi-Quellcode:
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
wird auf dem Formular mit der Zeit abgebildet durch
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

Geändert von Der schöne Günther (12. Mär 2014 um 13:50 Uhr)
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Sollte man ColumnSpan/RowSpan noch verwenden?

  Alt 12. Mär 2014, 14:45
Nein, als erstes muss ich ja wissen, ob ich etwas offensichtliches falsch mache und ob das jemand nachstellen kann.
Wie schon gesagt: Ich kanns nachstellen. Allerdings mit 'nem komplexeren Layout, aber nach dem gleichen Prinzip.

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.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Sollte man ColumnSpan/RowSpan noch verwenden?

  Alt 12. Mär 2014, 16:25
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
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.356 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Sollte man ColumnSpan/RowSpan noch verwenden?

  Alt 15. Mär 2014, 08:45
Den QC gibt es schon, allerdings ist der schon länger nicht bearbeitet und ist so bei mir auch nicht mehr reproduzierbar mit XE5:
http://qc.embarcadero.com/wc/qcmain.aspx?d=92298

Ich kann es jedoch 100%ig nachstellen, wenn ich es so mache (auf zwei PCs getestet):
  • Projekt schließen und neu öffnen
  • Frame auf das Formular legen
  • Ohne weitere Aktionen kompilieren oder ausführen
Geht man hingegen nachdem der Frame auf dem Formular liegt auf Speichern oder schaut mit Alt + F12 in den Formularcode, passiert das nicht.

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:
http://qc.embarcadero.com/wc/qcmain.aspx?d=123225
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Sollte man ColumnSpan/RowSpan noch verwenden?

  Alt 15. Mär 2014, 08:59
Das default tut nix (will nur spielen) und ist - abstrakt betrachtet - nur ein einfaches Attribut ohne jede aktive Auswirkung.

Delphi - Eigenschaften - Speicherbezeichner

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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (15. Mär 2014 um 09:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#10

AW: Sollte man ColumnSpan/RowSpan noch verwenden?

  Alt 15. Mär 2014, 10:09
Das default tut nix (will nur spielen) und ist - abstrakt betrachtet - nur ein einfaches Attribut ohne jede aktive Auswirkung.
Das stimmt nicht ganz! Beim Streaming der Komponente wird ein Property nur dann gespeichert, wenn sein Wert ungleich des Default-Werts ist (außer es gibt noch ein stored Attribut). Auch ohne Angabe eines Default haben z.B. String-Properties den Default <leerstring> und Integer-Properties den Default 0.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:57 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