Einzelnen Beitrag anzeigen

Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: nonVCL Treeview rekursiv durchgehen

  Alt 5. Jul 2007, 09:29
Hi,
Delphi-Quellcode:
procedure DoClear(Tree: THandle; Item: HTREEITEM; Code: Integer);
var
  tvi: TTVItem;
  ItemText: String[255];
begin
  while Assigned(Item) do
  begin
    ZeroMemory(@tvi, sizeof(TTVItemW));
    tvi.hItem := Item;
    tvi.mask := TVIF_PARAM or TVIF_TEXT or TVIF_CHILDREN;
    tvi.pszText := @ItemText[1];
    tvi.cchTextMax := sizeof(ItemText);
    CommCtrl.TreeView_GetItem(Tree, tvi);
    Form1.ListBox1.Items.Add(tvi.pszText);
    //if Assigned(TObject(tvi.lParam)) then
      //TObject(tvi.lParam).Free;
      
   // if tvi.cChildren > 0 then
      DoClear(Tree, Treeview_GetNextItem(Tree, Item, TVGN_CHILD), 0);

    Item := TreeView_GetNextItem(Tree, Item, TVGN_NEXT);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 hTVItem: HTREEITEM;
begin
  hTVItem := TreeView_GetRoot(Tv.Handle);
  DoClear(Tv.Handle, hTVItem , 0);
end;
Um zu sehen, ob die Funktion alle Items ausliest, habe ich den Text der Items in einer TListbox angezeigt.
Der Code sollte auch für non VCL gehen, das Problem ist nur, dass ich TTreeview genommen habe und dieser es nicht so gut findet wenn man daTObject(tvi.lParam).Free; ausführt. Da der TTreeview tvi.lParam anscheinend benötigt.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat