![]() |
UNITS für VCL und FMX gleichzeitig verwenden
ich möchte div. Units von mir erstellt für Anwendungen unter dem VCL Framework in Zukunft auch mit Anwendungen im FMX Framework verwenden .
Die Plattform spezifischen Units von Delphi verhindern aber diesen Ansatz
Delphi-Quellcode:
interface uses Vcl.Controls, Vcl.Forms, Vcl.StdCtrls, System.SysUtils, .... Ferner weigert sich Delphi folgenden VCL Code procedure zu kompilieren
Delphi-Quellcode:
Als Fehlermeldung kommt FXM.Memo nicht kompatibel zu VCL.Memo. procedure Write2Memo ( ...... ; aMemo : Tmemo ) ; Kann man über ??????? abfragen ob die Anwendung für die FMX oder VCL PLatform ist und entsprechend die Units einbinden/Anpassen ? Wenn die Lösung dann Lazarus als weitere Compiler Option unterstützt , wäre dieser Ansatz ggf. in der Zukunft auch ein Thema für uns. Das ganze soll natürlich für "Komponenten" funktionieren die auf allen Plattformen identisch sind, als amemo.lines.add(...) sobald ich Plattform spezifischen Code habe ist hier Schluss. ; |
AW: UNITS für VCL und FMX gleichzeitig verwenden
Ich hab zwar kein Firemonkey, aber müsste das nicht über div. IFDEFs zu machen sein?
|
AW: UNITS für VCL und FMX gleichzeitig verwenden
aber finde ich heraus ob die Hauptanwendung im FXM Framework jetzt erstellt wird ? :shock:
|
AW: UNITS für VCL und FMX gleichzeitig verwenden
Hallo,
z.b. kannst du das so abfragen. {$IF DECLARED(FireMonkeyVersion)} {$DEFINE HAS_FMX} {$ELSE} {$DEFINE HAS_VCL} {$IFEND} |
AW: UNITS für VCL und FMX gleichzeitig verwenden
Ich bin mir nicht sicher ob ich das Problem richtig verstehe aber vllt. reicht es in deinem Fall schon wenn du vor explizit VCL.TMemo, bzw. FMX.TMemo bei Deklarationen.
Kombiniert mit einem IFDEF sollte das dann auf jeden Fall hinhauen. |
AW: UNITS für VCL und FMX gleichzeitig verwenden
Ich lege Dir mal diese
![]() |
AW: UNITS für VCL und FMX gleichzeitig verwenden
Sollte man nicht besser das ausnutzen, wofür diese Prefixe eingeführt wurden?
Man gibt im Projekt die entsprechenden Namespaces an (sollten sogar schon standardmäßig an sein, bei neueren Projekten) und schreibt in die units nur noch
Delphi-Quellcode:
rein.
Controls, Forms, StdCtrls, {System.}SysUtils, ....
Delphi findet nun die Units nicht und probiert die angebenen Namespaces durch, wobei in der VCL-Anwendung dann das
Delphi-Quellcode:
bei raus komm
Vcl.Controls, Vcl.Forms, Vcl.StdCtrls, {System.}SysUtils, ....
und bei einer FireMonkey das
Delphi-Quellcode:
.
Fmx.Controls, Fmx.Forms, Fmx.StdCtrls, {System.}SysUtils, ....
(System sollte in beiden Anwendungen definiert sein) |
AW: UNITS für VCL und FMX gleichzeitig verwenden
Das mit den Namespaces hat bei mir noch nie richtig funktioniert eher nur sporadisch. Ich gehe lieber über die Compilerschalter, das ist aus meiner Sicht sicherer und ich kann es besser definieren.
|
AW: UNITS für VCL und FMX gleichzeitig verwenden
Ich vermute mal, du hast UI und Logik zu dicht zusammen.
Eigentlich gibt es keinen Grund direkt in ein Memo zu schreiben ... Man schreibt einfach in eine StringList und diese StringList zeigt die Form einfach in dem Memo an. Hmmm, eigentlich macht man das noch etwas anders .... In eine Struktur wird ein Eintrag erstellt (Record oder Klassen-Instanz ist egal). Aus diesem/diesen Einträgen wird dann zur Visualisierung eine StringList gefüllt. Die Form zeigt im Memo dann den Inhalt dieser StringList an. |
AW: UNITS für VCL und FMX gleichzeitig verwenden
Zitat:
Delphi-Quellcode:
procedure Write2Memo(ALines: TStrings);
begin ALines.BeginUpdate; try ALines.Add('111'); ALines.Add('222'); ALines.Add('333'); finally ALines.EndUpdate; end; end; procedure TForm1.Button1Click(Sender: TObject); begin Write2Memo(Memo1.Lines); Write2Memo(ListBox1.Items); // Geht dann z.B. auch für Listboxen end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 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 by Thomas Breitkreuz