![]() |
DPR-Uses: Methode zum Include von zusätzlichen Files
Hallo zusammen,
ich experimentiere gerade wie ich das Einbinden von Fixes der FMX(VCL)-Libraries bequemer gestalten kann. Normalerweise müsste man eine Kopie der Library erstellen, darin die nötigen Änderungen machen, und dann diese dann per "Add New" in das Projekt aufnehmen. Damit würde die gefixte Library statt der orginalen Delphi-Library ins Projekt eingebunden. Das wird aber bei einigen Files ein ziemlicher manueller Aufwand. Ich kann diese Liste der Library "Fixes" aber in eine Include-Datei schreiben: Z.B. in einer Datei "_FmxFixes\_FmxFixes_Startup.inc"
Delphi-Quellcode:
Die "gefixten" Units liegen dann natürlich auch dabei.
iOSapi.CoreLocation in '_FmxFixes\iOSapi.CoreLocation.pas',
System.iOS.Sensors in '_FmxFixes\System.iOS.Sensors.pas', FMX.Media.Android in '_FmxFixes\FMX.Media.Android.pas', In der DPR Datei kann ich diese Liste einfach zu den normalen Uses Definitionen includieren:
Delphi-Quellcode:
Das funktioniert soweit super, und ist IMHO recht simpel.
uses
System.StartUpCopy, {$INCLUDE _FmxFixes\_FmxFixes_Startup.inc} //<-- Das bindet die "Fixes" aus dem Includem it ein FMX.Forms, uMain in 'uMain.pas' {Main_Frm}; So habe ich nur einen zentralen Einsprungpunkt für alle gewünschten Fixes, und kann das leicht für verschiedene Versionen und Platformen warten. Ein Problem damit ist, dass bei jeder Änderung der Forms, oder bei neuem Einbinden von Forms, Frames, DataModules dieser Uses-Listen Eintrag zerstört wird. Die sieht danach so aus:
Delphi-Quellcode:
Da ich nur mit einer MainForm und einer Handvoll DatenModulen arbeite, und normalerweise weitere Units per Runtime hinzufüge, ist das erträglich.
uses
System.StartUpCopy, {$INCLUDE} //<-- Hier hat es mir die IDE den Dateinamen weggelöscht. FMX.Forms, uMain in 'uMain.pas' {Main_Frm}, Unit1 in 'Unit1.pas' {Form1}; Trotzdem ist ist es nervig nach einer Änderung diese Zeile wieder manuell zu korrigieren, gibt es dafür evtl. einen Workaround, oder eine bessere Lösung ? Für ein paar erleuchtende Ideen und Vorschläge wäre ich euch dankbar. Rollo |
AW: DPR-Uses: Methode zum Include von zusätzlichen Files
Warum lässt du das Hinzufügen der Fix-Units nicht ganz und fügst einfach den Pfad zu deinem _FmxFixes Verzeichnis (bzw. die Pfade, wenn es mehrere sind) in deinen Projekt-Suchpfad ein? Dann findet der Compiler die gefixten Units vor den Standard-Units. So mache ich das hier in mehreren Projekten ohne Probleme.
Ist der Fehler dann irgendwann in Delphi selbst behoben, brauche ich nur die Fix-Unit als Datei löschen und alles ist gut. |
AW: DPR-Uses: Methode zum Include von zusätzlichen Files
Hallo Uwe,
ja, das hatte ich ja schon versucht, aber der Compiler nahm trotzdem die orginalen Files :( Muss ich nochmal checken, vielleicht war da irgendwas falsch gelaufen. Ich hatte alle Fixes in einer zentralen Unit in deren Uses geladen, und diese zentrale Unit mit in das Projekt eingebunden. Weil es aber nicht funktionierte, und die Fehlerursache etwas unerwartet war, habe ich nach einem anderen Weg gesucht, mit dem ich garantieren kann das wirklich die gefixten Files eingebunden werden. Rollo |
AW: DPR-Uses: Methode zum Include von zusätzlichen Files
Garantieren könntest du das evtl. indem du per {$DEFINE} etwas in einer deiner Fix-Units deklarierst und z.B. in der .DPR prüfst ob das gesetzt ist. Wenn nicht, wird ein Fehler geworfen.
Aber wie Uwe sagt, die Priorität ist eigentlich
Vielleicht hättest du das Projekt einfach vorher "bereinigen" müssen? |
AW: DPR-Uses: Methode zum Include von zusätzlichen Files
Ja, ich habe mir das nochmal angeschaut.
Es gab zwei Kopien der Units, einer im falschen Pfad: War nur ein schneller Test, und womöglich habe ich zu schnell getippt :shock: Ansonsten ist es jetzt wieder in Ordnung. Jetzt habe ich es wieder zurückgebaut von Includes auf Units: die normale Unit _FmxFixes_Startup.pas, ohne Include
Delphi-Quellcode:
das dann geladen in den Uses der DPR:
unit _FmxFixes_Startup;
interface implementation uses iOSapi.CoreLocation , System.iOS.Sensors , FMX.Media.Android ; end.
Delphi-Quellcode:
uses
System.StartUpCopy, _FmxFixes_Startup in '_FmxFixes\_FmxFixes_Startup.pas', //<-- Ja, das war der Pfad FMX.Forms, uMain in 'uMain.pas' {Main_Frm};
So war es gedacht, dankesehr für die Mithilfe an Alle. |
AW: DPR-Uses: Methode zum Include von zusätzlichen Files
Noch ein Nachtrag, habe jetzt noch eine Verifikation der CompilerVersion mit eingebaut.
Eine Compiler-Warnung wird ausgegeben wenn es nicht passt. In den _FMX_Fixes_Startup.pas Units wird die jeweils angedachte CompilerVersion gecheckt:
Delphi-Quellcode:
Es gibt auch eine "leere" _FMX_Fixes_Startup, welche auch einen Hinweis gibt:
const
TargetVersion = 33; // 10.3.1 Rio {$IF CompilerVersion < TargetVersion } {$MESSAGE WARN '"_FmxFixes_Startup" TargetVersion doesn''t match CompilerVersion' } {$ENDIF COMPILER}
Delphi-Quellcode:
{$MESSAGE WARN 'Soft4: "_FmxFixes_Startup" is not set"' }
Damit So kann ich die FMX_Fixes einfach umschalten, zusammen mit den Units, und die Versionen werden auch gecheckt. So wird es noch schwerer mal eine falsche Unit einzubinden, in der Versionshölle :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:07 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