X11
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору procedure TfmMain.LoadPlugins(); Var i, iDllHandle:integer; PlugExec : procedure(sender :TObject) of object; PlugType : function : integer; //Объявление функции, которая будет возвращать тип плугина GetConnectInfo : procedure(fbclient,DB:PChar;db_connected:boolean); GetUserData : procedure(UID:integer;UserName:PChar); MenuCaption : function : PChar; //для вывода кнопки плагина act: TAction; NewButton: TdxBarButton; NewItemLink: TdxBarItemLink; begin iDllHandleAreas := 0; slPlagins := TStringList.Create; slPlaginsHandles := TStringList.Create; Log(IncludeTrailingPathDelimiter(sAppPath2)+'Plugins\'); FindPlugins(IncludeTrailingPathDelimiter(sAppPath2)+'Plugins\'); Log('Найдено:' + IntToStr(slPlagins.Count)); if slPlagins.Count <= 0 then begin FreeAndNil(slPlagins); exit; end; LOG(self.Name+' Загрузка плагинов'); //если найдены плагины, то пытаемся их загрузить for I := 0 to slPlagins.Count - 1 do begin //iDllHandleAreas iDllHandle := LoadLibrary(PChar(slPlagins[i])); slPlaginsHandles.Add(IntToStr(iDllHandle)); if iDllHandle <> 0 then begin @plugExec := GetProcAddress(iDllHandle,'PluginExec'); @plugType := GetProcAddress(iDllHandle,'PluginType'); @GetConnectInfo := GetProcAddress(iDllHandle,'GetConnectInfo'); @GetUserData := GetProcAddress(iDllHandle,'GetUserData'); GetUserData(UserData.UserID,PChar(UserData.UserName)); GetConnectInfo(PChar(DM.fibDB.LibraryName),PChar(DM.fibDB.DBName),DM.fibDB.TestConnected); NewButton := TdxBarButton.Create(self); @MenuCaption := GetProcAddress(iDllHandle,'MenuCaption'); act := TAction.Create(am1); act.ActionList := am1; act.onExecute := plugExec; act.caption := MenuCaption; act.Hint := MenuCaption; if MenuCaption = 'Участки [Make It! Innovations]' then iDllHandleAreas := iDllHandle; NewButton.Action := act; //раньше в главное //PlugType возвращает индекс, по этому индексу определяем в какой пункт меню ставить новый пункт // mmMainMenu.Items.Items[PlugType].Add(NewItem); ДАЛЬШЕ НЕ МОГУ СООБРАЗИТЬ // NewItemLink := MainMenu.ItemLinks.Add; // NewItemLink := MainMenu.ItemLinks. // if plugType = 3 then // NewItemLink := mmApart.ItemLinks.Add; NewItemLink.Item := NewButton; Log(self.Name+' Плагин успешно загружен: '+MenuCaption); end; end;//for end; | Всего записей: 3253 | Зарегистр. 24-11-2005 | Отправлено: 01:22 24-03-2010 | Исправлено: X11, 10:16 24-03-2010 |
|