Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   VST Spalten automatisch an Komponentenbreite anpassen / best practice (https://www.delphipraxis.net/200053-vst-spalten-automatisch-komponentenbreite-anpassen-best-practice.html)

Bünni 15. Mär 2019 00:18

VST Spalten automatisch an Komponentenbreite anpassen / best practice
 
Hier geht es jetzt nicht um ein konkretes, für mich unlösbares Problem.
Viel eher geht es darum, was hier die beste Umsetzung ist.

Stellt euch ein VST mit mehr als 2 Spalten vor.
An gewissen Stellen im Programm sollen alle bis auf die erste Spalte [0] ausgeblendet werden.
Wieder an anderen Stellen sollen die Spalten wieder so angezeigt werden wie sie zuvor waren.

Was ist hier die beste Vorgehensweise?

Meine Aktuelle Umsetzung speichert die Breite der ersten Spalte und zieht diese danach lang
Delphi-Quellcode:
 // Alle anderen Spalten ausblenden
 AlteBreite := VST.Header.Columns[0].Width;
 VST.Header.Columns[0].Width := VST.ClientWidth;
Alten Zustand wiederherstellen
Delphi-Quellcode:
 // Alle anderen Spalten wieder einblenden
 VST.Header.Columns[0].Width := AlteBreite;
Gibt es hier eine bessere Lösung?

generic 15. Mär 2019 07:20

AW: VST Spalten automatisch an Komponentenbreite anpassen / best practice
 
"Stellen im Progamm" leuchtet mir nicht so ein, dass müsstest du mir mehr erklären.

Ich schalte Spalten auf Visible=false, wenn ich die nicht sehen will.

Das mit den Breite finde ich ungewöhnlich.

Moombas 15. Mär 2019 08:06

AW: VST Spalten automatisch an Komponentenbreite anpassen / best practice
 
Ich kenne mich mit dem VST's kenn ich mich nicht aus, aber für ein Stringgrid passe ich die breite "autom." an die benötigte Breite an (das Speichern der vorherigen Breite wäre dann überflüssig), müsste hier ja ähnlich möglich sein:

Delphi-Quellcode:
GridColWidth(Stringgrid, 1, 0);

//Stringgrid Spaltenbreite anpassen
procedure TTools.GridColWidth(grd:TStringGrid; min,max:word);
var
  Zeile, Spalte, tmp, len: word;
begin
  with grd do begin // für alle Spalten
    for Spalte:=0 to (ColCount -1) do begin
      len:=0;
      for Zeile:=0 to (RowCount-1) do begin // für alle Zeilen
        tmp:=Canvas.TextWidth(Cells[Spalte,Zeile]);
        if tmp>len then len:=tmp // neue max Breite
      end; // for Zeile
      if max>0 then if len>max then len:=max; // Maximalbreite
      if len<min then len:=min; // Minimalbreite
      ColWidths[Spalte]:=len+GridLineWidth+10 // Spalte verbreitern
    end // for Spalte
  end // with
end;

Edit: Wenn man sie natürlich einfach einblenden/ausblenden kann (wie generic schrieb) ist das natürlich in diesem Fall wesentlich einfacher.

Bünni 15. Mär 2019 12:30

AW: VST Spalten automatisch an Komponentenbreite anpassen / best practice
 
Spalten ausblenden ist selbstverständlich.
Aber es findet keine automatische Anpassung an die Größe der Komponente statt.

Diese Nacht habe ich dann noch herausgefunden, dass man die letzte sichtbare Spalte so einstellen kann, dass sie die ganze restliche Breite der Komponente einnimmt.
Delphi-Quellcode:
VST.Header.AutoSizeIndex := VST.Header.Columns.GetLastVisibleColumn;


Blendet man vorher ausgeblendete Spalten wieder ein, stimmen die Größen logischerweise nicht.

Deswegen speichere ich Werte beim Ausblenden zwischen, um sie beim Einblenden aller Spalten wieder zurückzusetzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 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