Einzelnen Beitrag anzeigen

Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 

Erstellen eines Delphi-PlugIns

  Alt 11. Mai 2003, 16:15
Dieses Tutorial zeigt Ihnen auf, wie sie mit Hilfe eines PlugIns die Funktionalität der Delphi-IDE erweitern können. Es ist in zwei Abschnitte aufgeteilt.

Der erste Abschnitt zeigt die denkbar einfachste Form für ein Delphi-IDE-PlugIn, der zweite ist ungleich komplexer. Beide Abschnitte sind jedoch bloß die Spitze des Eisbergs dessen, was möglich ist.

Code:
[color=#000080][i]HINWEIS:[/i]
Die hier gezeigte Technik ist gültig ab Delphi 4 und gilt seit Delphi 7 als veraltet, kann jedoch noch genutzt werden und wird vollständig unterstützt.[/color]
Installation eines Delphi-IDE-PlugIns

Vorab möchte ich kurz erläutern, wie ein PlugIn für Delphi installiert wird. Damit können Sie die Beispiele testen, bevor Sie alles durchgelesen haben.

Jedes Delphi-IDE-PlugIn wird in der Registry eingetragen. Sollten mehrere Delphi-Versionen auf einem Rechner installiert sein, so muß das PlugIn für jede Delphi-Version separat installiert werden. Gleiches gilt, wenn eine Delphi-Version auf dem gleichen Rechner durch mehrere Anwender genutzt wird.

In der Registry muß das PlugIn unter folgendem Schlüssel installiert werden.
HKCU\Software\Borland\Delphi\X.0\Experts
, wobei das X durch die entsprechende Delphi-Version zu ersetzen ist. Es ist möglich, daß der Schlüssel Experts nicht existiert. Dieser muß dann bei Bedarf angelegt werden.

Unter diesem Schlüssel muß ein Eintrag (REG_SZ) mit einem eindeutigen Namen angelegt werden. Der Wert dieses Eintrages verweisst dann auf die DLL des PlugIns (inkl. Pfad und Dateinamen). Beim nächsten Start von Delphi wird das PlugIn dann automatisch geladen.

Die Schnittstelle zwischen der Delphi-IDE und dem PlugIn

Damit Delphi mit dem PlugIn kommunizieren kann, muß eine Methode exportiert werden. Diese Methode muß unter dem Namen ExpertEntryPoint exportiert werden und hat folgende Parameterliste
Delphi-Quellcode:
function InitExpert(ToolServices: TIToolServices; RegisterProc:
    TExpertRegisterProc; var Terminate: TExpertTerminateProc): Boolean; export;
    stdcall;
Der erste Paramter ToolServices bietet sämtliche "dokumentierten" Schnittstellen zur Delphi-IDE. Der zweite Paramter RegisterProc wird benötigt, um eines oder mehrere PlugIns in die Delphi-IDE zu integrieren. Der dritte Paramter Terminate kann genutzt werden, um die PlugIn-DLL zu informieren, wenn das PlugIn entladen wird.

Die Methode gibt True zurück, wenn das PlugIn erfolgreich geladen wurde. Es kann entweder False zurückgegeben werden, wenn ein Fehler aufgetreten ist, oder es wird eine Exception ausgelöst, damit die Delphi-IDE das PlugIn sofort wieder entlädt (siehe Code-Beispiel im Download).

Die PlugIn Klasse TIExpert

Das PlugIn muß von der Klasse TIExpert abgeleitet werden, welche in der Unit ExptIntf deklariert ist. Diese Klasse definiert mehrere abstrakte Methoden, welche durch jedes PlugIn implementiert werden müssen: GetName, GetAuthor, GetComment, GetPage, GetGlyph (Unterschiedlich für Windows und Linux), GetStyle, GetState, GetIDString, GetMenuText und Execute. Die Bedeutung der einzelnen Methoden ist im Quelltext (im Anhang) genauer erläutert.

Das einfachste PlugIn

Unser erstes PlugIn wird einen neuen Eintrag in das Hilfe-Menü (Standard) einbinden. Wenn der User auf diesen Eintrag klickt, wird durch die Delphi-IDE die Methode Execute des PlugIns aufgerufen. Folgende Punkte sind entscheidend:
  • Die Methode GetState muss [esEnabled] zurückliefern
  • Die Methode GetStyle muss esStandard zurückliefern
  • Die Methode GetMenuText liefert den Text des Menüeintrages zurück
  • Die Methode Execute definiert das eigentliche Ereignis

Hier noch der Code der relevanten Methoden. Der komplette Code ist im Anhang zu finden.

Delphi-Quellcode:
procedure TDelphiPlug.Execute;
begin
  // Execute wird aufgerufen, wenn der User auf den Eintrag im Hilfe-Menü klickt
  MessageBox(ToolServices.GetParentHandle, 'Wie kann ich Ihnen helfen?', 'Öhm',
      MB_ICONQUESTION + MB_OK);
end;

function TDelphiPlug.GetMenuText: string;
begin
  // Text der im Hilfe Menü angezeigt wird. Diese Funktion wird jedesmal
  // aufgerufen, wenn das Hilfemenü angezeigt wird.
  //
  // HINWEIS:
  // die Methode GetState muß esStandard zurückliefern, damit dieser Eintrag
  // im Hilfemenü automatisch generiert wird
  Result := 'Hallo, ich erscheine im Hilfe-Menü';
end;

function TDelphiPlug.GetState: TExpertState;
begin
  // liefert ein Set ´von Stati zurück
  // mögliche Werte: esEnabled, esChecked
  Result := [esEnabled];
end;

function TDelphiPlug.GetStyle: TExpertStyle;
begin
  // liefert die Art des Experten zurück
  // mögliche Werte: esStandard, esForm, esProject, esAddIn
  Result := esStandard;
end;
......
Angehängte Dateien
Dateityp: zip delphi-plug_sample__i_.zip (52,3 KB, 251x aufgerufen)
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat