I solved this with a TTimer. Could not think of a better way. Here is the basic idea and it could be improved:
procedure TForm1.VTFocusChanging(Sender: TBaseVirtualTree; OldNode,
NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex;
var Allowed: Boolean);
begin
FocusTimer.Enabled := False;
end;
procedure TForm1.VTFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex);
begin
FLastNode := Node;
FocusTimer.Interval := 250;
FocusTimer.Enabled := True;
end;
procedure TForm1.FocusTimer_OnTimer(Sender: TObject);
begin
FocusTimer.Enabled := False;
if FLastNode = nil then Exit;
PostMessage(Handle, UM_VT_CHANGED, Integer(VT), Integer(FLastNode));
end;