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 Button aus DLL in der Hauptanwendung (https://www.delphipraxis.net/133097-button-aus-dll-der-hauptanwendung.html)

napsterxx 25. Apr 2009 13:44


Button aus DLL in der Hauptanwendung
 
Moin,
Ich Code derzeit ein Programm welches Plugins unterstüzt. Nun wollte ich, das ein Plugin in die Statusbar ein neuen Eintrag hinzufügen kann.

Pseudocode:
Delphi-Quellcode:
      // Caption wird erfolgreich zurück gegeben
      ShowMessage(TButton(PluginManager.Plugin[I].StatusBarControl).Caption);

      // Testbutton erstellen
      btn := TButton.Create(self);
      btn.Caption := 'Test Button';

      // Dies Funktioniert, der Button wird in der Statusleiste angezeigt
      TJvStatusPanel(JvStatusBar1.Panels[0]).Control := btn;


      // Dies Funktioniert nicht, der Button wird in der Statusleiste nicht angezeigt
      TJvStatusPanel(JvStatusBar1.Panels[0]).Control := TButton(PluginManager.Plugin[I].StatusBarControl);

Warum funktioniert das nicht? Es ist mir unerklärlich.

Fehler:
Zitat:

---------------------------
Debugger Exception Notification
---------------------------
Project Main.exe raised exception class EConvertError with message 'Cannot assign a TFont to a TFont'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

mkinzler 25. Apr 2009 13:49

Re: Button aus DLL in der Hauptanwendung
 
Weil es sich um 2 verschiedene Instanzen der VCL handelt.

napsterxx 25. Apr 2009 14:08

Re: Button aus DLL in der Hauptanwendung
 
Lösungsidee? :duck:

mkinzler 25. Apr 2009 14:10

Re: Button aus DLL in der Hauptanwendung
 
Keine Objekte im Interface übergeben/ansprechen. in diesem Fall könntest du versuchen, die Eigenschaften des Fonts direkt zu setzen
Delphi-Quellcode:
.Font.Name := ...

napsterxx 25. Apr 2009 14:14

Re: Button aus DLL in der Hauptanwendung
 
Was soll ich dann übergeben anstatt einem Button? Das komische ist ja das Problem mit der Font von der ich eigentlich nichts will... :wall:

mkinzler 25. Apr 2009 14:15

Re: Button aus DLL in der Hauptanwendung
 
Wie gesagt nicht direkt darauf zugreifen. Biete in deinem Programm Funktionen an, mit welchen der PlugIn dann die Oberfläche manipulieren kann

Bernhard Geyer 25. Apr 2009 14:20

Re: Button aus DLL in der Hauptanwendung
 
Dein Problem: Du hast (wie mkinzler schon angemerkt hat) zwei unterschiedliche RTTI's. Sprich ein TButton der DLL != TButton der Exe da alle Klasseninformationen sowhl in der Exe als auch der DLL vorliegen. Jeder vergleich mit xyz is TButton oder xyz as TButton wir fehlschlagen wenn du eine Referenz aus der DLL in der Exe verwenden willst.

Du hast zwei Lösungsmöglichkeiten:

a, Kompiliere Exe und DLL mit gemeinsamen Laufzeitpackages. Jetzt mußt du nur noch diese BPL's (VCL.bpl, ...) immer mit dem Programm mitliefern

b, Bau dein Programm auf eine C-Kompatible Schnittstelle um.

napsterxx 25. Apr 2009 14:22

Re: Button aus DLL in der Hauptanwendung
 
Da kommt nur Variante A in Frage. Gibt es nun eine Möglichkeit mein ganzes System unkompliziert auf dieses Laufzeitpackages umzustellen?
Was muss alles in so ein Laufzeitpackages rein?

Bernhard Geyer 25. Apr 2009 14:28

Re: Button aus DLL in der Hauptanwendung
 
Zitat:

Zitat von napsterxx
Da kommt nur Variante A in Frage. Gibt es nun eine Möglichkeit mein ganzes System unkompliziert auf dieses Laufzeitpackages umzustellen?

Einfach in den Compilereinstellungen den Haken "Laufzeitpackages" verwenden aktivieren :-)

Zitat:

Zitat von napsterxx
Was muss alles in so ein Laufzeitpackages rein?

Alles was "lebende" Objekte sind die du zwischen Exe und DLL austauschen willst. Für die VCL hat das Codegear schon für dich gemacht. Für deine eigenen Objekte mußt du dir eine passende Packageverteilung überlegen. Ich tentiere hier eher dazu alles in ein eigene Package zu packen. Bedenke aber das du hier sehr stark auf Versionabhängigkeit angewiesen bist. Eine heute kompiliertes Plugin wird mit einer Exe vor zwei Monaten höchstwahrscheinlich nicht mehr zusammenspielen.

mkinzler 25. Apr 2009 14:28

Re: Button aus DLL in der Hauptanwendung
 
es gibt noch Variante 1b) Verwende sattt einer Dll eine Bpl.


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

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