Delphi-PRAXiS
Seite 1 von 3  1 23      

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/)
-   -   Delphi Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen (https://www.delphipraxis.net/191131-virtual-treeview-anhand-des-laengsten-eintrages-die-breite-der-spalte-anpassen.html)

TiGü 12. Dez 2016 13:17

Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
 
Hallo zusammen,

ich setze die Virtual TreeView in der Version 6.4.1 mit Delphi Berlin 10.2 ein.
Ich stehe gerade auf den Schlauch oder bin im Mittagstief, daher brauche ich einen Schubs in die richtige Richtung:

Wo und wie konnte ich nochmal einstellen, dass die Treeview in der Spaltenansicht automatisch die Spaltenbreite anhand der Länge der Einträge anpasst?

Beispiel - Ich habe zur Zeit:
Eintrag 1
Eintrag 2
Eintrag 3

Sehe beim Programmstart aber nur:
Ein...
Ein...
Ein...

Muss ich manuell über TVirtualStringTree.Header.Columns.Count iterieren und die TVirtualTreeColumn.Width setzen?

Brainshock 12. Dez 2016 13:26

AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
 
Probier es mal hier:
http://www.delphipraxis.net/88141-vi...-anpassen.html

TiGü 12. Dez 2016 13:42

AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
 
Hm, nein...nicht so wirklich.
Im Gegenteil, die Spalten sind nun noch schmaler als vorher mit den Tipp aus dem letzten Post des verlinkten Threads:

Delphi-Quellcode:
ATreeView.Header.AutoFitColumns(False);
ATreeView.Header.AutoSizeIndex := -1;

madas 12. Dez 2016 13:51

AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
 
bei Doppelklick zwischen zwei Spalten (vst liegt als Komponente in einem Frame):

Delphi-Quellcode:
vst: TVirtualStringTree;
FmerkOnBeforeCellPaint: TVTBeforeCellPaintEvent;

procedure TFrameVST.vstBeforeGetMaxColumnWidth(Sender: TVTHeader; Column: TColumnIndex; var UseSmartColumnWidth: Boolean);
begin
  if Assigned(vst.OnBeforeCellPaint) then
  begin
    FmerkOnBeforeCellPaint := vst.OnBeforeCellPaint;
    vst.OnBeforeCellPaint := nil;
  end;
end;

procedure TFrameVST.vstAfterGetMaxColumnWidth(Sender: TVTHeader; Column: TColumnIndex; var MaxWidth: Integer);
begin
  if Assigned(FmerkOnBeforeCellPaint) then
  begin
    vst.OnBeforeCellPaint := FmerkOnBeforeCellPaint;
    FmerkOnBeforeCellPaint := nil;
  end;
end;

procedure TFrameVST.vstColumnWidthDblClickResize(Sender: TVTHeader; Column: TColumnIndex; Shift: TShiftState; P: TPoint;
  var Allowed: Boolean);
begin
  if (Allowed) and (Shift = []) then
  begin
    AutoFitColumn(Column);
    Allowed := False;
  end;
end;

procedure TFrameVST.AutoFitColumn(Column: TColumnIndex);
var
  cWidth, hWidth: Integer;
begin
  if [coResizable, coVisible] * vst.Header.Columns[Column].Options = [coResizable, coVisible] then
  begin
    cWidth := vst.GetMaxColumnWidth(Column);
    if (hoVisible in vst.Header.Options) then
    begin
      hWidth := GetMaxHeaderWidth(Column);
      if cWidth < hWidth then
        cWidth := hWidth;
      if cWidth > vst.Header.Columns[Column].MaxWidth then
        cWidth := vst.Header.Columns[Column].MaxWidth;
    end;
    vst.Header.Columns[Column].Width := cWidth;
  end;
end;

Brainshock 12. Dez 2016 14:01

AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
 
Was passiert, wenn du das einstellst?

Code:
ATreeView.Header.Options:= ATreeView.Header.Options + [hoAutoResize];
ATreeView.Header.Options:= ATreeView.Header.Options + [hoColumnResize];
ATreeView.Header.AutoSizeIndex := 0;

Ach, und zu madas -> wtf?

Whookie 12. Dez 2016 14:17

AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab das mal schnell ausprobiert und das sollte eigentlich ganz einfach funktionieren....

TiGü 12. Dez 2016 14:30

AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
 
Zitat:

Zitat von Brainshock (Beitrag 1355924)
Was passiert, wenn du das einstellst?

Code:
ATreeView.Header.Options:= ATreeView.Header.Options + [hoAutoResize];
ATreeView.Header.Options:= ATreeView.Header.Options + [hoColumnResize];
ATreeView.Header.AutoSizeIndex := 0;

Ja, das ist schon besser. Spalte eins nimmt die gesamte sichtbare Breite der Treeview ein.
Falls jedoch mehr Spalten vorhanden sind, werden die in den nicht sichtbaren Bereich geschoben und bleiben schmal.
Gab es denn keine Möglichkeit, dass sich die Treeview selber an den Breiten der Itemtexte (nebst Checkbox etc.) orientiert?

@Whookie:

Was? :spin:
Das hat ja nicht einmal sichtbare Spalten mit Header?!?

Whookie 12. Dez 2016 15:02

AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Beim mir schon:

Aviator 12. Dez 2016 15:15

AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
 
Zitat:

Zitat von Whookie (Beitrag 1355936)
Beim mir schon:

Also ich seh da keinen Header und keine Spalten. :shock:

@TE: Versuch doch mal folgendes:
Delphi-Quellcode:
vst.Header.AutoFitColumns;
.

Eventuell noch mit den diversen Parametern rumspielen. Das ist auch die Funktion die aufgerufen wird wenn du zwischen 2 Columns einen Doppelklick ausführst und dann bei dem Event OnColumnWidthDblClickResize() den Paramter Allowed auf True stellst.

Hoffe dir geholfen zu haben.

Whookie 12. Dez 2016 15:32

AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Aviator (Beitrag 1355938)
Also ich seh da keinen Header und keine Spalten. :shock:

Gibts ja auch Keine, so ist die Komponente ein einfacher Tree. Aber auch mit Column geht das (hoAutoResize muss gesetzt sein).


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 Uhr.
Seite 1 von 3  1 23      

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