Einzelnen Beitrag anzeigen

mytbo

Registriert seit: 8. Jan 2007
461 Beiträge
 
#7

AW: Variablen in Array packen? (erledigt)

  Alt 2. Jan 2024, 20:26
Aber grundsätzlich geht es darum: wie packt man Variablen in ein Array
Wenn ich richtig sehe, möchtest du die Eigenschaften der Columns eines VirtualTrees speichern/wiederherstellen. Einfach geht es mit einem mORMot DocVariant:
Delphi-Quellcode:
uses
  VirtualTrees, VirtualTrees.Types,
  mormot.core.base,
  mormot.core.json,
  mormot.core.variants;

type
  TViewManager = class(TObject)
  strict private
    const
      COLUMN_VALUENAME_INDEX = 'idx';
      COLUMN_VALUENAME_WIDTH = 'wth';
      COLUMN_VALUENAME_POSITION = 'pos';
      COLUMN_VALUENAME_VISIBLE = 'vis';
  public
    class function SaveListViewColumnsToJson(pmTreeList: TCustomVirtualStringTree): RawJson;
  end;


type
  TCustomVirtualStringTreeAccess = class(TCustomVirtualStringTree);

class function TViewManager.SaveListViewColumnsToJson(pmTreeList: TCustomVirtualStringTree): RawJson;
var
  header: TVTHeader;
  column: TVirtualTreeColumn;
  columnValues: TDocVariantData;
begin
  Assert(pmTreeList <> Nil);

  columnValues.InitFast(dvArray);
  header := TCustomVirtualStringTreeAccess(pmTreeList).Header;
  for var columnIdx: Integer := 0 to header.Columns.Count - 1 do
  begin
    column := header.Columns[columnIdx];
    if (coResizable in column.Options)
      and (column.Width > 0) then
    begin
      columnValues.AddObject([
        COLUMN_VALUENAME_INDEX, columnIdx,
        COLUMN_VALUENAME_WIDTH, column.Width,
        COLUMN_VALUENAME_POSITION, column.Position,
        COLUMN_VALUENAME_VISIBLE, (coVisible in column.Options)]);
    end;
  end;

  Result := columnValues.ToJson;
end;
Das Wiederherstellen lässt sich auf die gleiche Weise umsetzen.

Bis bald...
Thomas
  Mit Zitat antworten Zitat