Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Via Compiler Bedingung FireMonkey erkennen (https://www.delphipraxis.net/193276-via-compiler-bedingung-firemonkey-erkennen.html)

backdraft 11. Jul 2017 13:13

Via Compiler Bedingung FireMonkey erkennen
 
Hallo zusammen,

ich weiß nicht, ob ich zu doof zum Suchen bin.
Gibt es eine Möglichkeit, dass ich im Compiler Vorgang erkenne, ob es eine VCL oder FMX Anwendung ist?

So wie:
Delphi-Quellcode:
{$IFDEF WIN32}
Danke

SebastianZ 11. Jul 2017 13:22

AW: Via Compiler Bedingung FireMonkey erkennen
 
http://docwiki.embarcadero.com/RADSt...ierung_(Delphi)

Das geht nur mit Boardmitteln so weit ich weiß nicht. Der Compiler weiß an der Stelle nicht ob du VCL oder FMX erzeugst, nur welche Zielplattform. Es ist sogar möglich VCL und FMX zu mischen.

Was du machen kannst ist, pro Projekt entsprechende Werte selbst zu definieren (zB in den Projektoptionen -> Delphi-Compiler -> Bedingungen).

Stevie 11. Jul 2017 13:37

AW: Via Compiler Bedingung FireMonkey erkennen
 
Nein, gibt es nicht.

Erkläre mal, wozu du das benötigst. Davon hängt nämlich ab, welche Alternativen es gibt.

himitsu 11. Jul 2017 14:11

AW: Via Compiler Bedingung FireMonkey erkennen
 
Zitat:

Zitat von backdraft (Beitrag 1376453)
Gibt es eine Möglichkeit, dass ich im Compiler Vorgang erkenne, ob es eine VCL oder FMX Anwendung ist?

Nein. (leider)

Man kann in einer Anwendung sogar Beides oder Nichts drin haben.



"Falls" im Projekt der VCL- oder FMX-Namespace definiert ist,
dann könnte man sich zwei Units basteln -> vcl.test.pas und fmx.test.pas .
Da drin dann eine Konstante deklarieren und "test" ins Uses aufnehmen.
Je nach definiertem Standardnamespace kompiliert dann eine der beiden Units oder knallt, falls keiner der Namespaces existiert.


Was ich mal wollte, war in einer Komponente abhängig von VCL oder FMX die passenden Units zu verwenden.
Alles was nicht Windows ist, ist niemals VCL, aber bei Windows ist das nicht so leicht.
Abhängig davon kommt es dann drauf an, welche TCanvas, TControl, TApplication usw. verwendet werden müssen.

Rollo62 11. Jul 2017 18:18

AW: Via Compiler Bedingung FireMonkey erkennen
 
Naja, ich mach das halt mit einem global Define:
USE_FMX oder USE_VCL

Ist nicht super elegant, funktioniert aber als Übergangslösung bis es etwas Besseres gibt.
Muss man halt bei jedem Projekt einmal setzen.

Rollf

Uwe Raabe 11. Jul 2017 19:34

AW: Via Compiler Bedingung FireMonkey erkennen
 
Wenn du eine Datei namens UserTools.proj im AppData-Verzeichnis (bei Tokyo ist das %APPDATA%\Embarcadero\BDS\19.0) anlegst und mit dem unten stehenden Inhalt füllst, dann kannst du das aktuelle Framework über
Delphi-Quellcode:
{$IFDEF FrameWork_VCL}
oder
Delphi-Quellcode:
{$IFDEF FrameWork_FMX}
abfragen. Sollte wider Erwarten eine gleichnamige Datei schon vorhanden sein, musst du halt den Eintrag darin sinnvoll ergänzen.

XML-Code:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
       <DCC_Define>FrameWork_$(FrameworkType);$(DCC_Define)</DCC_Define>
    </PropertyGroup>
</Project>

bra 12. Jul 2017 10:40

AW: Via Compiler Bedingung FireMonkey erkennen
 
Kann man eventuell die Konstante FireMonkeyVersion prüfen? Oder ist die auch bei VCL definiert?

http://docwiki.embarcadero.com/RADSt...rte_Konstanten

Uwe Raabe 12. Jul 2017 12:05

AW: Via Compiler Bedingung FireMonkey erkennen
 
Zitat:

Zitat von bra (Beitrag 1376533)
Kann man eventuell die Konstante FireMonkeyVersion prüfen? Oder ist die auch bei VCL definiert?

Dazu müsste man die Unit FMX.Types usen, was man aber eben nicht tun würde, wenn es kein FMX-Projekt ist. Insofern würde das in diesem Fall nicht helfen.

Zitat:

Zitat von Uwe Raabe (Beitrag 1376489)
Wenn du eine Datei namens UserTools.proj im AppData-Verzeichnis (bei Tokyo ist das %APPDATA%\Embarcadero\BDS\19.0) anlegst und mit dem unten stehenden Inhalt füllst, dann kannst du das aktuelle Framework über
Delphi-Quellcode:
{$IFDEF FrameWork_VCL}
oder
Delphi-Quellcode:
{$IFDEF FrameWork_FMX}
abfragen.

Dieser Ansatz ist leider benutzerspezifisch und müsste für jeden Benutzer separat erfolgen. Gerade in Team- und Buildserver-Umgebungen könnte das ein nicht zu vernachlässigender Aufwand sein. Allerdings ist mir kein anderes Verfahren bekannt, was diese Defines projektunabhängig bereitstellt.

Übrigens gibt es noch ein drittes Define, wenn ein Projekt weder FMX noch VCL ist:
Delphi-Quellcode:
FrameWork_None

Memnarch 13. Jul 2017 16:03

AW: Via Compiler Bedingung FireMonkey erkennen
 
Delphi-Quellcode:
{$If declared(TGraphic)}

Unter FMX gibt es die Klasse TGraphic in der Graphics unit nicht. Isn hack den ich auch in meinem AsciiImage verwendet hab :D
Und abhängig davon kannst du dir defines bezüglich FMX/VCL machen.

Grüße
Memnarch

Uwe Raabe 13. Jul 2017 16:15

AW: Via Compiler Bedingung FireMonkey erkennen
 
Zitat:

Zitat von Memnarch (Beitrag 1376658)
Delphi-Quellcode:
{$If declared(TGraphic)}

Unter FMX gibt es die Klasse TGraphic in der Graphics unit nicht.

Das zwingt dich aber wiederum mit Unit Scope Names zu arbeiten, wobei du dann projektbezogen VCL bzw. FMX dort einsetzen musst. Dann kann man auch gleich projektbezogen die Defines richtig setzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:44 Uhr.

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