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;
...

...