TTabControl Fehler

Rund um die LCL und andere Komponenten
Antworten
HobbyProgrammer
Beiträge: 168
Registriert: Di 29. Okt 2019, 12:51
Wohnort: Deutschland , Baden-Württemberg

TTabControl Fehler

Beitrag von HobbyProgrammer »

Guten Morgen,

ich habe gerade ein Problem mit TTabControl. Wenn ich ein TTabControl auf ein Form lege und Align auf alClient, dann kracht es wenn ich das From auf Autosize setzte. Das ganze ist unabhängig davon ob ich noch weitere Controls auf dem Form habe, oder das TTabControl alleine auf der Form ist.
Auch unabhängig ob unter Linux (Lazarus mir DEB-Paketen installiert, oder mit fpcupdeluxe) oder Windows.
Lazarus Version ist die 2.2.4, FPC 3.2.2
Screenshot_20230221_061806.jpg
Screenshot_20230221_061806.jpg (16.91 KiB) 1406 mal betrachtet
Mache ich da etwas falsch, oder gibt es da wirklich ein Problem?

Grüße HobbyProgrammer
Host: Core i7-12700H, NVIDIA RTX3050 6GB, 32GB Ram, 1TB NVME SSD mit KUbuntu 22.04LTS 64bit , VM KUbuntu 22.04 LTS 64bit mit Lazarus 3.0.0 und Cross-Platform Compiler für Linux 32/64bit und Windows 32/64bit. Wine für erste Tests der Windows Binarys.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TTabControl Fehler

Beitrag von af0815 »

Ich glaube du bist auf ein Feature gestoßen, den ich schon gefunden habe. Das Problem ist, das sich das Tab selbst vergrößern will und sich dabei intern mit dem Rand verkalkuliert. Abhilfe gibt es meines Wissens aktuell nicht, weil das sehr tief eingreift und den wissenden nicht klar ist, wie man das am besten abstellt.

Dazu gab es ein paar Diskussionen, ich weis nur nicht mehr ob das auf der Mailingliste war oder in einem Forum, weil ich habe jetzt mal keinen Bugreport (von mir) dazu gefunden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

HobbyProgrammer
Beiträge: 168
Registriert: Di 29. Okt 2019, 12:51
Wohnort: Deutschland , Baden-Württemberg

Re: TTabControl Fehler

Beitrag von HobbyProgrammer »

Das hatte ich schon befürchtet. Habe gestern Abend bestimmt eine Stunde herumprobiert.
Dann ist TTabControl ja leider nur sehr eingeschränkt zu gebrauchen. Schade, hatte für mich den richtigen Funktionsansatz.
Kann ich den Bug irgendwie nochmal melden, das der evtl. in einer Zukünftigen Version behoben wird?
Host: Core i7-12700H, NVIDIA RTX3050 6GB, 32GB Ram, 1TB NVME SSD mit KUbuntu 22.04LTS 64bit , VM KUbuntu 22.04 LTS 64bit mit Lazarus 3.0.0 und Cross-Platform Compiler für Linux 32/64bit und Windows 32/64bit. Wine für erste Tests der Windows Binarys.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TTabControl Fehler

Beitrag von af0815 »

Gefunden den alten Artikel viewtopic.php?t=13936

Auch den Bugreport https://gitlab.com/freepascal.org/lazar ... sues/39478 - es findet sich seit einem Jahr keiner der sich das umhängen will, ist auch scheinbar nicht so oft genutzt die Komponente.

Soweit ich sehe steht da auch ein WorkAround drinnen mit den Anchors.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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

Re: TTabControl Fehler

Beitrag von wp_xyz »

HobbyProgrammer hat geschrieben:
Di 21. Feb 2023, 06:20
ich habe gerade ein Problem mit TTabControl. Wenn ich ein TTabControl auf ein Form lege und Align auf alClient, dann kracht es wenn ich das From auf Autosize setzte.
Das kann doch eigentlich gar nicht funktionieren. TabControl.Align=alClient bedeutet: Mache das TabControl so groß wie das Formular. Form.AutoSize=true bedeutet: Mache das Formular so groß wie das TabControl (wenn sich nichts anderes auf dem Formular befindet). Also was jetzt? Ein klassisches Henne-Ei-Problem.

Lasse eine von den beiden Bedingungen weg. Das beigefügte Test-Projekt z.B. hat nur Form.AutoSize = true und funktioniert, genauso wie die triviale Änderung zu TabControl.Align = alClient (und Form.AutoSize=false).
Dateianhänge
AutoSize_TabControl.zip
(1.72 KiB) 43-mal heruntergeladen

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: TTabControl Fehler

Beitrag von fliegermichl »

Ein TabControl mit Align = alClient macht sowieso keinen Sinn. Es soll doch nur die Tabs darstellen. Bei einem TPageControl sieht das anders aus. Da ist das TabControl nur am oberen oder seitlichen Rand.

HobbyProgrammer
Beiträge: 168
Registriert: Di 29. Okt 2019, 12:51
Wohnort: Deutschland , Baden-Württemberg

Re: TTabControl Fehler

Beitrag von HobbyProgrammer »

Wenn nur das TabControl auf dem Form liegt kann ich Deinem Argument folgen.
Das ganze passiert aber auch in der MainForm meines Projekts.
Das MainForm hat ein MainMenu, unten eine Statusleiste und darüber mit Align alBottom ein Panel mit weiteren Panels, Groupboxen und Labels in welchen Informationen über das geladene Image usw. angezeigt werden. Das TabControl in welchem sich ein ListView bwfindet soll den restlichen Bereich des MainForm ausfüllen.
Wenn ich nun das MainForm auf Autosize stelle, bin ich davon ausgegangen das es sich soweit zusammenzieht das alle Controls mit einem Mindestabstand sauber sichtbar sind. Daß das TabControl dabei dann in der Höhe evtl. bis auf wenige Pixel verkleinert wird wenn in dem Listview noch keine Daten zu sehen sind, damit hatte ich gerechnet.
Ich kann jetzt leider das MainForm nicht hier dranhängen, da ich mich in der Arbeit befinde und in den Pausen per Smartphone hier schreibe. Das ganze Projekt möchte ich aber in der nächsten Zeit sowieso hier im Forum vorstellen.
Host: Core i7-12700H, NVIDIA RTX3050 6GB, 32GB Ram, 1TB NVME SSD mit KUbuntu 22.04LTS 64bit , VM KUbuntu 22.04 LTS 64bit mit Lazarus 3.0.0 und Cross-Platform Compiler für Linux 32/64bit und Windows 32/64bit. Wine für erste Tests der Windows Binarys.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: TTabControl Fehler

Beitrag von fliegermichl »

Wie schon geschrieben, ich vermute du brauchst ein TPageControl.

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

Re: TTabControl Fehler

Beitrag von wp_xyz »

HobbyProgrammer hat geschrieben:
Di 21. Feb 2023, 12:52
Wenn nur das TabControl auf dem Form liegt kann ich Deinem Argument folgen.
Das ganze passiert aber auch in der MainForm meines Projekts.
Das MainForm hat ein MainMenu, unten eine Statusleiste und darüber mit Align alBottom ein Panel mit weiteren Panels, Groupboxen und Labels in welchen Informationen über das geladene Image usw. angezeigt werden. Das TabControl in welchem sich ein ListView bwfindet soll den restlichen Bereich des MainForm ausfüllen.
OK - das ist deutlich mehr als du eingangs geschrieben hast: "Das ganze ist unabhängig davon ob ich noch weitere Controls auf dem Form habe, oder das TTabControl alleine auf der Form ist.".

Bitte poste ein kleines Minimal-Projekt, bei dem man das Problem sieht und nachvollziehen kann.

@fliegermichl: Die Meinung, dass man bei einem TabControl nur die Tabs sieht, ist nicht richtig. Es kann in der Größe genauso aufgezogen werden wie ein PageControl. Der Unterschied ist, dass ein TabControl immer nur dieselbe Seite zeigt, z.B. mit einem Memo, in das man beim Tab-Wechsel jeweils eine dem Tab ensprechende Datei lädt. Die Seiten des PageControl dagegen können völlig unterschiedliche Komponenten enthalten.

HobbyProgrammer
Beiträge: 168
Registriert: Di 29. Okt 2019, 12:51
Wohnort: Deutschland , Baden-Württemberg

Re: TTabControl Fehler

Beitrag von HobbyProgrammer »

Ich schau mal ob ich heut Abend mich mal kurz an meinen Rechner verziehen kann, ansonsten spätestens am Donnerstag.
Host: Core i7-12700H, NVIDIA RTX3050 6GB, 32GB Ram, 1TB NVME SSD mit KUbuntu 22.04LTS 64bit , VM KUbuntu 22.04 LTS 64bit mit Lazarus 3.0.0 und Cross-Platform Compiler für Linux 32/64bit und Windows 32/64bit. Wine für erste Tests der Windows Binarys.

HobbyProgrammer
Beiträge: 168
Registriert: Di 29. Okt 2019, 12:51
Wohnort: Deutschland , Baden-Württemberg

Re: TTabControl Fehler

Beitrag von HobbyProgrammer »

Guten Morgen,

ich habe euch hier ein Mini-Projekt mit dem kompletten MainForm Entwurf angehängt.
Project1.zip
(152.45 KiB) 55-mal heruntergeladen
Host: Core i7-12700H, NVIDIA RTX3050 6GB, 32GB Ram, 1TB NVME SSD mit KUbuntu 22.04LTS 64bit , VM KUbuntu 22.04 LTS 64bit mit Lazarus 3.0.0 und Cross-Platform Compiler für Linux 32/64bit und Windows 32/64bit. Wine für erste Tests der Windows Binarys.

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

Re: TTabControl Fehler

Beitrag von wp_xyz »

Ich kann den Fehler bestätigen, wenn das AutoSize des Formulars auf true gesetzt ist.

Man kann ihn umgehen, wenn man das TabControl.Align auf alNone zurücksetzt und stattdessen seine Seiten mit dem Formular bzw. dem unteren Panel verankert (das kann man auch mit dem Anker-Editor einstellen):

Code: Alles auswählen

procedure TMainWindow.FormCreate(Sender: TObject);
begin
  TabDirectory.AnchorSideLeft.Control := Self;
  TabDirectory.AnchorSideLeft.Side := asrLeft;

  TabDirectory.AnchorSideTop.Control := Self;
  TabDirectory.AnchorSideTop.Side := asrTop;

  TabDirectory.AnchorSideRight.Control := Panel1;  // wichtig: hier das Panel1 nehmen, nicht das Formular - das würde den Fehler wieder erzeugen
  TabDirectory.AnchorSideRight.Side := asrRight;

  TabDirectory.AnchorSideBottom.Control := Panel1;
  TabDirectory.AnchorSideBottom.Side := asrTop;

  TabDirectory.Anchors := [akLeft, akTop, akRight, akBottom];
end; 
Viele Layout-Probleme kann man mit dem Anker-Editor lösen (aber sich auch neue schaffen...)
Dateianhänge
Project1-wp.zip
(15.19 KiB) 40-mal heruntergeladen

HobbyProgrammer
Beiträge: 168
Registriert: Di 29. Okt 2019, 12:51
Wohnort: Deutschland , Baden-Württemberg

Re: TTabControl Fehler

Beitrag von HobbyProgrammer »

Danke für die Info. Ich werd mir das bei nächster Gelegenheit anschauen. :)
Aber komisch ist es trotzdem daß das TabControl da sozusagen eine Sonderbehandlung braucht.
Host: Core i7-12700H, NVIDIA RTX3050 6GB, 32GB Ram, 1TB NVME SSD mit KUbuntu 22.04LTS 64bit , VM KUbuntu 22.04 LTS 64bit mit Lazarus 3.0.0 und Cross-Platform Compiler für Linux 32/64bit und Windows 32/64bit. Wine für erste Tests der Windows Binarys.

HobbyProgrammer
Beiträge: 168
Registriert: Di 29. Okt 2019, 12:51
Wohnort: Deutschland , Baden-Württemberg

Re: TTabControl Fehler

Beitrag von HobbyProgrammer »

Hat nun eine Weile gedauert, aber jetzt hier ein kurzes Feedback.
Die von wp_xyz vorgeschlagenen Änderungen funktionieren prima. Bei damit Herumspielen habe ich noch so eine andere Stellen dann gefunden die sich eleganten Aufbauen lassen.
Ich bin auch mittlerweile von einem TTabControl abgekommen und verwende nun ein TPageControl. Hat für mich bei genauerer Betrachtung doch viele Vorteile im Vergleich zum TTabControl.
Auf jeden Fall vielen Dank für die Hilfestellung. :)
Host: Core i7-12700H, NVIDIA RTX3050 6GB, 32GB Ram, 1TB NVME SSD mit KUbuntu 22.04LTS 64bit , VM KUbuntu 22.04 LTS 64bit mit Lazarus 3.0.0 und Cross-Platform Compiler für Linux 32/64bit und Windows 32/64bit. Wine für erste Tests der Windows Binarys.

Antworten