Constraints von PairSplitter

Rund um die LCL und andere Komponenten
Antworten
sierdolg
Beiträge: 66
Registriert: Mi 24. Okt 2012, 15:50

Constraints von PairSplitter

Beitrag von sierdolg »

Plaziert man auf ein Formular einen horizontalen PairSplitter, maximiert ihn durch "Align:alClient" auf die gesamte Formularfläche, und fügt in jedes seiner Tochterpanels (PairSplitterSide1 und PairSplitterSide2) ein beliebiges visuelles Element ein (z.B. TButton), das jeweils seinerseits per "Align:alClient" auf die gesamte Teilfläche ausgerichtet wird, dann läßt sich der PairSplitter jeweils bis zu den Rändern des Formulars ziehen, d.h. eines der beiden SplitterSideX-Inhalten komplett ausblenden.

Will man das verhindern und eine Mindestbreite für die Buttons sicherstellen, würde man zunächst erwarten, daß die beiden SplitterSideX über die üblichen Constraints-Eigenschaften verfügen, was laut Objektinspektor allerdings nicht der Fall zu sein scheint.

Versucht man ersatzweise, eine Minimal-Breite der beiden Buttons zu erzwingen, indem man deren Constraints auf eine Mindestbreite einstellt, so bleibt das zur Laufzeit unbeachtet - der Splitter läßt sich weiter von ganz rechts bis ganz links verschieben.

Kommt man nun auf die Idee, es ersatzweise im Code des Formulars zu versuchen, dann existieren die Constraints der PairSplitterSides erstaunlicherweise doch, und z.B.

Code: Alles auswählen

 
procedure TForm1.FormActivate(Sender: TObject);
begin
  PairSplitterSide1.Constraints.MinWidth:=50;
  PairSplitterSide2.Constraints.MinWidth:=50;
end;  
 
funktioniert auch.

Diese Ersatzlösung ist allerdings weniger übersichtlich und paßt m.E. jedenfalls nicht zum RAD-Konzept des Objektinspektors.

Wie kann man also den Objektinspektor dazu bringen, diese Eigenschaften auch anzuzeigen?
Oder "versteckt" sich das ganze irgendwie unter den "ChildSizing"-Attributen, aus denen ich - als Neuling - noch nicht so ganz schlau geworden bin? :?:

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2905
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Constraints von PairSplitter

Beitrag von m.fuchs »

Du kannst einen Bugreport auf machen, dass die Property Constraints in den published-Teil der Klasse TPairSplitterSide aufgeführt wird. Dann funktioniert es aber erst in späteren Versionen.

Du kannst das auch selber ändern und die LCL neu compilieren. Das funktioniert dann sofort, kann aber (je nach Kenntnisstand) kompliziert sein.

Oder du bleibst bei deiner unschönen Lösung. Das ist die einfachste Variante.


Die Childsizing-Eigenschaften werden dir da nicht weiterhelfen.
0118999881999119725-3

Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

sierdolg
Beiträge: 66
Registriert: Mi 24. Okt 2012, 15:50

[SOLVED] Re: Constraints von PairSplitter

Beitrag von sierdolg »

Hab vielen Dank für die schnelle und kompetente Antwort!

Also, damit alle etwas davon haben, habe ich die Angelegenheit heute zuerst als http://bugs.freepascal.org/view.php?id=25046 eingetragen. Die gute Nachricht "Fixed in Revision => 42854 " kam bereits eine halbe Stunde später.

Für die Übergangszeit habe ich des weiteren die Datei C:\lazarus\lcl\pairsplitter.pas gesucht und eine einzige Zeile eingefügt; hier der relevante Ausschnitt:

Code: Alles auswählen

 
  published
    property ChildSizing;
    property Constraints;  // eingefuegte Zeile 
    property ClientWidth;
 
danach mit "Werkzeuge/Kompiliere Lazarus ..." die IDE neu kompiliert. Problem behoben!

Abschließend bedanke ich mich nochmals herzlich, denn ohne das Stichwort "published" hätte ich die entscheidende Kleinigkeit als bescheidener Anfänger erst mal wohl nicht so schnell gefunden :o)

sierdolg
Beiträge: 66
Registriert: Mi 24. Okt 2012, 15:50

Re: Constraints von PairSplitter

Beitrag von sierdolg »

Huch, wir schreiben September 2014 und in der Linux-Version steckt dasselbe Fehlerteufelchen.

Auch hier reicht es, als Zeile 63

Code: Alles auswählen

 property Constraints;
einzufügen und die IDE neu zu kompilieren.

Bereits gemeldet als http://bugs.freepascal.org/view.php?id=26672.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2905
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Constraints von PairSplitter

Beitrag von m.fuchs »

Lustig, da ist damals wohl der falsche Bug gefixed worden. :D Die Constraints von TPairSplitter waren nämlich auch nicht published.
0118999881999119725-3

Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

sierdolg
Beiträge: 66
Registriert: Mi 24. Okt 2012, 15:50

Re: Constraints von PairSplitter

Beitrag von sierdolg »

Ja, da geht noch mehr!

Code: Alles auswählen

 
  # ...
  { TPairSplitter }
 
  TPairSplitter = class(TCustomPairSplitter)
  published
    property Align;
    property Anchors;
    property BorderSpacing;
    property Color; // this line 126 is missing in lazarus/1.2.6/lcl/pairsplitter.pas
    # ...
 

Antworten