Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   {$INCLUDE irgendwas} --> Kann "irgendwas" nicht öffnen (https://www.delphipraxis.net/96985-%7B%24include-irgendwas%7D-kann-irgendwas-nicht-oeffnen.html)

MStoll 2. Aug 2007 16:38


{$INCLUDE irgendwas} --> Kann "irgendwas" nicht
 
Hallo.

Da ich in einem großen Projekt eine recht große Unit für mein Hauptformular hab, hab ich die Formular-Methoden der Unit auf verschiedene Dateien verteilt (27 Stück). Leider blockiert Delphi, sobald ich irgendwas an der Unit oder einer der Include-Dateien ändere, den Zugriff auf eine bestimmte dieser 27 Dateien. Immer mit der Meldung "Datei xxx kann nicht geöffnet werden. Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird". Das gleiche passiert auch, wenn ich die Datei vor dem Compilieren in Delphi öffnen will. Delphi blockiert sich damit quasi selbst.

Weiß jemand Rat, wie man das Problem beseitigen kann?

Gruß
Michael

shmia 2. Aug 2007 17:03

Re: {$INCLUDE irgendwas} --> Kann "irgendwas" n
 
Zitat:

Zitat von MStoll
Da ich in einem großen Projekt eine recht große Unit für mein Hauptformular hab, hab ich die Formular-Methoden der Unit auf verschiedene Dateien verteilt (27 Stück).

Da läuft aber einiges falsch bei dir.
Um ein grosses Projekt in kleinere wartbare Dateien zu zerlegen sollte man keine Include-Dateien verwenden, sondern neue Units erstellen.
Include-Dateien darf man eigentlich nur in folgenden Fällen verwenden:
1.) globale Defines, die in allen Units verfügbar sind
2.) grosse Datenmengen, die aus einer externen Quelle stammen
Beispiel: eine Eröffnungsbibliothek für Schach könnte man als Konstanten-Array in einem Includefile ablegen
3.) Programmcode der aus einem Code-Generator (z.B. UML -> Pascal) stammt, kann manchmal nur über Includefiles eingefügt werden

[edit]Nachtrag: Punkt 3.) hinzu[/edit]

RavenIV 3. Aug 2007 08:50

Re: {$INCLUDE irgendwas} --> Kann "irgendwas" n
 
Zitat:

Zitat von shmia
Include-Dateien darf man eigentlich nur in folgenden Fällen verwenden:
1.) globale Defines, die in allen Units verfügbar sind
2.) grosse Datenmengen, die aus einer externen Quelle stammen
Beispiel: eine Eröffnungsbibliothek für Schach könnte man als Konstanten-Array in einem Includefile ablegen

Kannst Du das mal den Entwicklern der IB-Objects mitteilen?
Es stinkt mir nämlich gewaltig, dass die ihre Klassendeklarationen in inc-files ablegen...

MStoll 4. Aug 2007 14:20

Re: {$INCLUDE irgendwas} --> Kann "irgendwas" n
 
Zitat:

Zitat von shmia
Da läuft aber einiges falsch bei dir.

Hallo.

DAS überlass mal bitte mir. Ich hab eine Unit mit EINER Klasse (Formular) mit vielen Methoden (Ereignisse, Buttons, Menüpunkte etc.). Das ergibt 1000e von Zeilen...
Ich wollte eigentlich ne Antwort auf meine Frage und keine Grundsatzdiskussion. Die IDE sieht die Möglichkeit mit Includes vor und das funktioniert konzeptionell auch.
Nur glaube ich nicht, dass der von mir geschilderte Fehler so beabsichtigt ist. Tritt schon seit Delphi 2005 so auf.

Also nochmal: Kennt jemand eine Lösung zu dem von mir geschilderten Problem?

Gruß
Michael

shmia 6. Aug 2007 12:34

Re: {$INCLUDE irgendwas} --> Kann "irgendwas" n
 
Zitat:

Zitat von MStoll
Zitat:

Zitat von shmia
Da läuft aber einiges falsch bei dir.

DAS überlass mal bitte mir. Ich hab eine Unit mit EINER Klasse (Formular) mit vielen Methoden (Ereignisse, Buttons, Menüpunkte etc.). Das ergibt 1000e von Zeilen...

Nun, von mir bekommt man nicht nur direkte Antworten auf Fragen, sondern auch Hinweise zu
"richtigem" und "falschem" Programmieren aus langjähriger Erfahrung.
Wenn du meinen Rat nicht annehmen möchtest, dann kann ich auch nichts machen; aber du kannst dich so nicht verbessern.
Schau dir mal die VCL an: hunderttausende Zeilen sind verteilt auf über 200 Units.
Jede Unit dient einem bestimmten Zweck. Units, die zu gross wurden, hat Borland geschickt aufgeteilt (z.B. StdCtrls, ExtCtrls, ComCtrls). Includefiles gibt es in der VCL nicht.

Wenn ein Formular aus allen Nähten platzt, muss man versuchen, Programmlogik (z.B. Stringfunktionen) in eigene Units auszulagern. Gleichartige Dinge, die sich mehrfach wiederholen, kann man in Frames packen. Wenn man z.B. mehr als 50 Buttons hat, muss man ersthaft das Bedienkonzept überdenken.
Man kann Buttons und Menues auch dynamisch zur Laufzeit anhand von ActionLists erstellen.

DelphiKlaus 6. Aug 2007 13:44

Re: {$INCLUDE irgendwas} --> Kann "irgendwas" n
 
Hallo,

ich vermute, dass Delphi Probleme hat, die in Includes ausgelagerten Methoden wiederzufinden. Schließlich werden zumindest alle aus Komponenten erzeugten Methoden auch von Delphi selbst in den Quelltext eingefügt. Ich benutze auch ab und zu Include-Dateien, da es wesentlich einfacher ist, kleine Programmteile in einem Include auszulagern als dafür eine Unit zu machen, und habe damit absolut keine Probleme. Ich lagere aber nur Routinen aus, die von dem jeweiligen Formular unabhängig sind

MfG

Klaus


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