Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
Delphi 7 Enterprise
|
Re: Dem Hauptprogramm Funktionen modular hinzufügen
23. Jul 2004, 11:35
Hallo Sakura,
eine Frage:
Delphi-Quellcode:
constructor TPlugin.Create(aOwner: TPlugIns; aDLLName: String);
begin
inherited Create;
FDLLName := aDLLName;
FOwner := aOwner;
LoadPlugIn;
...
procedure TPlugin.LoadPlugIn;
var
ProcAddr: Pointer;
LoadPlugInProc: TLoadPlugIn;
begin
// load library
FHandle := LoadLibrary(PChar(DLLName));
if (FHandle = INVALID_HANDLE_VALUE) or (FHandle = 0) then
// library could not be loaded
Abort;
ProcAddr := GetProcAddress(FHandle, 'LoadPlugIn');
if ProcAddr = nil then
begin
// plug-in load function is not exported, free library...
FreeLibrary(FHandle);
FHandle := INVALID_HANDLE_VALUE;
// and abort
Abort;
end;
try
LoadPlugInProc := TLoadPlugIn(ProcAddr); // Was passiert hier genau? Es wird erst ein
// try executing the registration method // Objekt vom Typ 'TPlugin' erzeugt und dann
if not LoadPlugInProc(FOwner.Owner, FPlugIn) then // dessen Methode 'LoadPlugin' aufgerufen?
// registration failed, abort loading // Durch diesen Aufruf wird Das Plugin
abort;
// aktiviert. Wie werden dort die Menüeinträge verwaltet und erweitert? Du sagtest das alle
// Menüpunkte 'gekapselt' werden. Wo und wie geschieht das?
Gefunden habe ich dazu:
Delphi-Quellcode:
procedure TPlugInObject02.AppendMenu;
var
MainMenu: TIMainMenu;
FileMenu, CloseMenu: TIMenuItem;
MainMenuItems: TIMenuItems;
begin
MainMenu := Parent.GetMainMenu; // Was passiert hier? Wird das ganze Menü zurückgeliefert?
try
MainMenuItems := MainMenu.GetMenuItems; // Und hier? Alle MenüItems?
try
FileMenu := MainMenuItems.FindItem('mnuFile');
if FileMenu <> nil then
try
CloseMenu := FileMenu.FindItem('mnuFileClose');
try
FileMenu.InsertMenuItem(CloseMenu.GetIndex, 'Save All',
{'Saves all files'}'Arndt ist schlau', 'mnuFileSaveAll', scShift + scCtrl + Ord('S'),
MNI_SAVEALL, OnMenuClick).Free;
FileMenu.InsertMenuItem(Succ(CloseMenu.GetIndex), 'Close All',
'Closes all files', 'mnuFileCloseAll', scShift + scCtrl +
Ord('C'), MNI_CLOSEALL, OnMenuClick).Free;
finally
CloseMenu.Free;
end;
finally
FileMenu.Free;
end;
finally
MainMenuItems.Free;
end;
finally
MainMenu.Free;
end;
end;
Vielleicht kannst Du mir mal ein Objektdiagramm zeichnen in dem die Verweise mitaufgeführt sind...
Das waren wohl mehrere Fragen... Es wäre schön, wenn du mir ein wenig weiterhelfen könntest!
Danke vielmals!
Gruß,
Barnti
|
|
Zitat
|