Einzelnen Beitrag anzeigen

barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Dem Hauptprogramm Funktionen modular hinzufügen

  Alt 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
  Mit Zitat antworten Zitat