Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Wie kann ich Komponenten während der Laufzeit einbinden? (https://www.delphipraxis.net/143129-wie-kann-ich-komponenten-waehrend-der-laufzeit-einbinden.html)

Aurus 10. Nov 2009 11:00


Wie kann ich Komponenten während der Laufzeit einbinden?
 
Hallo

Wie kann ich einem Programm was ich in Delphi geschrieben haben, während der Laufzeit, Visuelle-Komponenten hinzufügen, die es beim erstellen dieses Delphi-Programms noch gar nicht gab?

Ich hoffe ich werde richtig verstanden da ich es nicht viel besser formulieren kann.

Ein Beispiel:

Ich schreibe in Delphi ein ganz ganz einfaches 2D CAD. Die Visuellen Komonenten (z.B. Schraube, Bolzen usw) werden nach und nach durch externe Dateien hinzugefügt. Ich müsste also irgendwie die neu erstelle Komponte in eine DLL binden, die dann mein Programm laden und so verwenden kann?


Wie würdet ihr so was machen ohne dass ich das Programm neu kompilieren muss?


Auf eine Antwort würde ich mich freuen

Gruss

Aurus

himitsu 10. Nov 2009 11:08

Re: Wie kann ich Komponenten während der Laufzeit einbinden?
 
Hier im Forum suchenKomponente dynamisch erzeugen

Einfach genau so, wie du es auch mit jedem anderem Objekt auch machst.

Delphi-Quellcode:
E := TEdit.Create(Self); // self = deine Form
E.Parent := Self;        // oder ein Panel ... halt das, worauf das Edit letztendlich drauf ist
...

Aurus 10. Nov 2009 11:14

Re: Wie kann ich Komponenten während der Laufzeit einbinden?
 
Ich glaube du hast mich falsch verstanden.

Dynamisch Komponenten erzeugen kann ich schon.

Zu deinem Beispiel:

Nur mal so angenommen dass TEDit in deinen Programm noch gar nicht gibt. Also kein Teil von Delphi wäre.

Nun würde ich diese Komponente in Delphi erzeugen


Wie könnte in nun diese Komponente in mein Programm einbinden und dann dynamisch erzeugen ohne dass das Programm neu compiliert werden muss?

Gruss

Aurus

himitsu 10. Nov 2009 11:19

Re: Wie kann ich Komponenten während der Laufzeit einbinden?
 
Diese Komponenten mußt du aber schon in deinem Programm drinnen haben,
oder eine Komponente, welche aus externen Daten ein "Bild" zusammenbaut.

Dann ließt du deine Datei ein, parst sozusagen diese Datei und erstellst dann die entpsrechende Komponente.
Also da steht z.B. in der Datei, daß jetzt eine Schraube erstellt werden soll
und dein Programm erstellt dann die vorhandene Komponente TSchraube
oder TCADObjekt und sagt diesem Objekt noch, wie es diese Schraube darzustellen hat.

mkinzler 10. Nov 2009 11:21

Re: Wie kann ich Komponenten während der Laufzeit einbinden?
 
Du müsstest Bpls verwenden, dann kannst du die Bpl welche die Komponente enthält dynamisch zur Laufzeit dazuladen

Balu der Bär 10. Nov 2009 11:21

Re: Wie kann ich Komponenten während der Laufzeit einbinden?
 
Schreib dir einfach eine Funktion die gewisse Objekte dynamisch zur Laufzeit erstellt. Wo ist das Problem?

Aurus 10. Nov 2009 11:30

Re: Wie kann ich Komponenten während der Laufzeit einbinden?
 
Aha ich glaube ich habe verstanden.

Meine neuen Komponenten werden abgeleitet von den schon vorhanden Komponeten in meinen Programm?

Ich muss nun meine neue Komponente während der Laufzeit anhand der vorhanden Komponenten zusammenbauen, dann während dynamisch erzeugen.


Wie diese zusammengebaut wird steht in einer Datei auf die ich zugreifen kann.



Wird für mich nicht ganz einfach umsetzen sein. Werde es aber versuchen und vermutlich auch schaffen.

himitsu 10. Nov 2009 11:36

Re: Wie kann ich Komponenten während der Laufzeit einbinden?
 
Nur als Info:

Die VCL macht es übrigens ähnlich.
- sie ließt beim Laden einer Form die zugehörige Resource aus
- darin steht dann der Klassenname und die Werte einiger Properties
- nun sucht sie in einer Liste der vorhandenen Komponenten nach der gewünschten Komponente
- erstellt diese und weißt den Properties die Werte zu

Aurus 10. Nov 2009 11:39

Re: Wie kann ich Komponenten während der Laufzeit einbinden?
 
Ja jetzt ist es einleuchtend für mich was du sagst.

Dürfte vermutlich für mich viel Tipparbeit verursachen wenn ich noch die gewünschten Properties und Events erzeugen muss.

Gibt es da vielleicht einen guten Trick wie man dies "möglichst" einfach (sofern möglich) umsetzen kann.

himitsu 10. Nov 2009 11:55

Re: Wie kann ich Komponenten während der Laufzeit einbinden?
 
Du könntest, wie schon gesagt, via BPLs neue Komponenten einbinden

oder über DLLs mittels Interfaces.
Im Programm eine "Haupt"-Komponente, welche sich dann über ein Interface die nötigen Daten aus der DLL holt.
(Objekte lassen sich ja nicht (einfach) von einer DLL in das Programm einbinden)


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