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 da
TObject(tvi.lParam).Free;
ausführt. Da der TTreeview
tvi.lParam anscheinend benötigt.