Alessandro Posted September 15, 2015 Share Posted September 15, 2015 Hello everybody, I would like to know how to import and export the TUniTreewView content to TXT file? Thank you. ---------------------------------------- Olá pessoal, eu gostaria de saber como importar e exportar o conteúdo do TUniTreewView para arquivo TXT? Obrigado,. Quote Link to comment Share on other sites More sharing options...
stiaan Posted September 16, 2015 Share Posted September 16, 2015 Hi Here is some code that works with TTREEVIEW, which will probably work with TuniTreeView. It saves data to a INI file, which is a text file with some structure. Drag-and-drop also supported. unit MainForm;interfaceuses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls, Vcl.ExtCtrls;type TForm1 = class(TForm) TreeView1: TTreeView; Panel1: TPanel; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); private procedure ReloadTree; public { Public declarations } end; TTreeNodeData = record GUID : String; Parent : String; Mapped : Boolean; end; PTreeNodeData = ^TTreeNodeData;var Form1: TForm1;implementation{$R *.dfm}Uses INIFiles;procedure TForm1.Button1Click(Sender: TObject);begin ReloadTree; ShowMessage( 'Reloaded!' );end;procedure TForm1.Button2Click(Sender: TObject);var INI : TMemINIFile; i : integer;begin DeleteFile( 'tree.ini' ); INI := TMemINIFile.Create( 'tree.ini' ); for i := 0 to TreeView1.Items.Count - 1 do begin INI.WriteString( PTreeNodeData(TreeView1.Items.Data)^.GUID, 'NAME', TreeView1.Items.Text ); INI.WriteString( PTreeNodeData(TreeView1.Items.Data)^.GUID, 'PARENT', PTreeNodeData(TreeView1.Items.Data)^.Parent ); end; INI.UpdateFile; INI.Free; if Assigned(Sender) then ShowMessage( 'Saved!' );end;procedure TForm1.FormCreate(Sender: TObject);begin ReloadTree;end;procedure TForm1.ReloadTree; procedure MapItems; var i, j : integer; pNodeData : PTreeNodeData; begin i := 0; while (i < TreeView1.Items.Count) do begin j := 0; while (j < TreeView1.Items.Count) do begin if (PTreeNodeData(TreeView1.Items.Data)^.GUID = PTreeNodeData(TreeView1.Items[j].Data)^.Parent) and (PTreeNodeData(TreeView1.Items[j].Data)^.Mapped = False) then begin PTreeNodeData(TreeView1.Items[j].Data)^.Mapped := True; TreeView1.Items[j].MoveTo( TreeView1.Items, naAddChild ); j := 0; end else inc(j); end; inc(i); end; end;var INI : TMemINIFile; GUIDs : TStringList; Parent, Item : TTreeNode; i : integer; pNodeData : PTreeNodeData;begin INI := TMemINIFile.Create( 'tree.ini' ); GUIDs := TStringList.Create; INI.ReadSections( GUIDs ); //Load all the sections/GUIDs TreeView1.Items.BeginUpdate; TreeView1.Items.Clear; //Let's add all to the tree...assumption is all is orphans for i := 0 to GUIDs.Count - 1 do begin pNodeData := AllocMem( SizeOf(TTreeNodeData) ); Initialize( pNodeData^ ); pNodeData^.GUID := GUIDs.Strings; pNodeData^.Mapped := False; pNodeData^.Parent := INI.ReadString( GUIDs.Strings, 'PARENT', '' ); //Create all in root Item := TreeView1.Items.Add( Nil, INI.ReadString( GUIDs.Strings, 'NAME', '' ) ); Item.Data := pNodeData; end; MapItems; TreeView1.Items.EndUpdate; GUIDs.Free; INI.Free;end;procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);var SourceNode, TargetNode : TTreeNode;begin SourceNode := TreeView1.Selected; TargetNode := TreeView1.GetNodeAt( X, Y ); if Assigned(TargetNode) and Assigned(SourceNode) then begin PTreeNodeData(SourceNode.Data)^.Parent := PTreeNodeData(TargetNode.Data)^.GUID; SourceNode.MoveTo( TargetNode, naAddChild ); //Save INI without messagebox Button2Click( Nil ); end;end;procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);var Src, Dst: TTreeNode;begin Src := TreeView1.Selected; Dst := TreeView1.GetNodeAt(X,Y); Accept := Assigned(Dst) and (Src<>Dst);end;procedure TForm1.FormDestroy(Sender: TObject);var i : integer;begin for i := 0 to TreeView1.Items.Count - 1 do begin Finalize( PTreeNodeData(TreeView1.Items.Data)^ ); FreeMem( TreeView1.Items.Data ); end;end;end. 1 Quote Link to comment Share on other sites More sharing options...
Alessandro Posted September 16, 2015 Author Share Posted September 16, 2015 thank you. Quote Link to comment Share on other sites More sharing options...
stiaan Posted September 16, 2015 Share Posted September 16, 2015 Let me know if this worked for you. Regards Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.