TSplitter geht nicht von Anschlag zu Anschlag

Rund um die LCL und andere Komponenten
Antworten
Mathias
Beiträge: 6956
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

TSplitter geht nicht von Anschlag zu Anschlag

Beitrag von Mathias »

Ich habe ein kleines Demo mit einem Spiltter.
Wen ich den Splitter nach links schiebe, geht er bis zum Formrand. Aber rechts bleibt ein Rand welcher mit Splitter.MinSize eingestellt werden kann, welcher aber nicht kleiner als 30 geht.
Nun zur Fragen.
  • Wieso geht es nicht kleiner als 30.
  • Wie kann man dies auf der linken Seite einstellen ?
Dateianhänge
splitter_test.zip
(137.22 KiB) 32-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 5191
Registriert: Fr 8. Apr 2011, 09:01

Re: TSplitter geht nicht von Anschlag zu Anschlag

Beitrag von wp_xyz »

Mathias hat geschrieben: Mi 3. Jul 2024, 19:35 Ich habe ein kleines Demo mit einem Spiltter.
Wen ich den Splitter nach links schiebe, geht er bis zum Formrand. Aber rechts bleibt ein Rand welcher mit Splitter.MinSize eingestellt werden kann, welcher aber nicht kleiner als 30 geht.
Nun zur Fragen.
  • Wieso geht es nicht kleiner als 30.
  • Wie kann man dies auf der linken Seite einstellen ?
Ist mir noch gar nicht aufgefallen...

Auf der linken Seite kannst du Panel1.Constraints.MinWidth := 30 setzen, dann bleibt auch dort dies als Rand stehen.

Im Quellcode von TCustomSplitter findet man:

Code: Alles auswählen

procedure TCustomSplitter.SetMinSize(const AValue: integer);
begin
  if (FMinSize=AValue) or (AValue < 1) then Exit;
  FMinSize := AValue;
end;
Wenn der neue Wert von MinSize 0 ist, wird der Setter wegen "if ... (AValue < 1)" sofort verlassen, d.h. die Angabe 0 ist wirkungslos. Wenn du aber den neuen Wert schon auf 1 setzt, funktioniert es.

Ich habe mal spaßeshalber das "if ... (AValue < 1)" auskommentiert und einen Hänger erwartet, wenn der Splitter ganz nach rechts geschoben wird. Aber nein - da passiert nichts, das Test-Programm läuft weiter. Keine Ahnung, warum das so im Code steht - wahrscheinlich historisch bedingt... Kannst ja einen Bug-Report schreiben, vielleicht kümmert sich jemand darum.

Mathias
Beiträge: 6956
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: TSplitter geht nicht von Anschlag zu Anschlag

Beitrag von Mathias »

Wenn der neue Wert von MinSize 0 ist, wird der Setter wegen "if ... (AValue < 1)" sofort verlassen, d.h. die Angabe 0 ist wirkungslos. Wenn du aber den neuen Wert schon auf 1 setzt, funktioniert es.
Ich habe natürlich 0 probiert. :roll:

Danke für den Tip
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten