![]() |
TabControl.Height zur Laufzeit ändern
Hallo Leute,
ich verwende ein TabControl zur Anzeige geöffneter Dateien in einer Anwendung. MultiLine steht auf true, Align auf alTop. Beim Test zeigte sich nun, daß sich Height nich automatisch zur Laufzeit ändert, wenn die einzelnen Tabs nicht mehr auf eine Zeile passen. Wie kann ich feststellen, wie viele Zeilen zur Anzeige aller Tabs (deren Breite ja auch unterschiedlich ist) erforderlich sind, damit ich die Höhe des TabControl anpassen kann? mfg eddy |
Re: TabControl.Height zur Laufzeit ändern
Hallo Leute,
hätte nicht gedacht, daß dazu keiner was sagen kann. Folgendes Unterprogramm (UP) löst das Problem vorerst:
Delphi-Quellcode:
(Kleiner) Nachteil ist, daß ich bei jeder Aktion, die die Anzahl der Tabs ändert, das UP in den Programmcode einbauen muß.
procedure TForm.ChkTCHeight(tc : TTabControl);
var rc : TRect; sumw, i : integer; begin sumw := 0; for i := 0 to tc.Tabs.Count - 1 do begin rc := tc.TabRect(i); sumw := sumw + rc.Right - rc.Left; end; i := 0; repeat sumw := sumw - tc.Width; inc(i); until sumw <= 0; tc.Height := i * (tc.TabHeight + 1); end; In OnChange eingefügt hat nicht das gewünschte Ergebnis geliefert. Falls jemand eine optimalere Version kennt, dann immer her damit. mfg eddy |
Re: TabControl.Height zur Laufzeit ändern
Hi eddy,
im Ereignis OnChange() hast du tatsächlich keine Chance, aber deinen Code kannst du durch diese Zeile ersetzen:
Delphi-Quellcode:
Grüße vom marabu
with tc do
Height := 2 + DisplayRect.Top; |
Re: TabControl.Height zur Laufzeit ändern
Hallo marabu,
da ist von meiner Funktion also nur noch das übrig geblieben:
Delphi-Quellcode:
Gefällt mir wesentlich besser, obwohl ich nur schwer und im Nachhinein nachvollziehen kann, was der Hilfetext dazu bedeutet:
tc.Height := tc.DisplayRect.Top;
Zitat:
In meiner Anwendung ist: tc.DisplayRect.Top = 28 tc.DisplayRect.Bottom = 24 und tc.DisplayRect.Bottom kann nicht geändert werden. Bottom über Top --> Rechteck mit negativer Höhe Problem gelöst, Programmcode optimiert! mfg eddy |
Re: TabControl.Height zur Laufzeit ändern
Hi eddy.
Das TabControl ist normalerweise auch das ParentControl für deine visuellen Komponenten und DisplayRect ist der Bereich, in dem du diese dann zeichnest. Wenn du zum Beispiel ein Memo auf dein TabControl packst, dann könntest du beim Hinzufügen oder Wegnehmen einer Page Memo.BoundsRect mit DisplayRect gleichsetzen und die Anzeige wäre angepasst. Da du das TabControl offensichtlich nur als Reiterleiste verwendest, erschließt sich diese Bedeutung natürlich nicht gleich. Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 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 by Thomas Breitkreuz