![]() |
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 |
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. |
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:
Ich werde nun die ganzen Table Referenzen durch divs ersetzen.
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> </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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 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