Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programmabsturz beim Beenden eines VCL-/FMX-Mischformularprogrammes unter XE 10.1 (https://www.delphipraxis.net/190731-programmabsturz-beim-beenden-eines-vcl-fmx-mischformularprogrammes-unter-xe-10-1-a.html)

Delphi-Laie 1. Nov 2016 14:06

Programmabsturz beim Beenden eines VCL-/FMX-Mischformularprogrammes unter XE 10.1
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Delphifreunde!

Schon wieder kann man sich mit Banalitäten stundenlang beschäftigen, ohne einer Lösung spürbar näherzukommen.

Das angehängte Kleinstprojekt ist ein VCL-/FMX-Gemischtformularprogramm. Es startet mit "Form1", das ein VCL-Formular ist. Optional kann über einen Button das FMX-Formular "Form2" angezeigt werden.

Compiliere ich das mit Delphi 10.1, hat das erhaltene Programm folgendes (Fehl-)Verhalten: Solang ich Form2 nicht aufrufe, kann ich Form1 schließen und damit das Programm ordnungsgemäß beenden. Lasse ich mir jedoch Form2 anzeigen, gibt es beim Schließen des Form1 eine Absturz-Fehlermeldung, aus der ich nicht schlau werden. Mithilfe der beiden Showmessages in den Finalisationsabschnitten läßt sich das Auftreten des Fehlers immerhin auf "nach Finalisation der Unit 2" eingrenzen. Drollig ist auch, daß unter Windows 7 die Finalisation beider Units korrekt ausgegeben wird (wenn auch mit unterschiedlichen Shomessage-Boxen), unter Windows XP nur die Finalisation der Unit 2.

Und das süffisanteste: Compiliere ich dieses Mikroprojekt mit dem nun schon etwas "bejahrten" XE2, verhält sich dessen Compilat korrekt.

Weiß jemand, woran das liegen und wie man das beseitigt bekommen könnte? Evtl. wäre auch interessant, wie es sich mit anderen Delphi XEx-Compilaten verhält.

Danke und Gruß

Delphi-Laie

Daniel 1. Nov 2016 16:22

AW: Programmabsturz beim Beenden eines VCL-/FMX-Mischformularprogrammes unter XE 10.1
 
FireMonkey und die VCL sind zwei grundverschiedene Frameworks, die nicht dazu gedacht sind, so ohne Weiteres in einem Projekt zu koexistieren. Du wirst mit dieser Kombination diverse seltsame Resultate haben - dass es unter XE2 offenbar geht, ist dem damaligen Entwicklungsstand geschuldet. Die Richtung von FMX ist mittlerweile eine andere, eigenständige.
Es gibt sogenannte "Container", die ein FMX-Formular in ein VCL-Formular einbetten können, zum Beispiel: https://parnassus.co/tfiremonkeycont...g-vcl-and-fmx/

Harry Stahl 1. Nov 2016 17:57

AW: Programmabsturz beim Beenden eines VCL-/FMX-Mischformularprogrammes unter XE 10.1
 
Wobei der Container von Parnassus seine Limitationen und "Known Bugs" hat.

Die Beste Erfahrung mit dem Mischen von VCL und FMX-Objekten habe ich bislang noch mit dem Hydra-Framework gemacht:

http://www.hydra4.com/hydra/

Das ist allerdings kostenpflichtig.

Insgesamt würde ich aber von diesem Vorgehen ganz abraten. Unter Windows geht das ja noch, aber wenn man sein Programm dann auch für den MAC anbieten will, kommt man mit VCL-Komponenten auf jeden Fall nicht mehr weiter.

Also lieber alles gleich FMX-Kompos nehmen. Delphi liefert schon eine Menge mit und in der Zwischenzeit gibt es auch für FMX ein großes Angebot von Drittherstellern (u.a. auch TMS).

Delphi-Laie 1. Nov 2016 21:54

AW: Programmabsturz beim Beenden eines VCL-/FMX-Mischformularprogrammes unter XE 10.1
 
Danke Euch beiden!

Vor kurzem sah ich auf youtube in einem Filmchen von einem Simon J.Stuart, daß man nur in der *.dproj-Datei eines VCL-Projektes in der Zeile "Frameworktype" "VCL" mit "FMX" zu ersetzen braucht, und schon kann man nach Belieben FMX-Formulare hinzufügen, was ja erstmal auch stimmt. Das war genau das, was ich suchte. Nur schlug der Detailteufel mal wieder zu. Es ist also leider doch nicht so simpel. Eigentlich wollte ich weder konvertieren (lassen) noch das VCL-Formular neu kreieren, es wird aber ohne wohl nicht möglich sein.

Nebenbei fiel mir ein Fehler in der Hilfe auf, den Delphi / RAD-Studio XEx anscheinend auch schon wieder seit Jahren, wohl seit XE2, mit sich herumschleppt, warum prüft das niemand, fällt das niemandem auf, warum meldet das niemand, was auch immer. In der FMX-Hilfe steht unter TAlphaColor:

"Der Wert
$FFFF0000 (Delphi) oder 0xFFFF0000 (C++) repräsentiert reines Blau,
$FF00FF00 (Delphi) oder 0xFF00FF00 (C++) reines Grün und
$FF0000FF (Delphi) oder 0xFF0000FF (C++) reines Rot.
$FF000000 (Delphi) oder 0xFF000000 (C++) ist Schwarz und
$FFFFFFFF (Delphi) oder 0xFFFFFFFF (C++) Weiß."

Richtig sind hingegen in der Delphi-Notation (nach meinen Experimenten mit dem Drawline-Befehl):

$FF0000FF Blau
$FF00FF00 Grün
$FFFF0000 Rot
$FF000000 Schwarz
$FFFFFFFF Weiß

, also Rot und Blau vertauscht. Warum entdecke ausgerechnet ich Amateur wiederholt (!) bei der ersten Begegnung (!) mit einem neuen Delphi solche Fehler?

Naja, ich verzichte jetzt unter den Mühen der Beherrschung (ausnahmsweise) mal auf mein sonst obligatorisches Gemoser über diesen Produzenten und seine Produkte, konkreter deren Qualität, sondern beende mit noch einem nochmaligen Dank an Euch!

Uwe Raabe 1. Nov 2016 22:53

AW: Programmabsturz beim Beenden eines VCL-/FMX-Mischformularprogrammes unter XE 10.1
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1352395)
Richtig sind hingegen in der Delphi-Notation (nach meinen Experimenten mit dem Drawline-Befehl):

oder durch Blick in die Deklaration von
Delphi-Quellcode:
TAlphaColorRec.Blue
(auch als
Delphi-Quellcode:
claBlue
bekannt).

Zitat:

Zitat von Delphi-Laie (Beitrag 1352395)
Warum entdecke ausgerechnet ich Amateur wiederholt (!) bei der ersten Begegnung (!) mit einem neuen Delphi solche Fehler?

Weil vermutlich niemand in die Hilfe schaut oder auf die Idee kommt Farben mit Hex-Konstanten anzugeben. Der Trick mit den vordefinierten Konstanten steht übrigens auch in der Hilfe:
Zitat:

Unter TAlphaColorRec finden Sie eine Liste der vordefinierten Farben.
Wieder mal ein schönes Beispiel, daß ausschließlich Code die Wahrheit spricht und man sich auf Dokumentation nicht verlassen kann. (Ist übrigens im DokWiki jetzt gefixt)

Delphi-Laie 2. Nov 2016 10:15

AW: Programmabsturz beim Beenden eines VCL-/FMX-Mischformularprogrammes unter XE 10.1
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1352397)
Weil vermutlich niemand [...] auf die Idee kommt Farben mit Hex-Konstanten anzugeben.

Doch das kann schon vorkommen. Zum einen, um den in FMX neuen TAlphaColor-Farbraum zu erforschen (nun kenne ich seine Geheimnisse), zum anderen, weil sich mit den aneinandergereihten Fs Farbkomponenten schnell und bequem maximieren lassen.

Delphi-Laie 3. Nov 2016 15:54

AW: Programmabsturz beim Beenden eines VCL-/FMX-Mischformularprogrammes unter XE 10.1
 
Vielleicht darf ich zur Ehrenrettung des Delphis XE 10.1 noch ergänzen, daß das monierte Fehlverhalten mit einem 64-Bit-Compilat nicht auftritt.

sahimba 3. Nov 2016 17:16

AW: Programmabsturz beim Beenden eines VCL-/FMX-Mischformularprogrammes unter XE 10.1
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1352586)
Vielleicht darf ich zur Ehrenrettung

Einer Ehrenrettung bedarf es nicht.
VCL/FMX dürfen nicht gemischt werden; so steht es in der Doku.
Alles andere ist at your own risk. Kann funktionieren, muss aber nicht.
Kurzum: Delphi geht auch hier ehrenvoll aus der Runde raus ;)

Darlo 4. Nov 2016 13:11

AW: Programmabsturz beim Beenden eines VCL-/FMX-Mischformularprogrammes unter XE 10.1
 
Ich mische in einem Projekt auch VCL und FMX. VCL für Fastreport und FMX um bequemer Grafiken zu basteln.
Ich habe weder unter 32bit noch unter 64bit Probleme.

Delphi-Laie 4. Nov 2016 14:44

AW: Programmabsturz beim Beenden eines VCL-/FMX-Mischformularprogrammes unter XE 10.1
 
Zitat:

Zitat von Darlo (Beitrag 1352650)
Ich mische in einem Projekt auch VCL und FMX. VCL für Fastreport und FMX um bequemer Grafiken zu basteln.
Ich habe weder unter 32bit noch unter 64bit Probleme.

Du hast es gut.

Darf man fragen, welches Format das originale (ersterzeugte) Formular hat?

Bei mir ist es ein VCL-Formular, das FMX-Formular wird erst als zweites erzeugt. Alles scheint bestens. Der Fehler tritt erst dann auf, wenn das FMX-Formular irgendwann zur Laufzeit angezeigt wird, erst beim Beenden des Programmes und nur unter 32 Bit. Das schrieb ich oben alles schon, und dort ist auch der Quellcode des dysfunktionalen Beispielprojektes.

Edit: Das ließ mir keine Ruhe, ich mußte es ausprobieren. Also, wenn man mit einem FMX-Projekt startet und diesem ein VCL-Formular hinzufügt und dieses während der Laufzeit sich anzeigen läßt, dann sind die Compilate 32 und 64 Bit ohne Beanstandung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:38 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz