![]() |
AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
Zitat:
Ich habe das einzeln gemacht, wegen der Lesbarkeit und so. |
AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
Zitat:
|
AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
Zitat:
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. |
AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
Zitat:
|
AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
Zitat:
Hier mal ein Auszug aus dem VST SourceCode:
Delphi-Quellcode:
Je nachdem welcher SmartAutoFitType übergeben wird, werden entweder die globalen Standardeinstellungen oder aber Columnspezifische Einstellungen verwendet.
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; |
AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
Womit mal wieder bewiesen wäre: It's not a Bug, it's a Fietscher :-D
|
AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
Zitat:
|
AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
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 ^^
|
AW: Virtual TreeView - Anhand des längsten Eintrages die Breite der Spalte anpassen
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 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