Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Plugin für eigenes Programm schreiben (https://www.delphipraxis.net/20839-plugin-fuer-eigenes-programm-schreiben.html)

Luckie 24. Apr 2004 01:46


Plugin für eigenes Programm schreiben
 
Ich wollte mich mal etwas mit Plugins beschäftigen. Und da dachte ich mir, dass ich ein einfaches plugin-fähiges Programm schreibe. Ich habe hier im Forum schon mal gesucht, aber nur Threads gefunden, die sich damit beschäftigen Plugins für andere Programme zuschreiben.

Erstmal geht es mir nur um allgemeine Dinge, also Schnittstellendefinition in der Anwendung und und dem Plugin. Wie man dann die Funktionen aus dem Plugin aufruft etc.

Edit: Habe gerade das Tutorial von sakura entdeckt. :?

Edit2: Habe es auf meine Art und Weise hinbekommen. Wer mein Ergebnis sehen will, kann es hier in Form einer Demo-Anwendung runterladen: Plugin-Demo [564 KB]. Lob und Kritik ist erwünscht. Dass die Schnittstelle zu dem Plugin nicht sehr "umnfangreich" ist, ist mir bewußt, mir ging es erstmal auch nur darum ein Plugin zu laden, Menüeinträge zu erstellen und den Code des Plugins auszuführen.

mirage228 24. Apr 2004 08:15

Re: Plugin für eigenes Programm schreiben
 
Zitat:

Zitat von Luckie
Edit2: Habe es auf meine Art und Weise hinbekommen. Wer mein Ergebnis sehen will, kann es hier in Form einer Demo-Anwendung runterladen: Plugin-Demo [564 KB]. Lob und Kritik ist erwünscht. Dass die Schnittstelle zu dem Plugin nicht sehr "umnfangreich" ist, ist mir bewußt, mir ging es erstmal auch nur darum ein Plugin zu laden, Menüeinträge zu erstellen und den Code des Plugins auszuführen.

Hi,

die Demo Anwendung funktioniert tadellos. Aber wenn du dann eine richtige Anwendung schreibst, würde ich das Plugin unbedingt auf gewisse Informationen des Programms zugreifen lasse. (Bei einem Text-Editor beispielsweise auf den aktuellen Text im Editor etc.).
Zudem könntest du das Thema Plugins auch gleich zum Anlass nehmen dich mit Interfaces zu beschäftigen ;)

mfG
mirage228

Luckie 24. Apr 2004 09:11

Re: Plugin für eigenes Programm schreiben
 
Zitat:

Zitat von mirage228
die Demo Anwendung funktioniert tadellos.

Danke. Hast du was anderes erwartet? :roll: :mrgreen:

Zitat:

Aber wenn du dann eine richtige Anwendung schreibst, würde ich das Plugin unbedingt auf gewisse Informationen des Programms zugreifen lasse.
Nun ja, Irgendwie logisch. Aber ich habe ja nichts zum draufzugreifen.

Zitat:

Zudem könntest du das Thema Plugins auch gleich zum Anlass nehmen dich mit Interfaces zu beschäftigen ;)
Gemach, gemach, Herr Studienleiter. :evil:

MrKnogge 24. Apr 2004 10:40

Re: Plugin für eigenes Programm schreiben
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von mirage228
die Demo Anwendung funktioniert tadellos.

Danke. Hast du was anderes erwartet? :roll: :mrgreen:

Keiner hat was anderes erwartet :-D


Zitat:

Zitat von Luckie
Zitat:

Zitat von mirage228
Aber wenn du dann eine richtige Anwendung schreibst, würde ich das Plugin unbedingt auf gewisse Informationen des Programms zugreifen lasse.

Nun ja, Irgendwie logisch. Aber ich habe ja nichts zum draufzugreifen.

Dann erweiter dein Demo-Programm :wink:

tableD 24. Apr 2004 10:53

Re: Plugin für eigenes Programm schreiben
 
Mal eine Frage zu einem ganz anderen Plugin Konzept:

Kann man eine Verbindung zwischen einem Plugin & einer Anwendung herstellen
und diese dann als ständige Kommunikationsverbindung aufrechterhalten, so
das Befehle zwischen dem Plugin & der Anwendung ausgetauscht werden & diese
sich gegenseitig beeinflussen, quasi Arbeitet das Plugin im Hintergrund
immer weiter (bis es beendet wird o. seine Aufgabe erfüllt hat)
und der Benutzer kann trotzdem weiter arbeiten.

MrKnogge 24. Apr 2004 11:01

Re: Plugin für eigenes Programm schreiben
 
dann müsstest du mit Threads arbeiten.

Luckie 24. Apr 2004 11:44

Re: Plugin für eigenes Programm schreiben
 
Zitat:

Zitat von tableD
Mal eine Frage zu einem ganz anderen Plugin Konzept:

Könntest du bitte deine Frage in einem neuen Thread stellen, das passt, glaube ich, nicht so richtig hier rein.

torud 24. Mär 2005 19:21

Re: Plugin für eigenes Programm schreiben
 
Hallo!

Ich wollte mich genau in diesem Augenblick auch mit dem Thema beschäftigen und mir dazu die Demo mal saugen. Leider ist der Link tot!

Habe auch mal auf der Home von Luckie geschnüffelt, konnte es aber leider nicht finden.

Wer kann den korrekten Link nochmal posten???

Luckie 24. Mär 2005 19:29

Re: Plugin für eigenes Programm schreiben
 
Zitat:

Zitat von torud
Hallo!
Habe auch mal auf der Home von Luckie geschnüffelt, konnte es aber leider nicht finden.

Da ist es doch: http://developer.luckie-online.de/Delphi/Sonstiges/

torud 25. Mär 2005 05:14

Re: Plugin für eigenes Programm schreiben
 
Hallo!

Vielen Dank! Hätte ich genauer hingesehen, hätte ich es auch finden können, zumal ich in diesem Ordner war.

Ok, also cich habe mir Dein kleines Projekt mak abgesehen und natürlich auch gleich für meine Zwecke benutzt. Nun versuche ich aber, und ich denke, dass ist eine der Aufgaben eines Plugins, mit meinen anderen Formularen zur kommunizieren. Folgende Probleme habe ich dabei:

1. Da der Treiber und das Projekt einen Ordner tiefer ist, kann ich nicht einfach in der Uses-Klauses den oder die FormNamen angeben, die mit eingebunden/verlinkt werden sollen. Ich habe es dann über die ProjektOptionen gemacht und dort gesagt, dass als Suchpfad der höhere Ordner benutzt werden soll. Seitdem erhalte ich auch Zugriff und Syntaxvorschläge für die Forms.

Aber wenn ich nun ein DBGrid auf das Plugin-Form lege und dann per Button sage:

Delphi-Quellcode:
    ShowMessage(dm.ADOTable1.TableName);
    //oder das hier
    DBGrid.DataSource:=dm.Datasource1;
erhalte ich immer wieder eine Fehlermeldung. Warum kann ich vom Plugin nicht auf die anderen sachen zugreifen? Wenn ich diesen Code vom Hauptformular aus aufrufe, gehts doch auch..

orabimus 26. Mär 2005 01:00

Re: Plugin für eigenes Programm schreiben
 
Hi Luckie,

wenn ich dein Demo richtig verstehe:

Das Hauptprogramm sucht die passenden DLL(s) und erzeugt dafür Menuitems im Hauptprogramm?

Beim Anklicken eines dieser neuen Menuitems im Hauptprogramm passiert dann was?

Das Plugin schickt einen "statischen" Befehl an das Hauptprogramm zurück und das Hauptprogramm tut dann das, was es sowieso schon ohne Plugin kann?

Entweder habe ich dein Demo überhaupt nicht kapiert oder es hat mit Plugins (noch recht) wenig zu tun ;-)

Plugins bringen m.M.n. nur was, wenn sie mit dem Hauptprogramm auch Daten - die irgendwie gegenseitig übergeben werden können - austauschen können.

Zur Plugin-Programmierung bring Google leider so gut wie nix Brauchbares, daher trotzdem vielen Dank für deinen Ansatz!!!

Erhol dich gut in Irland!

lg

Luckie 26. Mär 2005 01:42

Re: Plugin für eigenes Programm schreiben
 
Wo kann denn das Programm was, was es schon ohne PlugIn könnte? Wenn du mal genauer hingekuckt hättest, dann würdest du sehen, dass die Dialoge, die erscheinen, wenn man auf die Menüeinträge klickt, aus den PlugIn DLL kommen.

orabimus 27. Mär 2005 04:34

Re: Plugin für eigenes Programm schreiben
 
Mir sehr peinlich aber leider wahr:

Mein Delphi hat mir die "FormUnit.pas" aus dem Plugin-Ordner auch im Hauptprogramm "PluginDemo.dpr" deiner Demo angezeigt :oops:

Nehme daher Alles zurück und behaupte vorsichtshalber das Gegenteil :mrgreen:

Bis auf:

Zur Plugin-Programmierung bring Google leider so gut wie nix Brauchbares, daher trotzdem vielen Dank für deinen Ansatz!!!

Erhol dich gut in Irland!

lg

Edit: Und öftermal nach Mitternacht habe ich vielleicht manchmal "Konzentrationsschwächen" :wall:

Luckie 27. Mär 2005 15:09

Re: Plugin für eigenes Programm schreiben
 
Das ganze ist ja nicht mehr ale Proof of Concept. Da die Hostanwendung ja selber nichts kann, war es eben auch schwer bis unmöglich dass die PlugIns was sinnvolles machen. Würde ich eine Plaugin fähige Anwendung entwerfen müssen, dann würde ich eine DLL schreiben, die alles nötige exportiert. Und wenn dann jemand kommt und sagt, "mein Plugin bräcuhte noch das und as aus deiner Anwendung" (Hanle auf Edits oder Menüs oder irgendwelche Pfade, dann kann man die DLL einfach ergänzen.

torud 1. Apr 2005 13:58

Re: Plugin für eigenes Programm schreiben
 
Kann mir denn eigentlich jemand sagen, wie ich nun eigentlich vom Hauptformular auf ein Plugin zugreifen kann, von dem ich gar nicht weiss, was es kann, oder wie ich dem Plugin Daten senden kann?

MathiasSimmack 1. Apr 2005 14:04

Re: Plugin für eigenes Programm schreiben
 
Wenn du nicht weißt, was es kann, dann ist es kein Plugin für deine Anwendung, denn du gibst vor, wie sich ein Plugin zu verhalten hat. Was es intern macht, spielt keine Rolle, solange es sich bspw. mit einer bestimmten Funktion beim Hauptprogramm anmeldet, und solange der Aufruf der Plugin-Funktion durch einen bestimmten Befehl festgelegt ist. Nach dem Muster funktionieren IMHO alle Plugins.

Igotcha 1. Apr 2005 14:07

Re: Plugin für eigenes Programm schreiben
 
Zitat:

Zitat von torud
Kann mir denn eigentlich jemand sagen, wie ich nun eigentlich vom Hauptformular auf ein Plugin zugreifen kann, von dem ich gar nicht weiss, was es kann, oder wie ich dem Plugin Daten senden kann?

Du wilst gar nicht vom Hauptprogramm auf ein PlugIn zugreifen ;-)

PlugIns machen i.d.R. folgendes:

- sie greifen auf eine Schnittstelle zu, die das Hauptprogramm bereitstellt, um z.B. irgendwelche Daten lesen zu können. Z.B. Stellt ein Grafikprogramm über die Schnittstelle einen Zugriff auf das aktuelle Bild bereit. Das Plugin kann dann z.B. das Canvas des Bildes bearbeiten

- sie stellen dem Hauptprogramm "Aktionen" zur Verfügung - in Form von Menüpunkten - die man dann im Hauptprogramm auswählen kann, die Abarbeitung findet aber widerum im PlugIn statt

Gruß Igotcha

torud 1. Apr 2005 16:57

Re: Plugin für eigenes Programm schreiben
 
ein grosses Aah hat sich soeben eingestellt!

Wie könnte ich also dem Plugin teile meiner Datenbank zur Verfügung stellen?
Wenn ich im Plugin selbst auf mein Datenmodul zugreifen will und so was probiere schmiert mir alles ab:

Delphi-Quellcode:
Plugin.AdoTable.Assign(Datenmodul.AdoTable);
Und das, obwohl Datenmodul per uses dem Plugin bekannt ist.

Was mache ich falsch?

Igotcha 1. Apr 2005 17:15

Re: Plugin für eigenes Programm schreiben
 
Zitat:

Zitat von torud
ein grosses Aah hat sich soeben eingestellt!

Wie könnte ich also dem Plugin teile meiner Datenbank zur Verfügung stellen?
Wenn ich im Plugin selbst auf mein Datenmodul zugreifen will und so was probiere schmiert mir alles ab:

Mal ein Beispiel:

Ich arbeite selbst an einer modularen Awendung, wo das Hauptprogramm nur eine minimale technische Funktionalität und rein gar keine fachliche besitzt - diese steckt in den Modulen (ich arbeite mit BPLs und da stecken die Forms, etc. drin).

Da dies hauptsächlich datenbankbasierte Module sind, stelle ich vom Hauptprogramm aus verschiedene Query-Komponenten zur Verfügung, mit denen die Module arbeiten können.

Dazu ist es bei mir notwendig, dass die Module alle von einer gemeinsamen Basisklasse abgeleitet sind und die "MainForm" in der Uses-Klausel aufnehmen. Damit aus den Modulen und dem Hauptprogramm später auch "eine" Applikation wird, sind alle Module mit Laufzeitpackages kompiliert.

In den Modulen greife ich dann auf eine Query z.B. so zu:

Delphi-Quellcode:

MainForm.AIOSZQR0.SQL.Text:='SELECT o.* FROM kom_pup_org o, kom_pup_org_user u WHERE o.o_id = u.org_id AND u.user_id =:user ORDER BY o.o_order DESC';
MainForm.AIOSZQR0.ParamByName('user').AsInteger:=AIOSUserID;
MainForm.AIOSZQR0.Open;
Wobei "AOISUserID" z.B. auch eine Variable des Hauptprogramms ist, auf die alle Module zugreifen können.

Diese jetzt endlich für mich funktionierende Technik habe ich auch nicht alleine zustande gebracht, sondern ein Gerüst gefunden (Dank nochmal an Hagen), welches ich mir auf meine eigenen Bedürfnisse angepasst habe. Grundsätzlich ist dieses Thema nicht einfach, da man verschiedene, essentielle technische Sachen beachten muß, damit wirklich später alles in einem "Applikation-Raum" zusammenspielt.

Diese ganzen Demos á la "Eine Form aus einer DLL anzeigen" etc. sind meiner Meinung nach völlig für den Eimer, da sich diese geschickt um die eigentlichen Probleme drücken.

Gruß Igotcha

torud 1. Apr 2005 18:54

Re: Plugin für eigenes Programm schreiben
 
Tja den Eindruck habe ich auch!

Vielleicht könnte es mir schon helfen, wenn ich mir mal grundsätzlich ansehe, wie man ein DLL erstellt und zur Laufzeit einbindet, denn das ist doch eigentlich auch NUR ein Plugin, oder?

Jedenfalls bin ich mit den Tuts und Demos nur bedingt klargekommen. Meine Anwendung hat mich sehr intensiv mit Fehlermeldungen und Abstürzen bombardiert, als ich erstmalig versuchte die Plugins zu laden. Das selbst ging ja noch. Das Anzeigen der Forms der Plugins auch, aber sobald das Wichtigste, nämlich die Kommunikation zwischen beiden kam, war schluss!

Leider habe ich von bpl´s noch nichts gehört. Werde mal sehen, wo man noch Hilfe finden kann, denn ich muss dieses mal erstmalig modular arbeiten und eigentlich wil ich das auch endlich mal kapieren und nutzen!

Danke Tom

Igotcha 1. Apr 2005 19:09

Re: Plugin für eigenes Programm schreiben
 
Also DLLs werden "normalerweise" auch nur für Funktionen genutzt, die man einmal auslagert, um sie in verschiedenen Programmen nutzen zu können - Recycling sozusagen ;-)

Deshalb hat eine DLL erstmal nur sehr bedingt etwas mit einem "PlugIn" zu tun, da dieses i.d.R. mehr können soll, als nur Funktionen z.B. zur Berechnung bereitzustellen.

BPLs (Borland Package Libraries) sind wie DLLs, nur eben Delphi-spezifisch und eigentlich dazu gedacht, Forms, Units, etc. in ein Package zu packen.

Gruß Igotcha

Stanlay Hanks 1. Apr 2005 19:12

Re: Plugin für eigenes Programm schreiben
 
Hi. Also wenn du nicht weißt, wie du dem Plugin Daten übergeben musst, wird sich wohl das Plugin darum kümmern müssen, die benötigten Daten zu bekommen.

torud 1. Apr 2005 19:23

Re: Plugin für eigenes Programm schreiben
 
Könntest Du mir vielleicht noch einen Wink geben, wie man eine solche BPL erstellt und dabei auch noch alles Richtig macht???

@Stanley
Ich hatte doch geschrieben, dass ich Probleme dabei hatte und eine Fehlermeldung erhielt, die ich nicht deuten konnte, da es eine Fehleradresse war und wohl auch der Kernel betroffen war.


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