![]() |
Re: TVirtualStringTree -> XML
Bevor ich mir den VST installiere, tue mir mal den Gefallen und poste noch vstProjects.GetNodeData(....);
Danke, ...:cat:... |
Re: TVirtualStringTree -> XML
vstProjects ist das VST. Hier GetNodeData(...);:
Delphi-Quellcode:
Chris
{Copy & Paste from VirtualTrees.pas by http://www.delphi-gems.com}
function TBaseVirtualTree.GetNodeData(Node: PVirtualNode): Pointer; // Returns the address of the user defined data area in the node. begin Assert(FNodeDataSize > 0, 'NodeDataSize not initialized.'); if (FNodeDataSize <= 0) or (Node = nil) or (Node = FRoot) then Result := nil else Result := PChar(@Node.Data) + FTotalInternalDataSize; end; |
Re: TVirtualStringTree -> XML
Ich weiss zwar nicht, was Du in der Proc erreichen willst, aber für die RootNode gibt die wohl immer nil zurück.
Code:
...:cat:...
{Copy & Paste from VirtualTrees.pas by http://www.delphi-gems.com}
function TBaseVirtualTree.GetNodeData(Node: PVirtualNode): Pointer; // Returns the address of the user defined data area in the node. begin Assert(FNodeDataSize > 0, 'NodeDataSize not initialized.'); if (FNodeDataSize <= 0) or (Node = nil) [u][b][color=#ff0008]or (Node = FRoot) [/color][/b][/u]then Result := nil else Result := PChar(@Node.Data) + FTotalInternalDataSize; end; |
Re: TVirtualStringTree -> XML
:shock:
:wiejetzt: Hm... das ist schlecht... Sehr schlecht. Und was kann man da tun? Chris |
Re: TVirtualStringTree -> XML
Du solltest in Deinen Code mal direkt auf das Data zugreifen, oder den Node-Data Pointer separat speichern und darauf zurück zu greifen. Vielleicht hilft es Dir. Oder Du versuchst, die Original Sourcen (nach Backup!) zu ändern und neu kompilieren.
...:cat:.... |
Re: TVirtualStringTree -> XML
*ächz* Gott sei Dank gibt es sowas, wie MSN Messenger. Mit philwo's Hilfe habe ich es dann doch hinbekommen.
so sieht das ganze jetzt aus:
Code:
Chris
procedure TMainForm.SaveToXML(aFileName: string);
var xmlDoc: IXMLDOMDocument2; mainNode, subNode, subsubNode: IXMLDOMNode; curData, curSubData: TData; rootnode, subrootnode: PVirtualNode; i, j: integer; f: TextFile; begin DeleteFile(aFileName); AssignFile(f, aFileName); Rewrite(f); writeln(f, '<?xml version="1.0"?>'); writeln(f, '<projects>'); writeln(f, '</projects>'); CloseFile(f); xmlDoc := CoDOMDocument40.Create(); xmlDoc.load(aFileName); xmlDoc.setProperty('NewParser', true); if XMLDoc.parseError.errorCode <> 0 then begin ShowMessage('XML Fehler: ' + #13#10 + XMLDoc.parseError.reason + #13#10 + 'Source: ' + xmldoc.parseError.srcText); xmldoc := nil; end; [color=#ff0000] rootNode := vstProjects.RootNode.FirstChild; [/color] for i:=0 to vstProjects.RootNodeCount - 1 do begin if rootNode = nil then Exit; curData := PData(vstProjects.GetNodeData(rootNode))^; if not Assigned(@curData)then ShowMessage('Alert'); mainNode := xmlDoc.createElement('project'); xmlDoc.documentElement.appendChild(mainNode); subNode := xmlDoc.createElement('name'); subNode.text := curData.Name; mainNode.appendChild(subNode); xmlDoc.documentElement.appendChild(mainNode); subNode := xmlDoc.createElement('prglanguage'); subNode.text := curData.PrgLanguage; mainNode.appendChild(subNode); xmlDoc.documentElement.appendChild(mainNode); subNode := xmlDoc.createElement('language'); subNode.text := curData.Language; mainNode.appendChild(subNode); xmlDoc.documentElement.appendChild(mainNode); subNode := xmlDoc.createElement('projectdir'); subNode.text := curData.ProjectDir; mainNode.appendChild(subNode); xmlDoc.documentElement.appendChild(mainNode); subNode := xmlDoc.createElement('sourcefiles'); [color=#ff0000] subRootNode := rootNode.FirstChild;[/color] for j:=0 to rootNode.ChildCount - 1 do begin curSubData := PData(vstProjects.GetNodeData(subRootNode))^; xmlDoc.documentElement.appendChild(mainNode); subsubNode := xmlDoc.createElement('name'); subsubNode.text := curSubData.Name; subNode.appendChild(subsubNode); xmlDoc.documentElement.appendChild(mainNode); subsubNode := xmlDoc.createElement('prglanguage'); subsubNode.text := curSubData.PrgLanguage; subNode.appendChild(subsubNode); xmlDoc.documentElement.appendChild(mainNode); subsubNode := xmlDoc.createElement('filename'); subsubNode.text := curSubData.FileName; subNode.appendChild(subsubNode); subRootNode := subRootNode.NextSibling; end; mainNode.appendChild(subNode); xmlDoc.save(aFileName); rootNode := rootNode.NextSibling; end; end; |
Re: TVirtualStringTree -> XML
Super, dann schalte noch die "offene Frage" aus und Du darfst weiterprogrammieren :coder:
...:cat:... P.S.: Ich habe nichts gesagt, ist schon geschehen ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:45 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