Ich finde Mattzes Ansinnen, Fragestellung, Argumenation und Vorgehensweise absolut ok.
OnDraw ist zum Malen da und hat nichts an den Daten zu ändern.
Und ja, ich kenn einige Komponenten, welche jedesmal im OnDraw irgendwelche Daten überschreiben, oder erst dort Operationen ausführen, welche eigentlich in ein OnChange reingehören würden.
Das Verhalten solcher Komponenten ist völlig undurchschaubar, da gedade das Paintereignis an unbestimmter Stelle ausgeführt wird und wozu soll ein einmaliges Ereignis bei jeder Zeichenoperation ausgeführt werden?
Vorallem der Code in #16 ist ein gutes Beispiel.
Jenachdem wie oft das Ding gezeichnet werden muß, steht jedesmal was Anderes drin.
Und ja, wenn man was am Ausgabeformat oder den Daten ändert, dann muß sich das Ding doch neu zeichnen.
Drum macht man sowas auch nicht in einer Zeichenoperation.
Wenn man vollkommene Freiheit haben will, dann nimmt man eben sowas wie das VirtualTreeView oder (falls die Komponente es kann) versetzt die komponente in einen virtuellen Modus,
wo man im OnPaint alles anzeigen kann, was man will.
Aber auch da gilt, daß man z.B. an der Item-Größe nicht erst im OnPaint rumzuspielen hat.