Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Unit Namen mit Prefix (https://www.delphipraxis.net/210011-unit-namen-mit-prefix.html)

TM6 17. Feb 2022 07:33

Delphi-Version: 11 Alexandria

Unit Namen mit Prefix
 
Delphi verwendet Unit-Namen mit Prefixes: Vcl.*, System.*

Auf vcl.forms kann ich entweder über vcl.forms oder aber nur über forms zugreifen.

Kann man so etwas selber nutzen?
Falls ja, wo und wie kann man die eigenen Prefixes verwalten?

Edit:
Wie kann ich in dem Post die Delphi-Version ändern? Da steht 5, aber wir nutzen 10.4/11.0
Das geht per Edit wohl gar nicht, sondern nur, wenn man das Thema eröffnet?

TBx 17. Feb 2022 07:39

AW: Unit Namen mit Prefix
 
Zitat:

Zitat von TM6 (Beitrag 1502352)
Wie kann ich in dem Post die Delphi-Version ändern?

Editiere Deinen Beitrag und klicke auf den Button ERWEITERT.
Dann wird Dir die Möglichkeit zur Änderung angezeigt.

himitsu 17. Feb 2022 08:22

AW: Unit Namen mit Prefix
 
Projekt-Optionen > Erzeugen > Delphi-Compiler > Unit-Gültigkeitsbereichsnamen (Namespace)

Ist auch der Grund, warum beim Upgrade von Projektdateien auf eine neue Delphiversion, Dieses gern fehlt, weil Delphi vergißt das dort einzutragen.

freimatz 17. Feb 2022 12:31

AW: Unit Namen mit Prefix
 
Ja man kann es auch selber einsetzten. Wir machen das hundertfach. Spring4D hats auch.
Leider ist es nicht so schön umgesetzt wie die namespaces in C#. Es ist fast lediglich ein Punkt im Namen.

TM6 17. Feb 2022 14:35

AW: Unit Namen mit Prefix
 
Danke, das hat super funktioniert!

Außer dass sich beim ersten Compilieren Delphi verabschiedet hat.
War einfach kommentarlos weg - das hatte ich bislang noch nie mit Delphi erlebt.

TM6 17. Feb 2022 19:34

AW: Unit Namen mit Prefix
 
Das Ganze funktioniert leider doch nicht ganz so wie gedacht.

Ich kann ein Projekt erzeugen und ohne Probleme starten. Wenn ich aber nur compiliere (STRG+F9), dann gibt es einen fatalen Fehler.

Ich habe "abc" als Bereichsnamen eingegeben und in der dpr steht

Delphi-Quellcode:
uses
  TestUnit in '..\Tests\abc.testunit.pas',
...
In den units, die Delphi stören, steht nur

Delphi-Quellcode:
uses
  testunit;
Ich weiß, die Daten sind spärlich, aber wo könnte das Problem liegen?

himitsu 17. Feb 2022 20:59

AW: Unit Namen mit Prefix
 
Delphi-Quellcode:
TestUnit in '..\Tests\abc.testunit.pas',
hier mal besser nicht abkürzen.


Mit IN sagst du, wo es zu finden ist und wie es heißt.

Ohne IN wird gesucht und bei der Suche werden die Präfixe bachtet.

TM6 18. Feb 2022 08:28

AW: Unit Namen mit Prefix
 
Zitat:

Zitat von himitsu (Beitrag 1502418)
Delphi-Quellcode:
TestUnit in '..\Tests\abc.testunit.pas',
hier mal besser nicht abkürzen.

Was meinst Du damit?

Das?
Delphi-Quellcode:
abc.TestUnit in '..\Tests\abc.testunit.pas'
Aber da kann ich das Projekt nicht erzeugen, da die unit testunit (bzw. in dem unten aufgeführten code unit1) nicht gefunden wird.

Ziel war, dass ich projektabhängig eine unit1 mehrmals erstelle, also zum Beispiel
projekt1.unit1.pas
projekt2.unit1.pas
projekt3.unit1.pas

und auf diese dann nur unit1 zugreife.
Also nur
Delphi-Quellcode:
uses
unit1.pas,
anstatt massenhaft compiler-schalter zu verwenden.
Delphi-Quellcode:
uses
{$ifdef projekt1}
projekt1.unit1.pas,
{$endif}
{$ifdef projekt2}
projekt2.unit1.pas,
{$endif}
{$ifdef projekt3}
projekt3.unit1.pas,
{$endif}
Im ersten Fall könnte ich alle units so lassen, wie bisher. Für den zweiten Fall hätte ich einiges aufzuarbeiten.
Aktuell habe ich die unit1 noch nicht aufgesplittet. Das ist aber notwendigund ich dachte, dass es mit den Prefixen einfach ohne große Änderungen gehen würde.

TM6 18. Feb 2022 08:50

AW: Unit Namen mit Prefix
 
Ich habe das Ganze auch in Delphi 10.4 getestet. Dasselbe Verhalten.

Danach hatte ich ein neues Testprojekt erstellt und da läuft alles problemlos.
Und da ist es dann auch egal, was ich in die dpr schreibe

Delphi-Quellcode:
  Unit2 in 'projekt1.Unit2.pas';
und
Delphi-Quellcode:
  projekt1.Unit2 in 'projekt1.Unit2.pas';
funktioniert jeweils ohne Probleme.

Nur in dem eigentlichen Projekt, in dem ich diese Funktionalität nutzen möchte, gibt es das Problem :-(

Uwe Raabe 18. Feb 2022 08:52

AW: Unit Namen mit Prefix
 
Zitat:

Zitat von TM6 (Beitrag 1502434)
Danach hatte ich ein neues Testprojekt erstellt und da läuft alles problemlos.

Die Gültigkeitsbereichsnamen werden je nach Konfiguration und Plattform getrennt angegeben. Kann es sein, das da noch was nicht ganz korrekt ist?

TM6 18. Feb 2022 09:21

AW: Unit Namen mit Prefix
 
Ich hatte das in "Alle Konfigurationen - Alle Plattformen" eingetragen.

Und zumindest die eine Variante funktioniert ja beim Erzeugen - nur nicht beim Compilieren.

himitsu 18. Feb 2022 09:35

AW: Unit Namen mit Prefix
 
Bei geänderten DEFINEs, außerhalb der Quellcodes (Projektoptionen bzw. Compiler-Parameter), muß man schon immer komplett neu erzeugen,
da die verwendeten DEFINEs nicht in der DCU gespeichert und im nächsten Durschlauf geprüft werden.

Wird nur kompiliert, dann wird die Unit nicht neu erzeugt.



Wenn sich beim Kompilieren entscheiden soll, was genommen wird, dann kannst/darfst du den Pfad nicht angeben.

Ja, ist blöd, weil dann diese Unit nicht in der Projektverwaltung auftaucht, aber welche soll da denn angezeigt weerden, wenn noch nicht klar ist, welche es werden wird und sich das auch schnell mal ändern kann? (config umschalten)


Schön, dass im aktuellen Delphi die Projektverwaltung mit $IF/IFDEF nach 20 jahren halbwegs umgehen kann (die nun endlich nicht mehr einfach so löscht),
aber blöd, dass sie damit immnoch nicht wirklich umgehen kann (was die Anzeige und verwaltung betrifft).

Uwe Raabe 18. Feb 2022 09:52

AW: Unit Namen mit Prefix
 
Zitat:

Zitat von himitsu (Beitrag 1502443)
Wenn sich beim Kompilieren entscheiden soll, was genommen wird, dann kannst/darfst du den Pfad nicht angeben.

Ja, ist blöd, weil dann diese Unit nicht in der Projektverwaltung auftaucht, aber welche soll da denn angezeigt weerden, wenn noch nicht klar ist, welche es werden wird und sich das auch schnell mal ändern kann? (config umschalten)

Wenn ich das richtig verstanden habe, trifft das hier nicht zu.

Zitat:

Zitat von TM6 (Beitrag 1502431)
projektabhängig eine unit1 mehrmals erstelle

Das Projekt verwendet damit ja die ausgeschriebene Unit und kann die somit in das Projekt aufnehmen.

TM6 18. Feb 2022 12:19

AW: Unit Namen mit Prefix
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1502448)
Wenn ich das richtig verstanden habe, trifft das hier nicht zu.

Korrekt.

Zitat:

Zitat von Uwe Raabe (Beitrag 1502448)
Zitat:

Zitat von TM6 (Beitrag 1502431)
projektabhängig eine unit1 mehrmals erstelle

Das Projekt verwendet damit ja die ausgeschriebene Unit und kann die somit in das Projekt aufnehmen.

In meinem Fall ja eher könnte.


Noch einmal das Verhalten in Abhängigkeit, wie die unit in der dpr steht, zusammengefasst:
Delphi-Quellcode:
projekt1.unit1.pas in 'projekt1.unit1.pas'
- Projekt lässt sich nicht erzeugen
Delphi-Quellcode:
unit1.pas in 'projekt1.unit1.pas'
- Projekt lässt sich erzeugen, aber nicht compilieren

Das gilt nur für das eigentliche Projekt. In einem kleinen Testprojekt funktioniert es.

In der Zwischenzeit habe ich schon mehr Zeit in die Fehlersuche investiert als die Änderungen in den vielen units Zeit gekostet hätten.

Uwe Raabe 18. Feb 2022 12:23

AW: Unit Namen mit Prefix
 
Zitat:

Zitat von TM6 (Beitrag 1502465)
Das gilt nur für das eigentliche Projekt. In einem kleinen Testprojekt funktioniert es.

Dann bist du aber der einzige, der das lösen kann.

Zitat:

Zitat von TM6 (Beitrag 1502465)
In der Zwischenzeit habe ich schon mehr Zeit in die Fehlersuche investiert als die Änderungen in den vielen units Zeit gekostet hätten.

Das ist nicht selten der Fall. Das Problem liegt ja auch nicht daran, dass man es prinzipiell nicht lösen kann, sondern irgendwo in diesem speziellen Projekt.

himitsu 18. Feb 2022 12:35

AW: Unit Namen mit Prefix
 
Zitat:

Zitat von TM6 (Beitrag 1502465)
Delphi-Quellcode:
projekt1.unit1.pas in 'projekt1.unit1.pas'
- Projekt lässt sich nicht erzeugen
Delphi-Quellcode:
unit1.pas in 'projekt1.unit1.pas'
- Projekt lässt sich erzeugen, aber nicht compilieren

Hier passt doch garnicht zusammen?

Die Dateiendung wird nicht angegeben
Delphi-Quellcode:
projekt1.unit1 in 'projekt1.unit1.pas'


Und hier kann es Probleme geben
Delphi-Quellcode:
unit1 in 'projekt1.unit1.pas'

Wird z.B. mit "project2" gesucht/gefunden, dann würde projekt2.unit1 erwartet, aber drinnen stünde
Delphi-Quellcode:
unit projekt1.unit1;
, was der Compiler nicht mag, wenn Dateiname nicht zum Header passt.


Man könnte mal mit dem ProcessExplorer schauen was genau für Dateien gesucht/geladen werden.




Nja, vom Ordneraufbau würde ich mir wünschen, man könnte die UnitPrefixe auch als Postfix nutzen.

TM6 21. Feb 2022 07:44

AW: Unit Namen mit Prefix
 
Zitat:

Zitat von himitsu (Beitrag 1502471)
Zitat:

Zitat von TM6 (Beitrag 1502465)
Delphi-Quellcode:
projekt1.unit1.pas in 'projekt1.unit1.pas'
- Projekt lässt sich nicht erzeugen
Delphi-Quellcode:
unit1.pas in 'projekt1.unit1.pas'
- Projekt lässt sich erzeugen, aber nicht compilieren

Hier passt doch garnicht zusammen?

Die Dateiendung wird nicht angegeben.

Da hast Du Recht.
Das war Copy & Paste des Datei-Namens ins Forum ohne korrekt im Nachhinein zu editieren. Sorry.
Das hatte ich überlesen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:45 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