AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Via Compiler Bedingung FireMonkey erkennen

Via Compiler Bedingung FireMonkey erkennen

Ein Thema von backdraft · begonnen am 11. Jul 2017 · letzter Beitrag vom 13. Jul 2017
Antwort Antwort
backdraft

Registriert seit: 19. Apr 2005
Ort: Hückeswagen
298 Beiträge
 
Delphi 10.4 Sydney
 
#1

Via Compiler Bedingung FireMonkey erkennen

  Alt 11. Jul 2017, 14:13
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: {$IFDEF WIN32} Danke
Oliver
  Mit Zitat antworten Zitat
SebastianZ

Registriert seit: 23. Jul 2009
85 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Via Compiler Bedingung FireMonkey erkennen

  Alt 11. Jul 2017, 14:22
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).
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.847 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: Via Compiler Bedingung FireMonkey erkennen

  Alt 11. Jul 2017, 14:37
Nein, gibt es nicht.

Erkläre mal, wozu du das benötigst. Davon hängt nämlich ab, welche Alternativen es gibt.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.942 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Via Compiler Bedingung FireMonkey erkennen

  Alt 11. Jul 2017, 15:11
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (11. Jul 2017 um 15:14 Uhr)
  Mit Zitat antworten Zitat
Rollo62
Online

Registriert seit: 15. Mär 2007
3.352 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Via Compiler Bedingung FireMonkey erkennen

  Alt 11. Jul 2017, 19:18
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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.933 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Via Compiler Bedingung FireMonkey erkennen

  Alt 11. Jul 2017, 20:34
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 {$IFDEF FrameWork_VCL} oder {$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>
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: Via Compiler Bedingung FireMonkey erkennen

  Alt 12. Jul 2017, 11:40
Kann man eventuell die Konstante FireMonkeyVersion prüfen? Oder ist die auch bei VCL definiert?

http://docwiki.embarcadero.com/RADSt...rte_Konstanten
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.933 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Via Compiler Bedingung FireMonkey erkennen

  Alt 12. Jul 2017, 13:05
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.

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 {$IFDEF FrameWork_VCL} oder {$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: FrameWork_None
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#9

AW: Via Compiler Bedingung FireMonkey erkennen

  Alt 13. Jul 2017, 17:03
{$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
Und abhängig davon kannst du dir defines bezüglich FMX/VCL machen.

Grüße
Memnarch
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden

Geändert von Memnarch (13. Jul 2017 um 17:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.933 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Via Compiler Bedingung FireMonkey erkennen

  Alt 13. Jul 2017, 17:15
{$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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf