Einzelnen Beitrag anzeigen

freak1985
(Gast)

n/a Beiträge
 
#2

Re: Bestimmte Datei in ein TVirtualStringTree einlesen

  Alt 6. Sep 2005, 13:47
so. nach langem Hin und Her hab ich es endlich geschafft^^


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
type
  TMyNode = record
    Name: String;
    Node: PVirtualNode;
  end;

var
  i, k: Integer;
  TreeData: TTreeData;
  tmp: TStringDynArray;
  tmpNode: PVirtualNode;
  NodeList: array of TMyNode;
  tmp_: cardinal;


  function GetNode(NName: String): PVirtualNode;
  var
    j: integer;
  begin
    Result := nil;

    for j := Low(NodeList) to High(NodeList) do
      if NName = NodeList[j].Name then
        Result := NodeList[j].Node;

  end;

begin
  tmp_ := GetTickCount;

  // VirtualStringTree vorbereiten
  VST.NodeDataSize:=SizeOf(TTreeData);
  VST.BeginUpdate;

  // Liste durchlaufen
  for i := 0 to ListBox1.Items.Count - 1 do
  begin

    tmp := Explode('|', ListBox1.Items[i]);

    tmpNode := nil;

    // Teile durchlaufen
    for k := Low(tmp) to High(tmp) do
    begin
      TreeData.FCaption := tmp[k];
      TreeData.FData := tmp[k];

      if GetNode(tmp[k]) = nil then
        tmpNode := AddVSTStructure(VST, tmpNode, TreeData)
      else
        tmpNode := GetNode(tmp[k]);

      // Node merken
      SetLength(NodeList, Length(NodeList) + 1);
      NodeList[Length(NodeList) - 1].Name := tmp[k];
      NodeList[Length(nodeList) - 1].Node := tmpNode;

    end;

  end;

  VST.EndUpdate;

  caption := inttostr(gettickcount - tmp_) + 'ms';


end;

das Problem ist nur die Geschwindigkeit. Das dauert fast 2 sekunden. die Datei hat 2000 Zeilen....


hat jemand eine effizientere Lösung?



MfG
  Mit Zitat antworten Zitat