AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi brauche hilfe mit der VirtualTreeView.
Thema durchsuchen
Ansicht
Themen-Optionen

brauche hilfe mit der VirtualTreeView.

Ein Thema von Wishmaster · begonnen am 13. Aug 2013 · letzter Beitrag vom 17. Aug 2013
Antwort Antwort
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#1

brauche hilfe mit der VirtualTreeView.

  Alt 13. Aug 2013, 00:31
ja wie schon gesagt ich brauche hilfe mit der VirtualTreeView.
ich arbeite an einem language editor.

es geht mir jetzt darum die kolumnen und die einträge in ein einzelne datei zu speichern/Laden.
so zu sagen das Projekt speichern.

was wäre die best lösung?
vielleicht hat ja jemand ein code Snippet?

Delphi-Quellcode:
type
  TLangData = record
   Text : Widestring;
   Name : Widestring;
   Ext : Widestring;
  end;
// die kolumnen werden dynamisch erstellt
 TLangArray = array of TLangData;

type
  PNodeData = ^TNodeData;
  TNodeData = record
   Level : Integer;
   ImageIndex : Integer;
   Identifirer : Widestring;
   Language : TLangArray;
  end;
Miniaturansicht angehängter Grafiken
editor.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: brauche hilfe mit der VirtualTreeView.

  Alt 13. Aug 2013, 01:49
Wenn ich mich recht erinnere hat der VTS die Methoden LoadFromFile und SaveToFile. Du musst dann nur noch das OnSaveNode Event implementieren.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#3

AW: brauche hilfe mit der VirtualTreeView.

  Alt 13. Aug 2013, 04:15
danke für dein antwort.

das hatte ich schon gemacht, doch leider speichert es nur die einträge.
es sei denn, ich übersehe etwas,eine option oder soetwas.
das problem ist dass das die kolumnen dynamisch erstellt werden
und natürlich auch bewegt und gelöscht werden.
sonst könnte ich die vordefinieren und somit wäre das problem meher oder weniger gelöst.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: brauche hilfe mit der VirtualTreeView.

  Alt 13. Aug 2013, 14:23
Neben den von mir genannten Methoden gibt es weiterhin LoadFromStream und SaveToStream. Die VST Komponente sorgt eigentständig dafür, dass die Hierachie der Nodes beibehalten bleibt und auch eventuelle CheckStates, etc. sollten automatisch gespeichert werden.

Die Columns kannst du einfach "per Hand" in den Stream speichern.

Delphi-Quellcode:
MS := TMemoryStream.Create;
  try
    MS.WriteData(VST.Header.Columns.Count);
    for I := 0 to VST.Header.Columns.Count - 1 do
    begin
      // Write Column Name
      // Write Column Width
      // Write Column ...
    end;
    VST.SaveToStream(MS);
    MS.SaveToFile('C:\test.dat');
  finally
    MS.Free;
  end;
Delphi-Quellcode:
MS := TMemoryStream.Create;
  try
    MS.LoadFromFile('C:\test.dat');
    MS.Position := 0;
    MS.ReadData(HeaderCount);
    for I := 0 to HeaderCount - 1 do
    begin
      Column := VirtualStringTree1.Header.Columns.Add;
      // Read Column Name
      // Read Column Width
      // Read Column ...
    end;
    VST.LoadFromStream(MS);
  finally
    MS.Free;
  end;
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#5

AW: brauche hilfe mit der VirtualTreeView.

  Alt 15. Aug 2013, 04:49
hi
nochmal danke fur deine hilfe.

ich habe mich entschieden alles von hand zu machen. dazu benutze ich eine open source komponente von David J Butler
cStreams die ist nicht kompatibel mit der VirtualTreeView und TMemoryStream/TStream aber die komponente hat einige nette properties wie
Delphi-Quellcode:
    procedure WriteBuffer(const Buffer; const Size: Integer);
    procedure WriteStrA(const Buffer: AnsiString); virtual;
    procedure WriteStrW(const Buffer: WideString); virtual;

    procedure WriteByte(const V: Byte); virtual;
    procedure WriteWord(const V: Word); virtual;
    procedure WriteLongWord(const V: LongWord);
    procedure WriteLongInt(const V: LongInt);
    procedure WriteInt64(const V: Int64);
    procedure WriteSingle(const V: Single);
    procedure WriteDouble(const V: Double);
    procedure WriteExtended(const V: Extended);
    procedure WritePackedAnsiString(const V: AnsiString);
    procedure WritePackedWideString(const V: WideString);
    procedure WritePackedString(const V: String); {$IFDEF UseInline}inline;{$ENDIF}
    procedure WritePackedAnsiStringArray(const V: Array of AnsiString);
    procedure WritePackedWideStringArray(const V: Array of WideString)

Delphi-Quellcode:
procedure TMain_Form.Project_Save_ActionExecute(Sender: TObject);
var
 fWriter : TFileWriter;
 FFilename : String;
 Len :Int64;
 I : Integer;

 Node : PVirtualNode;
 Data : PNodeData;

begin
  FFilename := 'C:\..\Language Suite\test.dat';
  fWriter := TFileWriter.Create(FFilename);
 try

   (* Write Columns Count *)
   fWriter.WriteInt64(LanguageTree.Header.Columns.Count);

  for I := 0 to LanguageTree.Header.Columns.Count -1 do
   begin
    (* Write Column Width *)
    fWriter.WriteInt64(LanguageTree.Header.Columns[i].Width);
    (* Write Column Position *)
    fWriter.WriteLongWord(LanguageTree.Header.Columns[i].Position);
    (* Write Column Text *)
    Len:= Length(LanguageTree.Header.Columns[i].CaptionText);
    fWriter.WriteInt64(Len);
    fWriter.WriteStrW(LanguageTree.Header.Columns[i].CaptionText);
   end;

   // Save Nodes Test

   (* Write LanguageTree TotalCount *)
   fWriter.WriteLongWord(LanguageTree.TotalCount);

  If LanguageTree.GetFirst = nil then
   Exit;

   Node:= nil;

  repeat
   if Node = nil then
    Node:= LanguageTree.GetFirst
   else
    Node:= LanguageTree.GetNext(Node);
    Data:= LanguageTree.GetNodeData(Node);

   (* Write LanguageTree NodeLevel *)
    fWriter.WriteInt64(Data^.Level);

    (* Write Identifirer *)
    fWriter.WriteInt64(Length(Data^.Identifirer));
    fWriter.WriteStrW(Data^.Identifirer);

   (* Write Language *)
    fWriter.WriteInt64(Length(Data^.Language));
   for I := 0 to Length(Data^.Language) -1 do
    begin
     fWriter.WriteInt64(Length(Data^.Language[i].Text));
     FWriter.WriteStrW(Data^.Language[i].Text);
     fWriter.WriteInt64(Length(Data^.Language[i].Name));
     FWriter.WriteStrW(Data^.Language[i].Name);
     fWriter.WriteInt64(Length(Data^.Language[i].Ext));
     FWriter.WriteStrW(Data^.Language[i].Ext);
    end;

  until
    Node = LanguageTree.GetLast();


   //test end


 finally
  fWriter.Free;
 end;

 //Sava_Project();
end;
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: brauche hilfe mit der VirtualTreeView.

  Alt 15. Aug 2013, 13:52
So geht es natürlich auch. Mit den Standard-Streams aus der RTL wärst, du aber genauso gut weggekommen Hier mal ein kleiner Auszug aus der TStream Klasse:
Delphi-Quellcode:
function ReadData(var Buffer: Char): Longint; overload;
    function ReadData(var Buffer: Char; Count: Longint): Longint; overload;
    function ReadData(var Buffer: Int8): Longint; overload;
    function ReadData(var Buffer: Int8; Count: Longint): Longint; overload;
    function ReadData(var Buffer: UInt8): Longint; overload;
    function ReadData(var Buffer: UInt8; Count: Longint): Longint; overload;
    function ReadData(var Buffer: Int16): Longint; overload;
    function ReadData(var Buffer: Int16; Count: Longint): Longint; overload;
    function ReadData(var Buffer: UInt16): Longint; overload;
    function ReadData(var Buffer: UInt16; Count: Longint): Longint; overload;
    function ReadData(var Buffer: Int32): Longint; overload;
    function ReadData(var Buffer: Int32; Count: Longint): Longint; overload;
    function ReadData(var Buffer: UInt32): Longint; overload;
    function ReadData(var Buffer: UInt32; Count: Longint): Longint; overload;
    function ReadData(var Buffer: Int64): Longint; overload;
    function ReadData(var Buffer: Int64; Count: Longint): Longint; overload;
    function ReadData(var Buffer: UInt64): Longint; overload;
    function ReadData(var Buffer: UInt64; Count: Longint): Longint; overload;
    function ReadData(var Buffer: Single): Longint; overload;
    function ReadData(var Buffer: Single; Count: Longint): Longint; overload;
    function ReadData(var Buffer: Double): Longint; overload;
    function ReadData(var Buffer: Double; Count: Longint): Longint; overload;
    function ReadData(var Buffer: Extended): Longint; overload;
    function ReadData(var Buffer: Extended; Count: Longint): Longint; overload;
Aäquivalent dazu gibt es natürlich auch eine ganze Reihe an WriteData() Methoden. Als einziges das Lesen und Schreiben von ganzen Strings müsste man sich in diesem Falle selbst implementieren. Aber das ist ja jeweils eine Sache von 3-4 Zeilen Code, wenn man einfach die Länge des Strings vorwegschreibt und anschließend den eigentlichen Inhalt.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#7

AW: brauche hilfe mit der VirtualTreeView.

  Alt 17. Aug 2013, 04:39
hi
es kann ja sein das ich etwas übersehe
aber ich finden keine der von dir genannten einträge in der TStream Class und descendants.
in der embarcadero hilfe finde ich diese einträge auch erst ab XE3
ich arbeite aber nur XE2 obwohl ich die XE3 und XE4 Besitze
der grund ist ich haben eine menge Komponenten eigene und fremde die nicht kompatibel sind mit XE3 und XE4

es ist schade dass viele open source projekte nicht weiter entwickelt werden
so wie die Drag and Drop Component Suite von Anders Melander
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: brauche hilfe mit der VirtualTreeView.

  Alt 17. Aug 2013, 16:26
es ist schade dass viele open source projekte nicht weiter entwickelt werden
so wie die Drag and Drop Component Suite von Anders Melander
Hier hat ein DPler die Version für XE4 überarbeitet und ins Netz gestellt. Im dem dazugehörigen Thread findest du auch Versionen für XE2 und XE3.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:28 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