AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TCategoryPanel einklappen/ausklappen Align-Ausrichtung

TCategoryPanel einklappen/ausklappen Align-Ausrichtung

Ein Thema von AJ_Oldendorf · begonnen am 19. Jun 2012 · letzter Beitrag vom 7. Nov 2019
Antwort Antwort
AJ_Oldendorf

Registriert seit: 12. Jun 2009
Ort: Stadthagen
384 Beiträge
 
Delphi 10.3 Rio
 
#1

TCategoryPanel einklappen/ausklappen Align-Ausrichtung

  Alt 19. Jun 2012, 11:25
Hallo zusammen,
ich habe eine TCategoryPanelGroup welches 3 CategoryPanels enthält.
Das Align ist auf alClient gestellt.
Jetzt würde ich gerne, wenn man in der Anwendung das erste CategoryPanel einklappt, dass sich entweder die beiden übrigen die neu zur Verfügung stehende Height im Formular teilen oder zumindest das letzte CategoryPanel die volle Höhe bekommt. Leider bleiben die CategoryPanels in der Größe, wie sie im Objektinspektor erstellt wurden.
Das drauflegen eines TSplitter bringt leider auch kein Erfolg (->habe versucht dann damit die Height des CategoryPanels anzupassen).
Habt ihr eine Idee?

Bei Windows 7 im Ressourcenmonitor ist das Verhalten ähnlich... Dort ist es mit einem Splitter gelöst, denke ich

Gruß
Alex
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: TCategoryPanel einklappen/ausklappen Align-Ausrichtung

  Alt 19. Jun 2012, 13:03
Delphi-Quellcode:
procedure TForm5.ReMeasureCat;
var
  coll,SplitHeight, I:Integer;
begin
  coll := 0;
  for I := 0 to CategoryPanelGroup1.ControlCount-1 do
    if CategoryPanelGroup1.Controls[i] is TCategoryPanel then
      if TCategoryPanel(CategoryPanelGroup1.Controls[i]).Collapsed then inc(coll);
  if coll<CategoryPanelGroup1.ControlCount then
    begin
      SplitHeight := (CategoryPanelGroup1.Height - coll*30) div (CategoryPanelGroup1.ControlCount-coll);
      for I := 0 to CategoryPanelGroup1.ControlCount-1 do
        if CategoryPanelGroup1.Controls[i] is TCategoryPanel then
          if not TCategoryPanel(CategoryPanelGroup1.Controls[i]).Collapsed then TCategoryPanel(CategoryPanelGroup1.Controls[i]).Height := SplitHeight;
    end;
end;

procedure TForm5.CategoryPanel3Collapse(Sender: TObject);
begin
  ReMeasureCat;
end;

procedure TForm5.CategoryPanel3Expand(Sender: TObject);
begin
  ReMeasureCat;
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
Ort: Stadthagen
384 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: TCategoryPanel einklappen/ausklappen Align-Ausrichtung

  Alt 19. Jun 2012, 15:22
Hallo Bummi,
das geht schonmal ganz gut.
Leider hat es ein kleinen Nachteil.
Angenommen ich habe folgende Height in meinen CategoryPanels:

Height CategoryPanel1 = 298
Height CategoryPanel2 = 238
Height CategoryPanel3 = 198

Wenn ich jetzt einen zuklappe und wieder aufklappe (sodass alle ausgeklappt sind), wird ein Mittelwert in der Height erzeugt und alle CategoryPanels bekommen die gleiche Height.
Dies führt dazu, dass natürlich Sachen abgeschnitten werden z.B. im ersten CategoryPanel.
Mir wäre es glaube ich lieber, wenn immer nur das letzte ausgeklappt CategoryPanel die "restliche" Height bekommt.

Gruß
Alex
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: TCategoryPanel einklappen/ausklappen Align-Ausrichtung

  Alt 19. Jun 2012, 15:41
Tu' Dir keinen Zwang an, schreib es so um wie Du es brauchst ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
Ort: Stadthagen
384 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: TCategoryPanel einklappen/ausklappen Align-Ausrichtung

  Alt 19. Jun 2012, 15:51
Deine Denkanstöße bzgl. der Events und der Abfragen helfen mir definitiv weiter und ich werde es mir entsprechend umbauen. Vielleicht braucht den oben genannten Source jemand in dieser Variante.

Viele Grüße
Alex
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#6

AW: TCategoryPanel einklappen/ausklappen Align-Ausrichtung

  Alt 7. Nov 2019, 18:29
Delphi-Quellcode:
procedure TForm5.ReMeasureCat;
var
  coll,SplitHeight, I:Integer;
begin
  coll := 0;
  for I := 0 to CategoryPanelGroup1.ControlCount-1 do
    if CategoryPanelGroup1.Controls[i] is TCategoryPanel then
      if TCategoryPanel(CategoryPanelGroup1.Controls[i]).Collapsed then inc(coll);
  if coll<CategoryPanelGroup1.ControlCount then
    begin
      SplitHeight := (CategoryPanelGroup1.Height - coll*30) div (CategoryPanelGroup1.ControlCount-coll);
      for I := 0 to CategoryPanelGroup1.ControlCount-1 do
        if CategoryPanelGroup1.Controls[i] is TCategoryPanel then
          if not TCategoryPanel(CategoryPanelGroup1.Controls[i]).Collapsed then TCategoryPanel(CategoryPanelGroup1.Controls[i]).Height := SplitHeight;
    end;
end;

procedure TForm5.CategoryPanel3Collapse(Sender: TObject);
begin
  ReMeasureCat;
end;

procedure TForm5.CategoryPanel3Expand(Sender: TObject);
begin
  ReMeasureCat;
end;
Ausgehend von diesem Entwurf der Methode RemeasureCat habe ich für mich folgende Methode gleichen Namens geschrieben:

Delphi-Quellcode:
procedure TForm2.ReMeasureCat;
var coll,SplitHeight,I: Integer; {neu eingeführte Variablen, am 7.10.2019 um 21:11} h1,h2,h: Integer; {Ende der neuen Variablen}
begin
  for I := 0 to CategoriesLft.ControlCount-1 do
  begin
    (CategoriesLft.Controls[I] as TCategoryPanel).Height := CategoriesLft.Height;
    if I < CategoriesLft.ControlCount-1 then
    begin
      (CategoriesLft.Controls[I] as TCategoryPanel).Height := (CategoriesLft.Controls[I] as TCategoryPanel).Height - (CategoriesLft.Controls[I+1] as TCategoryPanel).Top;
      if I=1 then
      begin
        (CategoriesLft.Controls[I+1] as TCategoryPanel).Height := CategoriesLft.Height - (CategoriesLft.Controls[I+1] as TCategoryPanel).Top;
      end;
    end;
  end;
end;
Ich habe auf einer CategoryPanelGroup Komponente 2 CategoryPanel Kompos, getrennt durch einen horizontalen Splitter.

Ich will nun, dass sich die beiden Panele ihrer Höhe nach alClient ausrichten, also den gesamten freien Platz bis zum Ende der CategoryPanelGroup bzw. bis zum Beginn (Eigenschaft Top) des darauffolgenden CategoryPanels ausfüllen. Ich habe auf meiner CategoryPanelGroup zwei solche Category Panele übereinander, wobei in der Standardeinstellung beide CategoryPanele gleich hoch sind, also hale Höhe der CategorypanelGroup. Wenn ich nun meinen Splitter bewege, passt sich die Höhe des oberen Panels korrekt an, die Höhe des unteren CategoryPanel jedoch nicht. Wenn ich den Spltter zu hoch bewege, schaut die Fläche der CategoryPanelGroup hervor. Ich will aber, dass sich die die Eigenschaft Bottom des unteren Panels auf Bottom der CatogoryPanelgroup setzt.

Leider tut das der obige Code nur für das obere TCategoryPanel, nicht aber für das untere. Was muss ich da anders machen?

[OT]
Sorry für Doppelaccount. Bin User Schöni, konnte mich lange Zeit nicht einloggen, Kennwort vergessen, wollte meinen Account nun wiederherstellen aber DP hat mir auf das vergessene Kennwort den Usernamen cpux86 gegeben, statt schöni. War bisher als DualCoreCpu hier. Muss mich noch entscheiden, mit welchem Account ich zukünftig aktiv sein will.
[/OT]

Geändert von DualCoreCpu ( 7. Nov 2019 um 19:35 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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