Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Create zur Laufzeit - benötigte Units manuell einbinden-wie? (https://www.delphipraxis.net/99961-create-zur-laufzeit-benoetigte-units-manuell-einbinden-wie.html)

s-off 20. Sep 2007 07:25


Create zur Laufzeit - benötigte Units manuell einbinden-wie?
 
Hallo zusammen.

Ausgangssituation:
Wir haben in der Firma sämtliche genutzten Bibliotheken an einem zentralen Ort abgelegt und in die Suchpfade der entsprechenden Projekte eingetragen. In die IDE wurden keinerlei Packages integriert; sämtliche Komponenten werden zur Laufzeit erzeugt.

Es sind nun neue Komponenten hinzugekommen, welche ich in einem neuen Projekt nutzen möchte.
Jede Komponente benötigt mehrere Units.

Zu Hause, wo ich die Komponenten in die IDE integriert habe, würde ich mir die entsprechende Komponente auf die Form ziehen, das Projekt speichern, so dass die benötigten Units automatisch hinzugefügt werden, die visuelle Komponente wieder löschen und meinen Code zur Erzeugung zur Laufzeit schreiben.
Ohne installierte Packages ist das so natürlich nicht möglich.

Meine Frage:
Wie geht Ihr in solchen Fällen vor? Woher wisst Ihr, welche Units für eine Komponente eingebunden werden müssen?
Es kann doch nicht der richtige Weg sein, solange Units einzeln hinzuzufügen bis der Compiler nicht mehr meckert, oder?

SirThornberry 20. Sep 2007 07:38

Re: Create zur Laufzeit - benötigte Units manuell einbinden-
 
um eine Komponente zu instanzieren benötigt man nur eine unit. Durch ordentliche Benennung der Units weiß ich sofort in welcher Unit die Komponente ist. Heißt die Komponente Beispielsweise TIrgendwas befindet sich diese bei mir in der unit uIrgendwas.pas
Hat die Komponente irgendwelche Parameter mit Typen die unbekannt sind gehe ich genau so vor. Sind es Typen die nur mit dieser Klasse verwendet werden sind sie bereits durch einbinden der entsprechenden unit vorhanden. Sind es Klassen etc. wird wieder die entsprechende Unit eingebunden welche dem Namen des Types entspricht.

s-off 20. Sep 2007 07:56

Re: Create zur Laufzeit - benötigte Units manuell einbinden-
 
Vielleicht hätte ich dazu sagen sollen, dass es sich ausschliesslich um Drittkomponenten handelt, ich also keinen Einfluss auf die Struktur habe (wenn ich nicht nach jedem Update wieder alles zurechtfriemeln will).

Nehmen wir bspw. das TAdvStringGrid aus der Komponentensammlung von TMS.
Dieses benötigt drei Units, nämlich 'Grids', 'BaseGrid' und 'AdvGrid'. Woher weiss die IDE, dass sie genau diese drei Units einbinden muss, sobald ich das Grid auf meine Form gezogen und das Projekt gespeichert habe?

Die Unit 'AdvGrid' ist klar, da sich dort die Klasse befindet; aber was ist mit den anderen beiden Units?

Tormentor32 20. Sep 2007 07:58

Re: Create zur Laufzeit - benötigte Units manuell einbinden-
 
Gibts denn keine Dokumentation, wo drinsteht, welche Komponenten welche Unit benötigen? Ist immer noch besser als Auszuprobieren!

SirThornberry 20. Sep 2007 08:06

Re: Create zur Laufzeit - benötigte Units manuell einbinden-
 
für den schlimmsten fall könntest du dir ein include bauen wo einfach alle units eingebunden werden. Bei solchen Komponentensammlungen ist es oftmals so das sehr viel abhängigkeiten vorhanden sind und indirekt sowieso fast alles eingebunden wird.

s-off 20. Sep 2007 08:08

Re: Create zur Laufzeit - benötigte Units manuell einbinden-
 
Zitat:

Zitat von Tormentor32
Gibts denn keine Dokumentation, wo drinsteht, welche Komponenten welche Unit benötigen? Ist immer noch besser als Auszuprobieren!

Kann ich Dir in diesem speziellen Fall nicht sagen, ist aber auch unerheblich, da man nicht davon ausgehen kann, dass mit jeder Komponente(nsammlung) eine ausführliche Dokumentation mitgeliefert wird.

Gibt es denn keine generelle Lösung für diese Problemstellung?

Zitat:

Zitat von SirThornberry
für den schlimmsten fall könntest du dir ein include bauen wo einfach alle units eingebunden werden. Bei solchen Komponentensammlungen ist es oftmals so das sehr viel abhängigkeiten vorhanden sind und indirekt sowieso fast alles eingebunden wird.

Ja, das wäre auch mein Ansatz gewesen. Allerdings ist das gerade bei der Sammlung von TMS, welche doch etwas umfangreicher ist, nicht gerade sehr - hmm - performant ist der falsche Ausdruck, aber Ihr wisst sicherlich, was ich meine.

Naja, vielleicht gibt es ja noch ein paar innovative Ansätze - ansonsten wirds wohl beim Include bleiben.

SirThornberry 20. Sep 2007 08:11

Re: Create zur Laufzeit - benötigte Units manuell einbinden-
 
naja, refactoring könnte da helfen. Da kann man auch nach den units suchen lassen.

s-off 20. Sep 2007 08:14

Re: Create zur Laufzeit - benötigte Units manuell einbinden-
 
Zitat:

Zitat von SirThornberry
naja, refactoring könnte da helfen. Da kann man auch nach den units suchen lassen.

Da wird dann aber auch wieder nur die Unit gefunden, in welcher sich die klasse befindet, hier 'AdvGrid', aber nicht sämtliche Abhängigkeiten :cry:

SirThornberry 20. Sep 2007 08:20

Re: Create zur Laufzeit - benötigte Units manuell einbinden-
 
wofür müssen denn die anderen units überhaupt eingebunden werden wenn dinge daraus nicht benutzt werden? Sorry wegen der Frage aber ich hatte noch nie den Fall das ich mehrere Units einbinden musste ohne das etwas daraus in der aktuellen unit benötigt wird.

s-off 20. Sep 2007 08:32

Re: Create zur Laufzeit - benötigte Units manuell einbinden-
 
Frag mich nicht :gruebel:

Hmm, wenn ich ein AdvStringGrid zur Laufzeit erzeugen möchte, und nur die Unit eingebunden habe, in der sich die Klasse befindet, dann funktioniert das merkwürdigerweise.

Aber warum bindet denn die IDE noch zwei weitere Units ein :?: :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr.
Seite 1 von 2  1 2      

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