Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Zusammen gehörende Gruppen von units (.pas-files) definieren? (https://www.delphipraxis.net/168297-zusammen-gehoerende-gruppen-von-units-pas-files-definieren.html)

ralfiii 14. Mai 2012 13:37

Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Hallo!

Wir haben hier ein grösseres Projekt (etliche Anwendungen) das aus einem Haufen Funktionsgruppen zusammengesetzt wird.
Eine Funktionsgruppe wäre z.B. der Zugriff auf Rohdaten, ein Satz von ca. 10 Klassen verteilt auf 15 Units.
Eine anderes Funktionsgruppe wären Analyseroutinen. Um die zu verwenden muss man einen Satz von 10 zusammengehörenden Units einbinden.

Wenn ich nun ein neues Projekt starte in dem ich den Rohdaten-zugriff brauche, dann muss ich mir relativ mühsam die 15 Units zusammensuchen und zum Projekt hinzufügen. (wär einfach wenn die alle in einem Folder liegen würden, tun sie aber nicht).
Ausserdem wir das Prokekt-File riesig.

Gibt's eine Möglichkeit, einen Satz von Units zu einer Einheit zu bündeln und dann einfach nur mir diesen Satz zum Projekt hinzuzufügen?

Idealerweise würde dann in der Projektdatei stehen:

Delphi-Quellcode:
program foo;

uses
  Forms,
  ufrmTest in 'ufrmTest.pas' {frmTest},
  SomeUnit in '..\SomeUnit.pas',
  DatenPackage,   // <- enthält 15 Units
  AnalysePackage; // enthält 10 Units
...
Danke!

DeddyH 14. Mai 2012 13:39

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Spontan fallen mir da gerade nur Include-Dateien ein.

Bernhard Geyer 14. Mai 2012 13:41

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Eigentlich muss man gar keine Units zur Projektdatei hinzufügen. Falls du irgendwelche globalen instanzen/initalisierungen durchführen muss so bietet sich hier der initialization-Abschnitt an.

ralfiii 14. Mai 2012 13:52

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Wenn wir alle Folder in den Suchpfad werfen würden, müssten wir das nicht tun.
Aber das wollen wir (aus verschiedenen Gründen) wenn möglich vermeiden.

...Korrektur: Doch, wir MÜSSEN die Unit-sets dem Projekt hinzufügen weil sich dabei mache Klassen in die Anwendung registrieren. Wenn man die Units nicht einbindet, dann fehlen einfach machen Funktionen in der Hauptanwendung.

@DeddyH: inc-files sind grausig, ausserdem verpfuscht einem Delphi das dpr ja jedesmal wenn man eine Unit dem Projekt hinzufügt/entfernt.

Zitat:

Zitat von Bernhard Geyer (Beitrag 1166453)
Eigentlich muss man gar keine Units zur Projektdatei hinzufügen. Falls du irgendwelche globalen instanzen/initalisierungen durchführen muss so bietet sich hier der initialization-Abschnitt an.


Bernhard Geyer 14. Mai 2012 14:04

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Zitat:

Zitat von ralfiii (Beitrag 1166457)
...Korrektur: Doch, wir MÜSSEN die Unit-sets dem Projekt hinzufügen weil sich dabei mache Klassen in die Anwendung registrieren. Wenn man die Units nicht einbindet, dann fehlen einfach machen Funktionen in der Hauptanwendung.

Dann füge diese ganzen Units in eine Helper-Unit auf die du dann in der DPR einträgst.

p80286 14. Mai 2012 14:09

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Wie sollte das denn konkret aussehen?

Ohne Einräge in der DPR geht doch garnichts?

Gruß
K-H

jaenicke 14. Mai 2012 14:11

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Leg dir doch Codetemplates an, mit denen du die Units inklusive deren Pfade in die .dpr einfügst. Das bringt Delphi nicht durcheinander, sofern du wirklich nur Units einbindest. Dann musst du nur jeweils das Template einfügen. (Strg + J oder Schlüsselwort + Tab)

ralfiii 14. Mai 2012 14:16

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Naja, deshalb frag ich ja ob's da was gibt.
Es gibt ja auch Projektgruppen und sonst noch jede Menge Funktionalität in der Delphi-IDE um Code zu gruppieren.
Im Prinzip kommt ein Include-File meinem Wunsch im Moment am nächsten, aber so richtig sauber ist das nicht. Ein Pfusch-Workaround.

@B.Geyer: ??? Delphi findet doch die Units nicht die nicht im Suchpfad sind, oder?

@jaenicke: Das mach ich im Moment so, aber da bleibt das Problem dass ich eine Funktionsgruppe nicht so leicht aus einem Projekt ausnehmen kann.
Von Übersichtlichkeit ganz zu schweigen.

Zitat:

Zitat von p80286 (Beitrag 1166462)
Wie sollte das denn konkret aussehen?

Ohne Einräge in der DPR geht doch garnichts?

Gruß
K-H


Bernhard Geyer 14. Mai 2012 14:58

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Zitat:

Zitat von ralfiii (Beitrag 1166464)
@B.Geyer: ??? Delphi findet doch die Units nicht die nicht im Suchpfad sind, oder?

Win in der DPR auch:

Delphi-Quellcode:
 SomeUnit in '..\SomeUnit.pas',

Zitat:

Zitat von p80286 (Beitrag 1166462)
Wie sollte das denn konkret aussehen?

Ohne Einräge in der DPR geht doch garnichts?

In der DPR dann diese "Sammel-Uses"-Unit aufnehmen. Ist übersichtlicher als die DPR zuzumüllen.

p80286 14. Mai 2012 15:06

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
und das ginge dann so: ?
dpr:
Delphi-Quellcode:
uses
 allemeineunits in '..\allemeineunits.pas';
pas:
Delphi-Quellcode:
Unit allemeiniunits;

uses
  F1 in '..\..\f1.pas',
  F2 in '..\f2.pas',
usw.

Gruß
K-H

jaenicke 14. Mai 2012 15:38

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Bei Delphi XE funktioniert das so nicht. Bei XE2 kann ich grad nicht schauen.

p80286 14. Mai 2012 15:52

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Zumindestens in D2006 geht das auch nicht so richtig:
Delphi-Quellcode:
unit xxxx;
interface
uses
   Windows,sysutils,
   all_const in 'c:\daten\delphi\units.src\all_const.pas';

[Pascal Fataler Fehler] toolbox_u.pas(5): F1026 Datei nicht gefunden: 'all_const.dcu'

himitsu 14. Mai 2012 16:05

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Man könnte diese Units auch in ein eigenes Package/Projekt auslagern.

Namenloser 14. Mai 2012 18:14

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Zitat:

Zitat von himitsu (Beitrag 1166484)
Man könnte diese Units auch in ein eigenes Package/Projekt auslagern.

War auch mein erster Gedanke, aber einbinden muss man sie dann immer noch einzeln...

himitsu 14. Mai 2012 19:51

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Wozu sollte man sie dann überhaupt noch alle in die anderen Projektdateien einbinden?

Man muß ja nur noch die entsprechenden Units (nicht immer alle) dort einbinden, wo sie benutzt werden
und das muß man sowieso machen.

ralfiii 16. Mai 2012 09:53

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Zitat:

Zitat von himitsu (Beitrag 1166539)
Wozu sollte man sie dann überhaupt noch alle in die anderen Projektdateien einbinden?
Man muß ja nur noch die entsprechenden Units (nicht immer alle) dort einbinden, wo sie benutzt werden
und das muß man sowieso machen.

Ich will ja nicht alle verwendeten Units einbinden - die ganzen Delphi-Standard-Units z.B. machen im Projekt ja echt keinen Sinn und Files die im Suchpfad sind kann man auch weglassen. Aber ich erklär's gern noch mal:

Wie eingangs erwähnt haben wir Funktionsblöcke die jeweils aus vielen zusammenhängenden Units bestehen.

Ich möchte nur in einer Anwendung die Funktion "GanzKomplizierteBerechung" aufrufen und füge die Unit "gkb.pas" zu uses-list.
Weil gkb.pas nicht in einem Standard-Suchpfad liegt muss ich sie zum Projekt hinzufügen. Und danach alle 50 Units die von "gkb.pas" verwendet werden, die auch nicht im Suchpfad sind. Ich muss mir also die Files endlos zusammensuchen. Das ist viel Arbeit und bläht das Projektfile ordentlich auf (sprich: macht es unübersichtlich).
Sollte ich die GanzKomplizierteBerechung plötzlich da doch nicht drin brauchen, wird's mir nicht ohne weiteres gelingen, die unnötigen Units wieder aus dem Projekt zu entfernen - was natürlich im allgemeinen keine Tragik ist (lediglich ein unnötig unübersichtliches .dpr und u.U. ein aufgeblasenes Exe). Trotzdem wär's fein da einen entsprechenden Mechanismus zu haben - den Delphi aber scheinbar nicht bietet.

Nur eine kleine Anmerkung zu "muss ich doch sowieso dort einbinden wo sie benutzt werden": Das stimmt so natürlich nicht. Eine Unit kann der Hauptanwendung auch Funktionalität beisteuern wenn sie nirgends explizit im uses steht. Ganz allein dadurch, dass sie dem Projekt hinzugefügt wird. Ein einfaches Beispiel hierfür sind z.B. die TPicture.RegisterFileFormat-aufrufe in den diversen PngImage.pas, SvgImage.pas etc. Wir verwenden auch so einen Mechanismus für ein Plugin-System. Und da ist's ganz fein wenn man zum debuggen mal ganz schnell alle klobigen Plugins aus dem Projekt werfen kann und nur die drinnen lässt, die zur Fehlersuche nötig sind. Oder einfach eine abgespeckte Version einer Applikation für einen speziellen Kunden erstellen.

Zu guter letzt: Sollt' es so ein System jemals geben wäre es natürlich wünschenswert, dass "duplicate file" Konflikte automatisch aufgelöst werden. Wenn Paket 1 die Units a,b,c,d enthält und Paket 2 die Units d,e,f,g dann sollte Delphi damit leben können wenn ich Paket 1 UND 2 einbinde, auch wenn Unit 2 doppelt genannt wird.

Die Funktion fehlt offensichtlich in Delphi. Vielleicht findet sie ja mal rein, schwierig wär's ja nicht und für sehr grosse Projekte allemal praktisch.

himitsu 16. Mai 2012 10:02

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Und wenn du dir einfach alle diese Units in ein DesignTimePackage legst und dieses im Delphi installierst, dann sollte es mit den Pfaden doch keine Probleme mehr geben,
denn dieses Package kennt die Pfade und die anderen Programme holen sich diese Units aus dem Package, oder seh ich das falsch. :gruebel:

PS: Wir haben hier eine Projektgruppe und früher waren viele Units nochmals in nahezu allen Projekten erwähnt, damit man sie leicht fand. (unter Delphi 7)
Das ergab gleich mal ein paar Probleme.
- manch eine Unit wurde doppelt gelinkt (in mehrere DLLs), da sie in einem abhänigen Package nicht gefunden wurden
- die Projektverwalrung war kaum benutzbar (in XE), da Units mehrfach enthalten waren (Suchfunktion funktionierte nicht richtig)
- und man wußte auch nicht, wo diese Units nun wirklich einkompiliert/gelinkt wurden.

blauweiss 16. Mai 2012 10:11

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Zitat:

Zitat von ralfiii (Beitrag 1166753)
Weil gkb.pas nicht in einem Standard-Suchpfad liegt muss ich sie zum Projekt hinzufügen. Und danach alle 50 Units die von "gkb.pas" verwendet werden, die auch nicht im Suchpfad sind. Ich muss mir also die Files endlos zusammensuchen. Das ist viel Arbeit und bläht das Projektfile ordentlich auf (sprich: macht es unübersichtlich).

Hallo ralfiii,

warum fügst Du nicht einfach den Pfad zur "gkb.pas" als library path hinzu ?

Gruss,
blauweiss

ralfiii 16. Mai 2012 10:39

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Zitat:

Zitat von blauweiss (Beitrag 1166758)
warum fügst Du nicht einfach den Pfad zur "gkb.pas" als library path hinzu ?

Einerseits handelt es sich nicht um nur einen Pfad sondern einen ganzen Haufen, andererseits gibt's verschiedene Versionen der Module wo's dann tatsächlich zu Namenskonflikten kommen würde.

Z.B. ConnMatlab, ConnOctave und ConnBeoLab enthalten alle die Unit "uHL7ConnectionBroker.pas" mit dem Objekt THL7ConnectionBroker.
Das ist kein Problem weil maximal EINES dieser Pakete eingebunden wird.

Die kann ich also schwer alle in einen Suchpfad legen.

Include-File wären vielleicht noch eine Lösung, aber so ganz rund läuft das z.B. auch nicht. Will ich z.b. mit CTRL+F12 schnell zu einer bestimmten Unit, dann werden die Units im Include-File nicht aufgelistet. Oder ein Grep-search über "all files in project" durchsucht die Files im include-File auch nicht.

Am rundesten laufen noch {$REGION 'xyz'}-Blöcke im dpr-file, nur muss man das dpr-file halt immer manuell in Ordnung bringen sobald was am Projekt geändert (z.B. eine Unit hinzugefügt oder entfernt) wird - dann sind die Regions nämlich plötzlich weg.

ralfiii 16. Mai 2012 10:40

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Aber danke für eure Anregungen!
Die Idee mit den Regions ist halbwegs praktikabel und die wär mir ohne euch nicht so schnell gekommen.
Und vielleicht überrascht mich Emba ja irgendwann mit diesem Feature ;)

TiGü 16. Mai 2012 16:23

AW: Zusammen gehörende Gruppen von units (.pas-files) definieren?
 
Warum noch mal erstellst du dir kein Projekt-Template, wo alle wichtigen Pfade schon eingebunden sind?

http://docwiki.embarcadero.com/RADSt...eken_erstellen

Bei jeden neu angelegten Projekt dieser Art sind alle Pfade zu euren Framework mit drin.


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