Vorweg: das Problem habe ich mit Delphi XE. Mit neuerem Delphi kann ich aktuell nicht testen.
Gegeben ist ein TListView, mit eigener TListItemClass, die eigene Daten speichert. Nach einem Session-Wechsel sind diese eigenen Daten verloren.
Ein paar Tests haben ergeben, dass bei Sessionwechsel (z.B. RDP) neue Instanzen von TTestListItem erzeugt werden. Das überschriebene Assign() wird gar nicht aufgerufen, aber die sichtbaren Eigenschaften übernommen.
Form source auf gitlab.com
Schritte zum Reproduzieren stehen da drin, aber gerne auch hier:
- Programm starten
- Listitems anklicken, beobachten dass Daten unten im Memo erscheinen
- Per RDP auf gleichen Rechner verbinden, Programm nicht schließen
- Listitems anklicken, beobachten dass Daten nun leer (und MessageDlg anzeigt, dass neue Instanzen erzeugt wurden)
Gibt es dieses Problem mit aktuellem Delphi immer noch?
Übersehe ich vielleicht etwas und müsste neben Assign noch etwas anderes überschreiben?
PS: Natürlich weiß ich, dass es nicht sauber ist, Daten und UI zu vermischen. Tatsächlich habe ich auch nur ein weiteres eigenes Feld, das auf meine Daten zeigt, aber für's Demo war das so praktisch.