AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Compilerschalter für VCL-Sprache

Ein Thema von himitsu · begonnen am 25. Apr 2015 · letzter Beitrag vom 26. Apr 2015
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.231 Beiträge
 
Delphi 12 Athens
 
#1

Compilerschalter für VCL-Sprache

  Alt 25. Apr 2015, 19:42
Delphi-Version: XE3
Kann man irgendwie "einfach" entscheiden, mit welcher Sprachversion der Delphi-Compiler grade compiliert?
BDSSetLang > Bibliothekssprache

Die Grundidee besteht darin, eigene Konstanten in der selben Sprache wie die RTL/VCL mitzugeben.

Erster billiger Versuch war,
Delphi-Quellcode:
uses
  SysConst;

resourcestring
  {$IF SUnknown = '<unbekannt>'}
    {$DEFINE LANG_DE}
    SAccessDenied = 'Zugriff verweigert';
  {$ELSEIF SUnknown = '<inconnu>'}
    {$DEFINE LANG_FR}
    SAccessDenied = 'Accès refusé';
  {$ELSEIF SUnknown = '<未知>'}
    {$DEFINE LANG_JA}
    SAccessDenied = 'アクセス拒否';
  {$ELSE SUnknown = '<unknown>'}
    {$DEFINE LANG_EN}
    SAccessDenied = 'Access denied';
  {$ENDIF}
was aber natürlich nicht ging, denn
Delphi-Quellcode:
const
  X = 'abc';
  Y: string = 'abc';

resourcestring
  Z = 'abc';

{$IF X = 'abc'} {$IFEND}  // geht
{$IF Y = 'abc'} {$IFEND}  // [dcc32 Fehler] E2026 Konstantenausdruck erwartet
{$IF Z = 'abc'} {$IFEND}  // [dcc32 Fehler] E2026 Konstantenausdruck erwartet
Und ich hab überall nur Resourcestrings gefunden. (System.SysConst, System.RTLConsts, FMX.Consts usw.)

Ideal wäre ein Compilerschalter (DEFINE) oder eine Konstante ala CompilerVersion/RTLVersion, welches direkt vom Compiler kommt.

Grade eben hab ich zumindestens einwas hinbekommen, daß sich dann so auswerten liese:
Delphi-Quellcode:
{$IFDEF LANG_DE}
  *
{$ENDIF}
bzw.
Delphi-Quellcode:
{$IF Defined(LANG_DE)}
  SAccessDenied = 'Zugriff verweigert';
{$ELSEIF Defined(LANG_FR)}
  SAccessDenied = 'Accès refusé';
{$ELSEIF Defined(LANG_JA)}
  SAccessDenied = 'アクセス拒否';
{$ELSE Defined(LANG_EN)}
  SAccessDenied = 'Access denied';
{$ENDIF}
Aber für eine Fremdkomponente ohne Installer ist es halt etwas unpraktisch, wenn man erst LANG_$(LangDir) in Projektooptionen > Delphi-Compiler > Bedingungen einfügen muß.
Auch der "offizielle" Weg ist bissl unpraktisch, also wo man für die zwei Strings jeweils mehrere Units erstellt, diese in Unterverzeichnisse verfrachtet und dann diese Verzeichnisse auch noch in den Bibliothekspfaden einrichten muß.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (25. Apr 2015 um 19:50 Uhr)
  Mit Zitat antworten Zitat
 


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 09:11 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