Einzelnen Beitrag anzeigen

Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#3

Re: VirtualStringTree: Nicht immer, wird alles aufgelistet

  Alt 8. Sep 2007, 18:15
Die Listbox zeigte, dass es wirklich an der Darstellung liegt OnInitNode und OnInitChildren sind bei mir nicht zugewiesen, oder meinst du den Code aller gesetzten Ereignisse ? Falls ja:
Delphi-Quellcode:
procedure TfrmExp.VSTFreeNode(Sender: TBaseVirtualTree;
  Node: PVirtualNode);
var Data : PTreeData;
begin
  Data := VST.GetNodeData(Node);
  if Assigned(Data) then
  begin
    Data.fCaption := '';
    Data.fGroesse := '';
    Data.fDateityp := '';
    Data.fIcon := 0;
  end;
end;

procedure TfrmExp.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var Data: PTreeData;
begin
  Data := VST.GetNodeData(Node);
  case Column of
    0: CellText := Data.fCaption;
    1: CellText := Data.fGroesse;
    2: CellText := Data.fDateityp;
  end;
end;

procedure TfrmExp.VSTDblClick(Sender: TObject);
var Node : PVirtualNode;
    Data : PTreeData;
begin
  Node := VST.FocusedNode;
  if not Assigned(Node) then
    Exit;

  Data := VST.GetNodeData(Node);
  if Pfad[Length(Pfad)] <> '\then
    Pfad := Pfad + '\';
  Search(Pfad + Data.fCaption);
end;

procedure TfrmExp.VSTGetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: Integer);
var Data : PTreeData;
begin
  Data := VST.GetNodeData(Node);
  if Assigned(Data) then
    if Column = 0 then
      if Data.fTyp = (ftFile) then
        ImageIndex := Data.fIcon
      else
        ImageIndex := 0;
end;

procedure TfrmExp.VSTCompareNodes(Sender: TBaseVirtualTree; Node1,
  Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer);
var Data1, Data2 : PTreeData;
begin
  Data1 := Sender.GetNodeData(Node1);
  Data2 := Sender.GetNodeData(Node2);
  if (Data1.fTyp = Data2.fTyp) then
    Result := CompareText(Data1.fPfad, Data2.fPfad)
  else
    Result := Ord(Data2.fTyp = ftDir) - Ord(Data1.fTyp = ftDir);
end;
Und falls es noch hilft, hier die Suche, welche die Einträge direkt hinzufügt:
Delphi-Quellcode:
procedure CurDir(TimerID, Msg: Uint; dwUser, dw1, dw2: DWORD); pascal;
begin
  //frmMain.lCurDir.Caption := ST.CurrentDir;
  //frmMain.lTime.Caption := IntToStr(St.SearchDuration)+' ms';
  //frmMain.lFiles.Caption := IntToStr(St.FilesCount);
  //frmMain.lDirs.Caption := IntToStr(St.DirsCount);
end;

procedure TfrmExp.STStart(var Msg: TMessage);
begin
  VST.Clear;
  tid := TimeSetEvent(500, 1, @CurDir, 0, TIME_PERIODIC);
end;

procedure TfrmExp.STNewFile(var Msg: TMessage);
var TreeData : TTreeData;
    Ext : String;
    Icon : TIcon;
begin
  VST.NodeDataSize := SizeOf(TTreeData);
  VST.BeginUpdate;

  TreeData.fCaption := ExtractFileName(PWideChar(Msg.LParam));
  TreeData.fPfad := PWideChar(Msg.LParam);
  TreeData.fGroesse := BytesToStr(GetFileSize(PWideChar(Msg.LParam)));
  TreeData.fTyp := (ftFile);

  Ext := ExtractFileExt(TreeData.fCaption);
  if not (Pos('*.', Ext) > 0) then
  begin
    if Ext[1] = '.then
      Ext := '*' + Ext
    else
      Ext := '*.' + Ext;
  end;
  if Ext <> 'then
  begin
    TreeData.fDateityp := GetExtDes(Ext, False);
    Icon := TIcon.Create;
    GetExtIcon(Ext, Icon, False);
    TreeData.fIcon := Img.AddIcon(Icon);
    Icon.Free;
  end;
  AddVSTStructure(VST, nil, TreeData);
  VST.EndUpdate;
end;

procedure TfrmExp.STNewDir(var Msg: TMessage);
var TreeData : TTreeData;
begin
  VST.NodeDataSize := SizeOf(TTreeData);
  VST.BeginUpdate;

  TreeData.fCaption := ExtractFileName(PWideChar(Msg.LParam));
  TreeData.fPfad := PWideChar(Msg.LParam);
  TreeData.fGroesse := '';
  TreeData.fDateityp := 'Ordner';
  TreeData.fTyp := (ftDir);

  AddVSTStructure(VST, nil, TreeData);
  VST.EndUpdate;
end;

procedure TfrmExp.STFinish(var Msg: TMessage);
begin
  Application.ProcessMessages;
  TimeKillEvent(tid);

  //frmMain.lCurDir.Caption := 'Fertig';
  //frmMain.lTime.Caption := IntToStr(St.SearchDuration)+' ms';
  //frmMain.lFiles.Caption := IntToStr(St.FilesCount);
  //frmMain.lDirs.Caption := IntToStr(St.DirsCount);
end;
  Mit Zitat antworten Zitat