AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von TiGü · begonnen am 12. Dez 2016 · letzter Beitrag vom 14. Dez 2016
Antwort Antwort
Seite 1 von 3  1 23      
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#1

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

  Alt 12. Dez 2016, 13:17
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?
  Mit Zitat antworten Zitat
Brainshock

Registriert seit: 26. Nov 2004
Ort: 37345
214 Beiträge
 
Delphi 7 Professional
 
#2

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

  Alt 12. Dez 2016, 13:26
Probier es mal hier:
http://www.delphipraxis.net/88141-vi...-anpassen.html
Matthias
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 12. Dez 2016, 13:42
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;
  Mit Zitat antworten Zitat
madas

Registriert seit: 9. Aug 2007
207 Beiträge
 
#4

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

  Alt 12. Dez 2016, 13:51
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;

Geändert von madas (12. Dez 2016 um 13:53 Uhr)
  Mit Zitat antworten Zitat
Brainshock

Registriert seit: 26. Nov 2004
Ort: 37345
214 Beiträge
 
Delphi 7 Professional
 
#5

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

  Alt 12. Dez 2016, 14:01
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?
Matthias
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#6

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

  Alt 12. Dez 2016, 14:17
Hab das mal schnell ausprobiert und das sollte eigentlich ganz einfach funktionieren....
Angehängte Dateien
Dateityp: 7z TreeView.7z (4,7 KB, 8x aufgerufen)
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#7

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

  Alt 12. Dez 2016, 14:30
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?
Das hat ja nicht einmal sichtbare Spalten mit Header?!?
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#8

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

  Alt 12. Dez 2016, 15:02
Beim mir schon:
Miniaturansicht angehängter Grafiken
virtualtree.jpg  
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#9

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

  Alt 12. Dez 2016, 15:15
Beim mir schon:
Also ich seh da keinen Header und keine Spalten.

@TE: Versuch doch mal folgendes: 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.
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#10

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

  Alt 12. Dez 2016, 15:32
Also ich seh da keinen Header und keine Spalten.
Gibts ja auch Keine, so ist die Komponente ein einfacher Tree. Aber auch mit Column geht das (hoAutoResize muss gesetzt sein).
Angehängte Dateien
Dateityp: 7z TreeView_v2.7z (4,8 KB, 9x aufgerufen)
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 20:31 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