Hallo,
ich habe ein XE2-Projekt in dem in einem Thread ein Formular erzeugt wird welches ein TChart beinhaltet. Dieses Projekt läuft unter XE2 einwandfrei.
Wenn ich das gleiche Projekt unter XE7 starte, wird beim Form.create(im Thread) eine
Exception erzeugt. Nehme ich das TChart aus der Form raus, kann das Formular erzeugt werden.
Hat jemand eine Idee woran das liegen kann?
Ganz einfach: Du hast einfach nur verdammt viel Glück gehabt das deine Lösung unter XE2 funktionierte.
GUI und Threads ist nicht gut. Alle
GUI-Aktionan (Formulare, ... TChart) müssen im Hauptthread der Anwendung erledigt werden.
Die
WinAPI (was hinter TForm/TChart letztendlich verwendet wird) ist Thread-Affine. Ein
Handle ist immer nur im erzeugenden Thread gültig.
Und da die
VCL oft auch mal auf die TScreen oder TApplication-Instanz zugreift (die ja im Hauptthread erzeugt wurde) kracht es früher oder später wenn du versuchst ein Formular im Thread zu erzeugen und zu verwenden.
Windows Vista - Eine neue Erfahrung in Fehlern.