Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   VirtualTreeview -> HTML (https://www.delphipraxis.net/200292-virtualtreeview-html.html)

Peter666 6. Apr 2019 20:09

VirtualTreeview -> HTML
 
Hallo,

gibt es zufällig eine moderne Variante wie man einen VirtualStringTree mit mehreren Nodes in HTML exportiert? Die Routine in Virtualtreeview nutzt table und bei großen Tabellen mit mehreren Sub Nodes wird das nunja groß, unübersichtlich und schaut fürchterlich aus.

Peter

DieDolly 6. Apr 2019 20:21

AW: VirtualTreeview -> HTML
 
Wenn du deine Daten vom VST getrennt hast und die alle in einer Liste liegen, würde ich die Liste durchgehen und alles per Hand exportieren. Dann hat man auch zu 100% das Resultat was man möchte.

Wenn deine Daten noch nicht getrennt sind und du AddChild benutzt, dann würde ich das als erstes umschreiben.

Peter666 7. Apr 2019 09:33

AW: VirtualTreeview -> HTML
 
Danke für die Antwort. Das Problem ist, dass ich einen Stream auswerte und die Ergebnisse aufbereitet in dem Virtualtreeview speichere. Da noch eine zusätzliche Baumstruktur zu hinterlegen ist doppelgemoppelt. Was ich aber jetzt gemacht habe ist die Passage für den HTML Export zu extrahieren und alles was dort mit css zu tun hat, habe ich entfernt.

Falls jemand den Code dazu brauchen sollte:

Delphi-Quellcode:
function ContentToHTML(ATree: TVirtualStringTree): String;
var
  Buffer: TBufferedUTF8String;
  I,J : Integer;
  Level, MaxLevel: Cardinal;
  Save, Run: PVirtualNode;
  Text: String;

  RenderColumns: Boolean;
  Columns: TColumnsArray;
  Index: Integer;

begin
  Buffer := TBufferedUTF8String.Create;
  try
    Buffer.Add('<table>');
    Buffer.AddNewLine;

    Columns := nil;
    RenderColumns := ATree.Header.UseColumns;
    if RenderColumns then
      Columns := ATree.Header.Columns.GetVisibleColumns;

    Run := ATree.GetFirst;
    Save := Run;

    MaxLevel := 0;
    while Assigned(Run) do
    begin
          Level := ATree.GetNodeLevel(Run);
          if Level > MaxLevel then
            MaxLevel := Level;
      Run := ATree.GetNext(Run);
    end;

    if RenderColumns then
    begin
      Buffer.Add('<tr>');
      Buffer.AddNewLine;
      // Make the first row in the HTML table an image of the tree header.
      for I := 0 to High(Columns) do
      begin
        Buffer.Add('<th>');
        if Length(Columns[I].Text) > 0 then
          Buffer.Add(Columns[I].Text);
        Buffer.Add('</th>');
      end;
      Buffer.Add('</tr>');
      Buffer.AddNewLine;
    end;

    Run := Save;
    while Assigned(Run) do
    begin
      Level := ATree.GetNodeLevel(Run);
      Buffer.Add('<tr>');
      Buffer.AddNewLine;

      I := 0;
      while (I < Length(Columns)) or not RenderColumns do
      begin
        if RenderColumns then
          Index := Columns[I].Index
        else
          Index := NoColumn;

        if not RenderColumns or (coVisible in Columns[I].Options) then
        begin
          if Index = ATree.Header.MainColumn then
            // Create a cell for each indentation level.
              for J := 1 to Level do
                Buffer.Add('<td>&nbsp;</td>');

          Buffer.Add(' <td>');
          Text := ATree.Text[Run, Index];
          if Length(Text) > 0 then
            Buffer.Add(Text);
          Buffer.Add('</td>');
        end;

        if not RenderColumns then
          Break;
        Inc(I);
      end;
      Run := ATree.GetNext(Run);
      Buffer.Add(' </tr>');
      Buffer.AddNewLine;
    end;
    Buffer.Add('</table>');

    Result := Buffer.AsUTF8String;
  finally
    Buffer.Free;
  end;
end;
Ich werde nun die ganzen Table Referenzen durch divs ersetzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 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