![]() |
Erstellen eines Delphi IDE Plugins für Delphi 2005 Personal
Liste der Anhänge anzeigen (Anzahl: 2)
Da
![]() Fangen wir mal an. Ein Wizard wird wie folgt definiert:
Delphi-Quellcode:
Gehn wir mal auf die einzelnen Punkte ein:
TWizard = class(TInterfacedObject, IOTAWizard, IOTANotifier)
public procedure AfterSave; procedure BeforeSave; procedure Destroyed; procedure Execute; procedure Modified; function GetState: TWizardState; function GetIDString: string; function GetName: string; constructor Create; destructor Destroy; override; end; AfterSave, BeforeSave, Destroyed, Execute und Modified könnt Ihr so abhacken ...
Delphi-Quellcode:
... da Delphi diese eh nicht aufruft.
procedure TWizard.AfterSave;
begin end; procedure TWizard.BeforeSave; begin end; procedure TWizard.Destroyed; begin end; procedure TWizard.Execute; begin end; procedure TWizard.Modified; begin end; WizardState löst Ihr so:
Delphi-Quellcode:
Kommen wir nun zu den wichtigen Punkten. Zuerst muss der Wizard erschaffen werden. Dies wird wie folgt erledigt:
function TWizard.GetState: TWizardState;
begin Result := []; end;
Delphi-Quellcode:
Der Destructor für Destroy sieht so aus:
constructor TWizard.Create;
begin WizardDataModule := TWizardDataModule.Create(nil); end;
Delphi-Quellcode:
Damit die IDE Euren Wizard eindeutig identifizieren kann müsst Ihr folgende zwei Punkte angeben:
destructor TWizard.Destroy;
begin WizardDataModule.Free; end;
Delphi-Quellcode:
Die Results ergeben die eindeutigen Namen Eurers Wizard. Falls Ihr mehere Wizards in Eurer IDE verwenden wollt müssen diese anders heißen.
function TWizard.GetIDString: string;
begin Result := 'WizardID'; end; function TWizard.GetName: string; begin Result := 'WizardName'; end; Ein Wizard wird so registiert:
Delphi-Quellcode:
Nun haben wir den Grundstein eines Wizards gelegt und gehen ans Eingemachte. Ein Wizard hat wie eine Form auch eine Create Produce. Hiermit können wir die neuen Menüpunkte anlegen.
procedure Register;
begin RegisterPackageWizard(TWizard.Create); end;
Delphi-Quellcode:
Mit "EditMenu" legen wir fest in welchem Hauptmenü wir einen Menüpunkt anlegen werden. "(BorlandIDEServices as INTAServices).MainMenu.Items[0]" entspricht zum Beispiel dem "Files"-Menü.
procedure TWizardDataModule.WizardDataModuleCreate(Sender: TObject);
var InsertPosition: Integer; Item: TMenuItem; I,Iindex: Integer; caption:string; begin EditMenu := (BorlandIDEServices as INTAServices).MainMenu.Items[0]; InsertPosition := EditMenu.Count; for I := 0 to EditMenu.Count-1 do if CompareText(EditMenu[I].Name, 'MenuItem.Name') = 0 then begin InsertPosition := I; Break; end; caption:='Amnon82''s Test-MenuItem; Iindex:=0; for I := MENU.Items.Count-1 downto 0 do begin Item := MENU.Items[I]; Item.ImageIndex:=Iindex; Item.caption:=caption; MENU.Items.Delete(I); EditMenu.Insert(InsertPosition, Item); end; end; Mit "CompareText" suchen wir uns die Einfügeposition für den neuen Menüpunkt aus. Haben wir den Punkt gefunden definieren wir noch die Caption von unserem neuen Menüpunkt und das Icon. Die Delphi IDE hat mehr als 300 Icons. Falls Ihr das gewünschte Icon nicht findet könnt Ihr auch 999 angeben, um keins anzeigen zu lassen. Man kann natürlich auch einen existierenden Menüpunkt ersetzen. Hierfür müsst Ihr natürlich wissen, wie dieser heißt. Hierzu hab ich einen SearchIDEWizard programmiert, welcher die Menüpunkte und Hauptmenüpunkte in einer TXT-Datei auf C abspeichert. In der Zeile "if CompareText(EditMenu[I].Name, 'MenuItem.Name') = 0" gebt Ihr dann statt "MenuItem.Name" den entsprechenden Namen des zu ersetzenden Menüpunktes ein. Mit folgenden Zeilen bekommt Ihr die Caption, das Icon und läßt den Menüpunkt verschwinden, da Ihr ihn dann doppelt hättet:
Delphi-Quellcode:
Ein Beispiel dafür findet Ihr in der Source von
EditMenu.items[I].visible:=false;
caption:=EditMenu.items[I].caption; Iindex:=EditMenu.items[I].imageindex; ![]() |
Logo für den Splash von Delphi 2005
Ihr könnt auch ein Logo in den Splash von Delphi 2005 setzen.
Somit können die User Euer Plugin leichter erkennen. Dazu braucht Ihr eine Bitmap. Die sollte 32x32 Pixel groß sein und kann 16,7 Mil. Farben haben. Erstellt eine .rc-Datei mit folgendem Inhalt:
Code:
Diese könnt Ihr dann mit der brcc32.exe durch den Befehl "brcc32.exe LOGO.rc" zu einer Resource umwandlen.
LOGO bitmap "NamedesBildes.bmp"
Öffnet Euer Projekt und fügt die Resource hinzu.
Delphi-Quellcode:
Fügt folgende Variablen zu den globalen Variablen hinzu:
implementation
{$R *.DFM} {$R Logo.res}
Delphi-Quellcode:
Den Punkt "procedure Register;" ändert Ihr wie folgt ab:
sPluginName: string;
lBitmap: Graphics.TBitmap;
Delphi-Quellcode:
Falls Euch das Logo nicht lange genug angezeigt wird, könnt Ihr die Anzeigedauer mit folgendem Code verlängern (wodurch sich aber der Start von Delphi verzögern kann!):
procedure Register;
begin sPluginName:='Name des Plugins'; if SplashScreenServices <> nil then begin lBitmap := Graphics.TBitmap.Create; try lBitmap.LoadFromResourceName(hInstance, 'LOGO'); SplashScreenServices.StatusMessage(sPluginName); SplashScreenServices.AddPluginBitmap(sPluginName, lBitmap.Handle); finally lBitmap.Free; end; end; RegisterPackageWizard(TWizard.Create); end;
Delphi-Quellcode:
procedure Delay(Milliseconds: Integer);
var Tick: DWord; Event: THandle; begin Event := CreateEvent(nil, False, False, nil); try Tick := GetTickCount + DWord(Milliseconds); while (Milliseconds > 0) and (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do begin Application.ProcessMessages; if Application.Terminated then Exit; Milliseconds := Tick - GetTickcount; end; finally CloseHandle(Event); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 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