Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi VCL Types in FMX Anwendung (https://www.delphipraxis.net/196977-vcl-types-fmx-anwendung.html)

DelphiSüchtig 5. Jul 2018 13:00

VCL Types in FMX Anwendung
 
Hallo zusammen, folgendes Anliegen:

ich habe eine neue FMX Anwendung geschrieben. In dieser Anwendung möchte ich über eine bestehende Unit verschiedene VCL Types einbinden und verwenden, zum Beispiel TPoint.
Nun lautet meine Frage, wie ich das am besten anstelle, da mein Compiler die besagten Types nicht findet, trotz eingebundener Unit. Gibt es dafür eine simple Lösung, zum Beispiel muss ich spezielle Einstellungen in den Projektoptionen vornehmen?

Danke für eure Antworten!

mkinzler 5. Jul 2018 13:07

AW: VCL Types in FMX Anwendung
 
TPoint ist in Systen.Types deklariert.

Im Allgemeinen ist es keine gute Idee, VCL-Typen in FMX zu verwenden, da hier teilweise Typen anders implementiert sind.

DelphiSüchtig 5. Jul 2018 15:31

AW: VCL Types in FMX Anwendung
 
Danke für die Antwort, aber ich habe mich wohl falsch ausgedrückt.

Was ich meinte war dass bis jetzt alles fehlerfrei mit VCL compiliert werden konnte. Nun möchte ich mit FMX arbeiten und jetzt wird mir angezeigt, dass zum Beispiel TPoint nicht gefunden werden kann bzw. nicht deklariert wurde.

Ich habe leider noch nicht verstanden, woran das liegt und wie ich es umgehen kann.

Viele Grüße!

himitsu 5. Jul 2018 15:37

AW: VCL Types in FMX Anwendung
 
Es gibt für einige Typen Umleitungen/Aliase.
Also diese Typen sind mehrfach in verschiedenen Units weitergeleitet. (z.B. weil sie früher mal in VCL-Units lagen und dann da in Globale verschoben wurden, damit es nicht gleich überall knallt)

In deinem Fall mußt du einfach nur die Unit einbinden, wo der Typ "wirklich" implementiert ist (vermutlich Systen.Types), da es hier scheinbar im FMX keine Umleitung gibt.

mkinzler 5. Jul 2018 15:53

AW: VCL Types in FMX Anwendung
 
Viele Typen wurden von der VCL bzw. FMX in die RTL verschoben (wie bei TPoint)

Harry Stahl 5. Jul 2018 17:17

AW: VCL Types in FMX Anwendung
 
Genau. TPoint bindest Du über System.Types ein.

Ansonsten findest Du viel benötigtes in

Delphi-Quellcode:
FMX.Types


Hilfreich sind auch
Delphi-Quellcode:
System.UITypes,
System.UIConsts.
Wenn Du z.B. System.UiConsts einbindest, kannst Du Dir bei einigen Dingen Schreibarbeit sparen, also z.B. statt
Delphi-Quellcode:
color := TAlphaColorRec.Red;

//kannst Du schreiben:

color := claRed;
VCL.Types würde ich ganz raus lassen.

Falls Du eine Unit sowohl unter VCL als auch FMX verwenden solltest, musst Du die jeweiligen VCL / FMX Units eben über {$IFDEF ...} einbinden.

KodeZwerg 5. Jul 2018 17:25

AW: VCL Types in FMX Anwendung
 
Zitat:

Zitat von Harry Stahl (Beitrag 1406622)
Falls Du eine Unit sowohl unter VCL als auch FMX verwenden solltest, musst Du die jeweiligen VCL / FMX Units eben über {$IFDEF ...} einbinden.

Kurze Frage, wie? IFDEF Windows Uses Vcl, IFDEF Windows Uses Fmx ? Ich habe da bestimmt einen Mega Denkfehler aber bin auf eine Antwort gespannt.
Wenn Antwort über ein eigenes DEFINE stattfindet hat es sich erledigt.

Harry Stahl 5. Jul 2018 17:43

AW: VCL Types in FMX Anwendung
 
Zitat:

Zitat von KodeZwerg (Beitrag 1406623)
Zitat:

Zitat von Harry Stahl (Beitrag 1406622)
Falls Du eine Unit sowohl unter VCL als auch FMX verwenden solltest, musst Du die jeweiligen VCL / FMX Units eben über {$IFDEF ...} einbinden.

Kurze Frage, wie? IFDEF Windows Uses Vcl, IFDEF Windows Uses Fmx ? Ich habe da bestimmt einen Mega Denkfehler aber bin auf eine Antwort gespannt.
Wenn Antwort über ein eigenes DEFINE stattfindet hat es sich erledigt.

Ja, wie von Dir vermutet, über ein eigenes Define in den Projekteinstellungen (ich habe eigentlich nur einen einzigen Fall, wo ich das mal brauchte, da habe ich "FMXApp" verwendet, im Source kann man das dann mit

Delphi-Quellcode:
{$IFDEF FMXApp}
... FMX-Units
{$ELSE}
... VCL-Units
{$ENDIF}
lösen.

KodeZwerg 5. Jul 2018 17:53

AW: VCL Types in FMX Anwendung
 
Dacht ich mir beinahe aber Fragen kostet ja nichts, Danke:wink:
Ich böser Mensch, da ich faul mit der IDE bin hät ich mir eine {$DEFINE FmxApp} irgendwo über den Uses Code geschrieben.

Schokohase 5. Jul 2018 18:22

AW: VCL Types in FMX Anwendung
 
Zitat:

Zitat von KodeZwerg (Beitrag 1406626)
Ich böser Mensch, da ich faul mit der IDE bin hät ich mir eine {$DEFINE FmxApp} irgendwo über den Uses Code geschrieben.

Wenn man diese Units in mehreren Projekten verwendet (FMX, VCL, Console gemischt), dann viel Spaß, denn dann musst du jede Unit anfassen (DEFINE gilt ja nur innerhalb der Unit).

In den Projektoptionen festgelegt brauchst du nur kompilieren, fertig (egal in wievielen Units du das auch verwendest).

KodeZwerg 5. Jul 2018 18:24

AW: VCL Types in FMX Anwendung
 
Reicht es da nicht aus wenn man es einmal in der .dpr ankündigt damit es global fürs ganze Projekt Gültigkeit hat? @Schokohase

Schokohase 5. Jul 2018 18:26

AW: VCL Types in FMX Anwendung
 
Zitat:

Zitat von KodeZwerg (Beitrag 1406629)
Reicht es da nicht aus wenn man es einmal in der .dpr ankündigt damit es global fürs ganze Projekt Gültigkeit hat? @Schokohase

Nein

KodeZwerg 5. Jul 2018 18:37

AW: VCL Types in FMX Anwendung
 
Per .dpr defined, per Create getestet
Delphi-Quellcode:
procedure TForm18.FormCreate(Sender: TObject);
begin
{$IFDEF Schokohase}
  mmo1.Lines.Add('Schokohase: True');
{$ELSE Schokohase}
  mmo1.Lines.Add('Schokohase: False');
{$ENDIF Schokohase}
end;
und jupp, kommt ein False raus. Wieder was dazu gelernt.:thumb:

bernhard_LA 6. Jul 2018 06:03

AW: VCL Types in FMX Anwendung
 
ich habe eine Unit entwickelt, da diese unit keine GUI elemente verwendet, also doch auch für beide Frameworks verfügbar sein sollte,
wie kann ich dann den Compiler anweisen, "bitte immer aus system.types die Typen importieren und nicht aus vcl.types" ?

Die Unit wird einmal eingebunden un eine APP die FMX Framework verwendet und einmal in eine andere mit dem VCL Framework.


Gibt es hier eine Best-Practise Dokumentation ????
Später möchte ich dann auch noch nach FMX.Linux ........................

mkinzler 6. Jul 2018 07:13

AW: VCL Types in FMX Anwendung
 
Man kann auch mit den Prefixen in den Projekteinstellungen arbeiten und dann nur

Delphi-Quellcode:
Uses ..., <UnitName>, ...;
verwenden wird dann zu
VCL.<UnitName> oder FMX.<UnitName> expandiert.

Harry Stahl 6. Jul 2018 07:20

AW: VCL Types in FMX Anwendung
 
Mal abgesehen davon, dass es die unit "VCL.Types" nicht gibt, im Prinzip wurde die Frage schon beantwortet, aber hier noch mal als konkretes Beispiel:

1. In den Projekteinstellung der FMX-Anwendung "FMXApp" als Bedingung deklarieren.

2. In der Unit, die sowohl in VCL-Anwendung und FMX-Anwendung genutzt wird, wie folgt:

Delphi-Quellcode:
unit BeideWelten;

Interface

uses
  System.Types, // Plattformneutral, Typen hieraus gelten für alle Plattformen
  System.StrUtils,
  ...

{$IFDEF FMXApp}
  FMX.Types,
  FMX.Graphics
{$ELSE}
  VCL.Clipboard,
  VCL.Graphics
{$ENDIF}

  ;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 Uhr.

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