AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE DPR-Uses: Methode zum Include von zusätzlichen Files

DPR-Uses: Methode zum Include von zusätzlichen Files

Ein Thema von Rollo62 · begonnen am 26. Apr 2019 · letzter Beitrag vom 26. Apr 2019
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
3.896 Beiträge
 
Delphi 12 Athens
 
#1

DPR-Uses: Methode zum Include von zusätzlichen Files

  Alt 26. Apr 2019, 11:03
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:
  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',
Die "gefixten" Units liegen dann natürlich auch dabei.
In der DPR Datei kann ich diese Liste einfach zu den normalen Uses Definitionen includieren:

Delphi-Quellcode:
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};
Das funktioniert soweit super, und ist IMHO recht simpel.
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:
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};
Da ich nur mit einer MainForm und einer Handvoll DatenModulen arbeite, und normalerweise weitere Units per Runtime hinzufüge, ist das erträglich.

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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.990 Beiträge
 
Delphi 12 Athens
 
#2

AW: DPR-Uses: Methode zum Include von zusätzlichen Files

  Alt 26. Apr 2019, 11:39
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.896 Beiträge
 
Delphi 12 Athens
 
#3

AW: DPR-Uses: Methode zum Include von zusätzlichen Files

  Alt 26. Apr 2019, 11:48
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
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: DPR-Uses: Methode zum Include von zusätzlichen Files

  Alt 26. Apr 2019, 11:54
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
  1. Ins Projekt explizit aufgenommene Dateien
  2. Projekt-Suchpfad
  3. Globaler Bibliothekspfad (DCUs)

Vielleicht hättest du das Projekt einfach vorher "bereinigen" müssen?
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.896 Beiträge
 
Delphi 12 Athens
 
#5

AW: DPR-Uses: Methode zum Include von zusätzlichen Files

  Alt 26. Apr 2019, 12:12
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
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:
unit _FmxFixes_Startup;

interface

implementation

uses
    iOSapi.CoreLocation
  , System.iOS.Sensors
  , FMX.Media.Android
  ;
  
end.
das dann geladen in den Uses der DPR:
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};
  • Bei Änderung der Forms bleiben die Uses korrekt erhalten, so wie es sein soll.
  • Und es gibt auch eine Fehlermeldung wenn der Search-Pfad fehlt oder falsch ist

So war es gedacht, dankesehr für die Mithilfe an Alle.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.896 Beiträge
 
Delphi 12 Athens
 
#6

AW: DPR-Uses: Methode zum Include von zusätzlichen Files

  Alt 26. Apr 2019, 12:42
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:
const
    TargetVersion = 33; // 10.3.1 Rio

{$IF  CompilerVersion < TargetVersion }
{$MESSAGE WARN '"_FmxFixes_Startup" TargetVersion doesn''t match CompilerVersion' }
{$ENDIF COMPILER}
Es gibt auch eine "leere" _FMX_Fixes_Startup, welche auch einen Hinweis gibt:
{$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
  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 15:57 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