Hallo!
Ich habe vor einiger Zeit mit Eurer Hilfe (vor allem marabu hat mir sehr geholfen) eine Funktion ausgeknobelt, mit der man durch vergleichen der Zeiger herausfinden kann, welcher
XML-Knoten zum entsprechenden Treeviewknoten gehört.
Siehe auch:
http://www.delphipraxis.net/internal...220&highlight=
Die Funktion sieht wie folgt aus:
Delphi-Quellcode:
function FindTreeNodeXML(LinkedXMLNode:IXMLDOMNode):TTreeNode;
var
cnt:integer;
u_LinkedNode, u_chekNode : IUnknown;
begin
//Durch alle Knoten laufen
for cnt:= 0 to form1.TrView_Struktur.Items.Count-1 do
begin
u_chekNode := PNodeState(form1.TrView_Struktur.
Items[cnt].Data).XMLNode as IUnknown;
u_LinkedNode := LinkedXMLNode as IUnknown;
if u_chekNode = u_LinkedNode then
begin
result:=form1.TrView_Struktur.Items[cnt];
exit;
end;
end;
result:=nil;
end;
Das funktioniert soweit wunderbar. Leider kommte es aber sehr selten dazu, dass die Zeiger nicht mehr zueinander passen, obwohl (nachweislich) sowohl der
XML-, als auch der Treeviewknoten noch vorhanden ist. Wenn die Baumansicht aktualisiert bzw. neu aufgebaut wird, stimmen die Zeiger wieder.
Da ich zwar beim Vergleich das Elemtarinterface (IUnknown) verwende, aber zu den TreeView-Knoten einfach den Zeiger auf den
XML-Knoten, ist meine Vermutung, dass dieses Problem durch eine Aktion des Betriebssystems hervorgerufen wird, die dafür sorgt, dass die Zeiger nicht mehr zueinander passen?
Ist meine Theorie richtig?
Wenn ich schonn beim Speichern des Zeigers im Treeview IUnknown verwenden würde, würde das das Problem lösen?
Das Problem tritt sehr selten (meist nach langer Wartezeit) auf und ist dementsprechend schwer zu reproduzieren. Wenn es aber auftritt, so sind alle Zeiger, die im Treeview abgelegt wurden, betroffen.
Hat jemand eine Idee hierzu? Was kann die Ursache sein?
Gruß,
StTüff