![]() |
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:
Alten Zustand wiederherstellen
// Alle anderen Spalten ausblenden
AlteBreite := VST.Header.Columns[0].Width; VST.Header.Columns[0].Width := VST.ClientWidth;
Delphi-Quellcode:
Gibt es hier eine bessere Lösung?
// Alle anderen Spalten wieder einblenden
VST.Header.Columns[0].Width := AlteBreite; |
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. |
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. |
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 12:56 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-2025 by Thomas Breitkreuz