AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi PlugIns in eigenen Anwendungen
Tutorial durchsuchen
Ansicht
Themen-Optionen

PlugIns in eigenen Anwendungen

Ein Tutorial von sakura · begonnen am 14. Mai 2003 · letzter Beitrag vom 26. Feb 2010
Antwort Antwort
Seite 3 von 4     123 4      
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#1

Re: PlugIns in eigenen Anwendungen

  Alt 24. Apr 2006, 10:43
Ok sorry dachte da du davon anfängst das auch gleich einen Link hast Danke erstmal für alles
  Mit Zitat antworten Zitat
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#2

Re: PlugIns in eigenen Anwendungen

  Alt 4. Mai 2006, 11:07
Noch mal ne frage ! Kann ich das wirklich nicht in DLL machen? Packges sind doch scheiße !
Kann von mir aus auch ein massiver Aufwand werden. Hauptsache es wird so das es Ordentlich ist und Funktioniert. Wäre Tool wenn es eine Möglichkeit gibt.
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#3

Re: PlugIns in eigenen Anwendungen

  Alt 4. Mai 2006, 11:11
Es geht schon alles mit dlls zu lösen. Du musst Dir nur mal Gedanken über deine Schnittstellen machen... übergib z.B. keine TFont variable, sondern nur deren Parameter als PChar und Integer...
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#4

Re: PlugIns in eigenen Anwendungen

  Alt 4. Mai 2006, 12:18
Sage mal kann ich nicht eigentlich ne Pointer auf die Adresse übergeben ?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: PlugIns in eigenen Anwendungen

  Alt 4. Sep 2007, 10:33
Ich erstelle in dem Plugin ein Fenster und zeige es mit Show an.
Delphi-Quellcode:
procedure TPlugin01.Execute(XMLString: string);
begin
  inherited;
  frmTestPlugin01 := TfrmTestPlugin01.Create(nil);
  frmTestPlugin01.Label1.Caption := 'Testzeichenfolge: ' + XMLString;
  frmTestPlugin01.Label2.Caption := 'Parenthandle: ' + IntToStr(Self.Parent);
  frmTestPlugin01.Show;
end;
Freigegeben wird das Formular im OnClose-Ereignis des Formulares selber:
Delphi-Quellcode:
procedure TfrmTestPlugin01.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Self.Free;
end;
Aber wie kann ich jetzt zum einen die Plugin DLL benachrichtigen dass das Fenster geschlossen wurde und wie kann das Plgin die Hostanwendung benachrichtigen? Wie man Nachrichten an das Plugin schickt wird ja im Tutorial demonstriert, aber wie geht der umgekehrte Weg?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#6

Re: PlugIns in eigenen Anwendungen

  Alt 4. Sep 2007, 10:40
Also ich zeige meine Plugin-Fenster immer modal, dann stellt sich mir diese Frage nicht ... ansonsten müsstest Du onClose die entspr. handles prüfen und diese freigeben.
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#7

Re: PlugIns in eigenen Anwendungen

  Alt 4. Sep 2007, 12:07
Du könntest dem Plugin ein "Kommunikation"-Interface(oder -Klasse) beim Laden übergeben, über das die Kommunikation zur Anwendugn laufen könnte...

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: PlugIns in eigenen Anwendungen

  Alt 4. Sep 2007, 13:41
Na ja, das erste problem besteht schon darin, wie die dpr-Datei der Plugin-DLL das Schliessen des Fensters mitbekommt. Hier wird es erstellt und angezeigt:
Delphi-Quellcode:
procedure TPlugin01.Execute(XMLString: string);
begin
  inherited;
  frmTestPlugin01 := TfrmTestPlugin01.Create(nil);
  frmTestPlugin01.Label1.Caption := 'Testzeichenfolge: ' + XMLString;
  frmTestPlugin01.Label2.Caption := 'Parenthandle: ' + IntToStr(Self.Parent);
  frmTestPlugin01.Show;
end;
Wenn das Formular geschlossen wird, soll auch die Host-Anwendung darüber benachrichtigt werden und das Plugin entladen.

Ich verwende, wie im Tutorial eine Plugin-Klasse, die der Host-Anwendung und dem Plugin bekannt ist:
Delphi-Quellcode:
type
  TEventNotification = (evnClose);
  TEventAction = (evnContinue, evnAbort);

  TPlugin = class(TObject)
  private
    FParent: THandle;
    procedure SetParent(const Value: THandle);
  public
    constructor Create(aParent: THandle);
    function GetName: string; virtual; stdcall; abstract;
    function GetAuthor: string; virtual; stdcall; abstract;
    function GetComment: string; virtual; stdcall; abstract;
    function GetCaption: string; virtual; stdcall; abstract;
    procedure Execute(XMLString: string); virtual; stdcall; abstract;
    function EventHandler(EventNotification: TEventNotification): TEventAction; virtual; stdcall; abstract;
    property Parent: THandle read FParent write SetParent;
  end;

  TLoadPlugin = function(Parent: THandle; var PlugIn: TPlugIn): Boolean;

implementation

{ TPlugIn }

constructor TPlugIn.Create(aParent: THandle);
begin
  inherited Create;
  FParent := aParent;
end;

procedure TPlugIn.SetParent(const Value: THandle);
begin
  FParent := Value;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#9

Re: PlugIns in eigenen Anwendungen

  Alt 4. Sep 2007, 13:48
Also um das "OnClose"-Event des Forms wirst du erstmal nicht drum herum kommen.
Ich schlage vor:

1.) Im OnClose des Form wird TPlugin über das Schließen benachrichtigt (TPlugin.Notify(Sender: TObject; Action: TMyPluginAction);
--> Dazu muss TPlugin irgendwo innerhalb des Plugin-Forms gespeichert werden (nen eigenes Property, im Tag des Forms - wie auch immer!)
--> Bei TMyPluginAction kannst Du ja noch weitere Ereignisse reinpacken -- oder du machst statt "Notify" eine "TPlugin.PluginFormClosed(Sender: TObject)"-Methode
2.) Die Anwendung überigbt eine Klasse oder einen Methodenzeiger, den dein TPlugin-Objekt speichert und aufruft, sobald ein Ereignis (siehe oben) eingetreten ist.

Wenn ich alles richtig bedacht habe, sollte das so gehen

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: PlugIns in eigenen Anwendungen

  Alt 6. Sep 2007, 15:57
Wenn ich die Sourcen zum zweiten Teil mit Delphi 6 kompilieren will, bekomme ich folgende fehlermeldungen:
Code:
[Fehler] uFormMain.pas(88): Ausdruckstyp muß BOOLEAN sein
[Fehler] uFormMain.pas(94): Ausdruckstyp muß BOOLEAN sein
[Fehler] uFormMain.pas(100): Ausdruckstyp muß BOOLEAN sein
[Fehler] uFormMain.pas(112): Anweisung erwartet, aber 'PROCEDURE' gefunden
[Fehler] uFormMain.pas(39): Ungenügende Forward- oder External-Deklaration: 'TfrmMain.mnuFileCloseClick'
[Fehler] uFormMain.pas(43): Ungenügende Forward- oder External-Deklaration: 'TfrmMain.mnuEditCutClick'
[Fehler] uFormMain.pas(45): Ungenügende Forward- oder External-Deklaration: 'TfrmMain.mnuEditPasteClick'
[Fataler Fehler] ExtendableApp.dpr(10): Verwendete Unit 'uFormMain.pas' kann nicht compiliert werden
Das wären diese Zeilen:
Delphi-Quellcode:
procedure TfrmMain.mnuEditCopyClick(Sender: TObject);
begin
  if CurrentDocument <> nil then
    if CurrentDocument.mmoDocument.CopyToClipboard;
end;

procedure TfrmMain.mnuEditCutClick(Sender: TObject);
begin
  if CurrentDocument <> nil then
    if CurrentDocument.mmoDocument.CutToClipboard;
end;

procedure TfrmMain.mnuEditPasteClick(Sender: TObject);
begin
  if CurrentDocument <> nil then
    if CurrentDocument.mmoDocument.PasteFromClipboard;
end;
Jeweils die zweite if-Bedingung.

Delphi-Quellcode:
procedure TfrmMain.mnuFileCloseClick(Sender: TObject);
begin
  if CurrentDocument <> nil then
    if CurrentDocument.CloseDocument then
      ShowMessage('yes')
    else
      ShowMessage('no');
end;

procedure TfrmMain.mnuFileExitClick(Sender: TObject); // <- Zeile 112
begin
  Close;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 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