AGB  ·  Datenschutz  ·  Impressum  







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

TabControl.Height zur Laufzeit ändern

Ein Thema von eddy · begonnen am 13. Mär 2006 · letzter Beitrag vom 15. Mär 2006
Antwort Antwort
Benutzerbild von eddy
eddy

Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#1

TabControl.Height zur Laufzeit ändern

  Alt 13. Mär 2006, 16:48
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
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#2

Re: TabControl.Height zur Laufzeit ändern

  Alt 14. Mär 2006, 20:24
Hallo Leute,

hätte nicht gedacht, daß dazu keiner was sagen kann.

Folgendes Unterprogramm (UP) löst das Problem vorerst:

Delphi-Quellcode:
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;
(Kleiner) Nachteil ist, daß ich bei jeder Aktion, die die Anzahl der Tabs ändert, das UP in den Programmcode einbauen muß.
In OnChange eingefügt hat nicht das gewünschte Ergebnis geliefert.

Falls jemand eine optimalere Version kennt, dann immer her damit.

mfg
eddy
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: TabControl.Height zur Laufzeit ändern

  Alt 14. Mär 2006, 21:58
Hi eddy,

im Ereignis OnChange() hast du tatsächlich keine Chance, aber deinen Code kannst du durch diese Zeile ersetzen:

Delphi-Quellcode:
with tc do
  Height := 2 + DisplayRect.Top;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#4

Re: TabControl.Height zur Laufzeit ändern

  Alt 15. Mär 2006, 10:44
Hallo marabu,

da ist von meiner Funktion also nur noch das übrig geblieben:
tc.Height := tc.DisplayRect.Top; Gefällt mir wesentlich besser, obwohl ich nur schwer und im Nachhinein nachvollziehen kann, was der Hilfetext dazu bedeutet:

Zitat:
Die Eigenschaft DisplayRect gibt das Rechteck an, das den Client-Bereich einer Registerkarte umgibt.

property DisplayRect: TRect;

Beschreibung

Mit der Eigenschaft DisplayRect können Sie in Pixel die Koordinaten des Bereichs ermitteln, der die Registerkarten repräsentiert. Dieser Teil des Registers ändert sein Aussehen nicht, wenn andere Register ausgewählt werden.

Verwenden Sie DisplayRect und nicht die Eigenschaft ClientRect, um den Bereich der Registerkarte zu ermitteln, der andere Objekte enthalten kann.
tc.DisplayRect.Top müßte wohl die Oberkante von dem Bereich (= Client-Bereich) sein, der unter den einzelnen Reitern nicht (!!!) angezeigt wird.

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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: TabControl.Height zur Laufzeit ändern

  Alt 15. Mär 2006, 10:57
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
  Mit Zitat antworten Zitat
Antwort Antwort


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:11 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