Yup, deswegen. Den Typecast nach TMeinTyp brauchst du auch nicht, da du in der Regel eine Zeiger-Variable von TMeinTyp hast, die du als NodeData verwendest.
Hier noch ein Beispiel mit IterateSubTree (was ich bevorzuge, eben weil es um längen schneller ist):
Delphi-Quellcode:
interface
type
TMeinTyp = record
Titel: WideString;
Foo: Integer;
end;
PMeinTyp = ^TMeinTyp;
TForm1 = class (TForm)
// ...
private
FFoundNode: PVirtualNode;
procedure ItTree_CallBack (Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
// ...
public
// ...
end;
// ...
implementation
// ...
procedure TForm1.ItTree_CallBack (Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
NodeData: PMeinTyp;
begin
NodeData := Sender.GetNodeData (Node);
if (NodeData^.Titel = TMeinTyp (Data).Titel) then
begin
Sender.Focused[Node] := TRUE;
FFoundNode := Node;
Abort := TRUE;
end;
end;
procedure TForm1.Button1Click (Sender: TObject);
var
SuchDaten: PMeinTyp;
begin
New (SuchDaten);
try
SuchDaten^.Titel := Edit1.Text;
FFoundNode := nil;
MeinVST.IterateSubTree (nil, ItTree_CallBack, Pointer(SuchDaten));
if Assigned (FFoundNode) then
ShowMessage ('Eintrag gefunden')
else ShowMessage ('Eintrag nicht gefunden');
finally
Dispose (SuchDaten);
end;
end;