I've been wrestling with interactions over the last few days, but think I've got things sorted by now. Incoming contact blips, a callback to code to add/move/update/delete traffic slips in a TreeView, depending on what happens there the blip is either added to a cache or used to update an existing entry.
The tricky bit centres around a CustomDraw to handle colours, since that relies on a TreeNode.Data pointer to a blip... so it's vitally important to know whether it's been cached or deleted (which would of course be a serious error).
Central to that is being absolutely sure that all TreeView operations have, in fact, been completed before cases where a blip is copied into an existing cache entry and deleted. I'm not sure whether there is a simple "MessageQueue is non-empty" test, but I might add an extra IdleTimer which does nothing but update an activity counter indicating that no further APMs are needed.
I'm still interested in anybody's thoughts on single-level node sorting, but meanwhile am moving on to displaying map overlays using a facility that Alpine has recently added to LazMapViewer.
MarkMLl