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

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 3 von 3     123
Brainshock

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

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

  Alt 14. Dez 2016, 11:15
Das ist doch ein Set, also lieber so:
ATreeView.Header.Options := ATreeView.Header.Options + [hoAutoResize, hoColumnResize];
Klugscheißer .
Ich habe das einzeln gemacht, wegen der Lesbarkeit und so.
Matthias
  Mit Zitat antworten Zitat
Brainshock

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

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

  Alt 14. Dez 2016, 11:22
@Aviator: Danke, mit den AutoFitColumns sieht das ganze schon viel besser aus.
Kannst du mal deine Lösung veröffentlichen?
Matthias
  Mit Zitat antworten Zitat
TiGü

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

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

  Alt 14. Dez 2016, 11:57
@Aviator: Danke, mit den AutoFitColumns sieht das ganze schon viel besser aus.
Kannst du mal deine Lösung veröffentlichen?
Beachte die letzte Zeile im FormCreate!

Delphi-Quellcode:
unit VST.View;

interface

uses
  System.SysUtils, System.Classes,
  Vcl.Controls, Vcl.Forms, VirtualTrees;

type
  PMyNodeData = ^TMyNodeData;

  TMyNodeData = record
    Caption: string;
  end;

  TForm2 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure VstFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
    procedure VstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
      var CellText: string);
  private
    VST: TVirtualStringTree;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
var
  LPr, LP: PVirtualNode;
  LData: PMyNodeData;
begin
  VST := TVirtualStringTree.Create(Self);

  VST.name := 'VST';
  VST.Parent := Self;
  VST.Header.Options := VST.Header.Options + [hoVisible];
  VST.Align := alClient;
  VST.OnFreeNode := VstFreeNode;
  VST.OnGetText := VstGetText;

  with VST.Header.Columns.Add do
  begin
    Position := 0;
    Width := 10;
    Text := 'Spalte 1';
    Visible := True;
  end;

  with VST.Header.Columns.Add do
  begin
    Position := 1;
    Width := 10;
    Text := 'Spalte 2';
    Visible := True;
  end;

  VST.NodeDataSize := SizeOf(TMyNodeData);
  LPr := VST.AddChild(nil);
  LData := VST.GetNodeData(LPr);
  LData.Caption := 'Eintrag 1';

  LPr := VST.AddChild(nil);
  LData := VST.GetNodeData(LPr);
  LData.Caption := 'Eintrag 2';

  LPr := VST.AddChild(nil);
  LData := VST.GetNodeData(LPr);
  LData.Caption := 'Eintrag 3 1/4';

  LPr := VST.AddChild(nil);
  LData := VST.GetNodeData(LPr);
  LData.Caption := 'Hallo Welt';

  LPr := VST.AddChild(LPr);
  LData := VST.GetNodeData(LPr);
  LData.Caption := 'Hallo Welt';

  VST.FullExpand();

  VST.Header.AutoFitColumns; // <---- das ist der entscheide Punkt!
end;

procedure TForm2.VstFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
var
  LPData: PMyNodeData;
begin
  LPData := Sender.GetNodeData(Node);
  Finalize(LPData^);
end;

procedure TForm2.VstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: string);
var
  LData: PMyNodeData;
begin
  LData := VST.GetNodeData(Node);
  if TextType = ttNormal then
    CellText := LData.Caption;
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#24

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

  Alt 14. Dez 2016, 13:09
Das ist doch ein Set, also lieber so:
ATreeView.Header.Options := ATreeView.Header.Options + [hoAutoResize, hoColumnResize];
Klugscheißer .
Ich habe das einzeln gemacht, wegen der Lesbarkeit und so.
Lesbarkeit... pah!
Uli Gerhardt
  Mit Zitat antworten Zitat
Aviator

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

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

  Alt 14. Dez 2016, 13:32
@Aviator: Danke, mit den AutoFitColumns sieht das ganze schon viel besser aus.
Kannst du mal deine Lösung veröffentlichen?
Beachte die letzte Zeile im FormCreate!
Das Verhalten von AutoFitColumns() lässt sich durch die einzelnen Column Options noch entsprechend anpassen.


Hier mal ein Auszug aus dem VST SourceCode:

Delphi-Quellcode:
procedure TVTHeader.AutoFitColumns(Animated: Boolean = True; SmartAutoFitType: TSmartAutoFitType = smaUseColumnOption;
  RangeStartCol: Integer = NoColumn; RangeEndCol: Integer = NoColumn);

  //--------------- local functions -------------------------------------------

  function GetUseSmartColumnWidth(ColumnIndex: TColumnIndex): Boolean;

  begin
    Result := False;
    case SmartAutoFitType of
      smaAllColumns:
        Result := True;
      smaNoColumn:
        Result := False;
      smaUseColumnOption:
        Result := coSmartResize in FColumns.Items[ColumnIndex].FOptions;
    end;
  end;

  //----------------------------------------------------------------------------

  procedure DoAutoFitColumn(Column: TColumnIndex);

  begin
    with FColumns do
      if ([coResizable, coVisible] * Items[FPositionToIndex[Column]].FOptions = [coResizable, coVisible]) and
            DoBeforeAutoFitColumn(FPositionToIndex[Column], SmartAutoFitType) and not TreeView.OperationCanceled then
      begin
        if Animated then
          AnimatedResize(FPositionToIndex[Column], Treeview.GetMaxColumnWidth(FPositionToIndex[Column],
            GetUseSmartColumnWidth(FPositionToIndex[Column])))
        else
          FColumns[FPositionToIndex[Column]].Width := Treeview.GetMaxColumnWidth(FPositionToIndex[Column],
            GetUseSmartColumnWidth(FPositionToIndex[Column]));

        DoAfterAutoFitColumn(FPositionToIndex[Column]);
      end;
  end;

  //--------------- end local functions ----------------------------------------

var
  I: Integer;
  StartCol,
  EndCol: Integer;

begin
  ...
end;
Je nachdem welcher SmartAutoFitType übergeben wird, werden entweder die globalen Standardeinstellungen oder aber Columnspezifische Einstellungen verwendet.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#26

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

  Alt 14. Dez 2016, 14:53
Womit mal wieder bewiesen wäre: It's not a Bug, it's a Fietscher
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Aviator

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

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

  Alt 14. Dez 2016, 14:58
Womit mal wieder bewiesen wäre: It's not a Bug, it's a Fietscher
Richtig. Man muss die Komponente nur richtig benutzen. Dann funktioniert sie auch wie gewünscht.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#28

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

  Alt 14. Dez 2016, 15:30
Wobei ich anmerken muss, eine RICHTIGE Bedienung bzw. Verwendung setzt auch eine ordentliche Referenz-Doku voraus. Und die ist beim VST... sagen wir mal... ausbaufähig ^^
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Aviator

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

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

  Alt 14. Dez 2016, 15:35
Wobei ich anmerken muss, eine RICHTIGE Bedienung bzw. Verwendung setzt auch eine ordentliche Referenz-Doku voraus. Und die ist beim VST... sagen wir mal... ausbaufähig ^^
Das ist wahr. Habe ich ja auch schon in #14 angemeckert. Aber ich muss auch sagen, dass die Komponente nicht von jedem Neuling/Anfänger genutzt werden kann. Um ein ordentliches Bild mit der Komponente zustande zu bringen muss man schon eine gewisse Erfahrung mitbringen. Und zudem braucht es auch einiges an Arbeitszeit um mit der Komponente schnell und effektiv arbeiten zu können. Und wenn man so weit ist, dann schaut man sowieso in den SourceCode. Der ist in dem Fall dann sogar aussagekräftiger. Zumindest geht es mir so. Ich habe allerdings auch schonmal in die PDF Datei reingeschaut wenn ich mir unter einer Einstellung oder einem Event so rein gar nix vorstellen konnte. Allerdings war das dann mehr ein Glücksspiel ob dort wirklich etwas drin steht.
  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 21:40 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