![]() |
Gemeinsame Uses Klausel in allen Units
Hallo!
Ich versuche gerade bei meinem Projekt jede Komponente in eine eigene Unit zu machen. Da viele Forms dann später auf die einzelnen Komponenten zugreifen wird das später dann immer ne ziemliche Arbeit jede neue Komponente in jede Unit hinzuzufügen (weil die passende Unit wieder rauszusuchen wenn man gerade am Programmieren ist und die an die richtige (übersichtliche) Stelle bei Uses einzusetzen stört). Gibt es also eine Möglichkeit, wie z.B. bei PHP (war das Include?) einfach an diese Stelle der Unit eine andere Datei hineinzuladen, wo z.B. alle Uses drinstehen? Was passiert wenn dann dort eine Datei auf sich selbst verweist, wenn ihr eigener Unitname in ihrem Header steht. Gibt's da ne ordentliche Methode? |
Re: Gemeinsame Uses Klausel in allen Units
Auzch Delphi kennt include
Delphi-Quellcode:
{$I <Dateiname> }
|
Re: Gemeinsame Uses Klausel in allen Units
Danke! Werd ich gleich mal ausprobieren.
|
Re: Gemeinsame Uses Klausel in allen Units
Zitat:
Ist das ein Ersatz für die "normale" Uses? Was hat das für Vorteile gegenüber einer Uses? Gibt es vllt irgendwo ein Tutorial dazu wo das erklärt ist? In der OH find ich leider nicht viel dazu. |
Re: Gemeinsame Uses Klausel in allen Units
Hi!
Dieses Include bindet einfach an der Stelle, an der es steht, das ein, was in "Dateiname" steht. Es ist also kein direkter Ersatz für die Uses, aber z.B. kann in dieser Datei dann die komplette Uses-Klausel drinstehen! Ciao Frederic |
Re: Gemeinsame Uses Klausel in allen Units
wird das zur Laufzeit eingebunden oder vom Compiler?
|
Re: Gemeinsame Uses Klausel in allen Units
Hi!
Das erledigt der Compiler! Ciao Frederic |
Re: Gemeinsame Uses Klausel in allen Units
Zitat:
Zitat:
Zitat:
|
Re: Gemeinsame Uses Klausel in allen Units
Wenn in dieser datei jetzt sowas wie
Delphi-Quellcode:
steht, kann ich dann diese Prozedur im Programm aufrufen?
procedure Test;
begin ShowMessage('Hello World'); end; |
Re: Gemeinsame Uses Klausel in allen Units
So als wenn du sie direkt in die Unit geschrieben hättest.
|
Re: Gemeinsame Uses Klausel in allen Units
Hi!
Ja, wenn das Include dann über der Stelle des Aufrufs steht und dazu an einer Stelle, wo auch dein Code-Ausschnitt stehen könnte, dann klappt das! Ciao, Frederic |
Re: Gemeinsame Uses Klausel in allen Units
könnte man das so umbiegen das man die Datei erst zur Laufzeit angibt und der Code dann ausgeführt wird?
|
Re: Gemeinsame Uses Klausel in allen Units
Nein, weil der Compiler ja den Inhalt der includierten Datei vor dem Compilieren an die Position einfügt.
|
Re: Gemeinsame Uses Klausel in allen Units
Habs grad in der Hilfe gefunden:
Zitat:
|
Re: Gemeinsame Uses Klausel in allen Units
Hi!
Das geht, wie der Name sagt, mit diesen Compiler-Switches nicht! Um zur Laufzeit noch Code einzubinden gibt es andere Mittel und Wege (die man auch im Forum finden kann). Sollten da noch Fragen sein, aber am besten einen neuen Beitrag anfangen, da das hier ja schon nichts mehr mit dem Ausgangsthema zu tun hat ;) Ciao, Frederic |
DP-Maintenance
Dieses Thema wurde von "sakura" von "Die Delphi-IDE" nach "Sonstige Fragen zu Delphi" verschoben.
|
Re: Gemeinsame Uses Klausel in allen Units
Zitat:
Die einzige n 2 Stellen in denen includes sinn machen sind Stellen, die ein Defizit im Compiler selbst auszugleichen versuchen:
Ich simuliere in native Delphi namespaces indem ich in einer Unit Aliases auf die Typen in den anderen Units aufliste. Auf die Art hat man seine Typen immer noch schön in einzelnen Units, aber braucht nur einen "Namespace" einzubinden um alle Typen benutzen zu können. Bleistift (habe die Leerzeilen entfernt ;-) ):
Delphi-Quellcode:
unit uClass1;
interface type Class1 = class end;
Delphi-Quellcode:
unit uClass2;
interface type Class2 = class end;
Delphi-Quellcode:
unit MyClasses;
interface uses uClass1, uClass2; type Class1 = uClass1.Class1; Class2 = uClass2.Class2;
Delphi-Quellcode:
unit Babla;
interface uses MyClasses; type Class3 = class(Class2) end; |
Re: Gemeinsame Uses Klausel in allen Units
Zitat:
bei der ganzen Diskussion weise ich dennoch darauf hin, dass es keinen Sinn macht, jede Komponente in eine eigene Unit zu verfrachten. Man kann sich die Delphi VCL schon als Vorlage benutzen. So sollte man seine Komponenten in logischen Einheiten zusammenfassen. Ich benutze z.B. die Namenskonventionen von Delphi und setzt nur 2 Buchstaben davor. So habe ich alle Controls in rwControls.pas, alles für die Datenbank in rwDB.pas und allgemeine Routinen in rwSysUtils, Formularklassen und Routinen in rwForms etc. Somit wird der Uses - Abschnitt wieder überschaubar und du vermeidest, dass deine Komponentenunits sich irgendwann unüberschaubar gegenseitig referenzieren. Cu, Frank |
Re: Gemeinsame Uses Klausel in allen Units
Zitat:
Diese übermüllten Units mit mehr als 10 oder gar 20 ( :shock: ) Typen finde absolut ekelerregend. Sie sind immer größer als ein Monitor, das heißt man muss immer scrollen um einen Typen in seiner Gänze sehen zu können. Wie zum Geier soll eine überschaubare uses-Clause unleserlichen Code rechtfertigen können? Vor allem wenn man (zumindest in native Delphi) das ganze mit enem ganz einfachen Trick umgehen kann? :gruebel: |
Re: Gemeinsame Uses Klausel in allen Units
Zitat:
Und - sorry - es ist sicher Geschmacksfrage. Aber ich möchte z.B. nicht zwischen hunderten von Units in der IDE navigieren, weil ich gerade mal ein Refactoring meiner Komponenten durchführe. Und dein Trick ist für mich ein nicht notwendiger Mehraufwand. Cu, Frank |
Re: Gemeinsame Uses Klausel in allen Units
Nochmal zum Thema speziell mit dem Uses: Nachdem ich alle (Delphi!) Units mit der Include-Datei hinzufüge (System, Graphics, Forms etc) habe ich das Problem, dass der Compiler/Debugger wohl automatisch manche benötigten Units nochmal extra als "Interne" Uses hinzufügt (als nach Implementation)
Code:
Kann man das irgendwie deaktivieren, weil so bekomme ich bei jedem 3ten Compilieren die Fehlermeldung "Bezeichner redefiniert: xxxx"?
implementation
uses Graphics; |
Re: Gemeinsame Uses Klausel in allen Units
Das Problem scheint mit der Codevervollständigung zu tun zu haben. Sobald ich z.B. ExtractFileName Autovervollständigen lasse steht implementation uses SysUtils; da...
|
Re: Gemeinsame Uses Klausel in allen Units
Weil includes hierfür Unsinn sind? Mach's so wie es vorgeschlagen haben und du bleibst bei StiNo Delphi Compilierung.
|
Re: Gemeinsame Uses Klausel in allen Units
Wenn ich das richtig verstehte müsste ich dann aber quasi wirklich jede einzelne Klasse aus jeder Unit ableiten bzw. neu deklarieren/definieren (?). Ich will ja wirklich nur die Standardunits von Delphi in all meinen Units einbinden.
|
Re: Gemeinsame Uses Klausel in allen Units
Zitat:
Sie sagen dem Compiler wo er den wirklichen Typen findet. |
Re: Gemeinsame Uses Klausel in allen Units
Das meine ich ja. Ich muss also für _jeden_ Typ (entsprechend in jeder Unit) einen Alias erstellen? (Zur Erinnerung: Es geht hier um Systems, Graphics, Windows, Forms, Controls, ...)
|
Re: Gemeinsame Uses Klausel in allen Units
Zitat:
Ganz am Anfang schriebst du dass *du* ganz gerne *deine* Typen auf jeweils eine Unit packst und dass dir das die uses Clause zu friemelig macht. |
Re: Gemeinsame Uses Klausel in allen Units
Sorry ;)
Gut, ich denke mit den eigenen Komponenten kann ich eh abhaken. Aber gibts ne einfache Möglichkeit alle Delphiunits (bzw. die, die ich brauche) in all meinen Units einfach zu laden (ich weiss, ich vergess wieder eine die man doch dann mal wieder häufiger braucht (z.B. ShellApi), wie will ich nicht wieder nachher in X-Units per Hand eintragen, wenn ich da ShellExecute aufrufen will. Tips dafür? Soweit auf jedenfall schonmal Danke an alle die sich hier bisher geäußert haben :D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:21 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