function InstalleLib(FchLib: String): Boolean;
var
Fch: String;
Menu, SousMenu: TMenuItem;
i, N, NbM, NoM, PosM: Integer;
begin
Fch:= DirEXE;
Fch:= IncludeTrailingPathDelimiter(Fch+FchLib);
{$IFDEF WINDOWS}
FchLib:= Fch+FchLib+'.dll';
{$ENDIF}
{$IFDEF LINUX}
FchLib:= Fch+'lib'+LowerCase(FchLib)+'.so';
{$ENDIF}
{$IFDEF DARWIN}
FchLib:= Fch+'lib'+LowerCase(FchLib)+'.dylib';
{$ENDIF}
HndLib:= LoadLibrary(PChar(FchLib));
if HndLib <> 0 then
begin
Pointer(AddMenu):= GetProcAddress(HndLib, PChar('AddMenu'));
Pointer(EnvoiDirLib):= GetProcAddress(HndLib, 'EnvoiDirLib');
Pointer(ArticleEnBdD):= GetProcAddress(HndLib, 'ArticleEnBdD');
Pointer(MajStock):= GetProcAddress(HndLib, 'MajStock');
if (Pointer(AddMenu) <> nil)
and (Pointer(EnvoiDirLib) <> nil)
and (Pointer(ArticleEnBdD) <> nil)
and (Pointer(MajStock) <> nil) then
begin
EnvoiDirLib(PChar(Fch)); {Envoie le Dir de la BdD : .../Articles}
Menu:= TMenuItem.Create(Base.MenuPrinc);
PosM:= 1; {Position d'insertion des menus de la Lib}
N:= 0;{AddMenu(0) retourne le nom du menu à ajouter et le Nb de Sousmenu}
Menu.Caption:= String(AddMenu(N)); {Récupère le nom du menu}
SetLength(ListSousMenu, Length(ListSousMenu)+N);
NbM:= Base.MenuPrinc.Items.Count; {Nombre de menus prédéfinis}
Base.MenuPrinc.Items.Insert(PosM, Menu); {Insertion du menu}
for i:= 1 to N do {Création des N sous-menus}
begin
SousMenu:= TMenuItem.Create(Base.MenuPrinc);
ListSousMenu[High(ListSousMenu)-N+i]:= SousMenu;
NoM:= i;
SousMenu.ImageIndex:= i+11; {11 = dernier indice des des menus fixes}
SousMenu.Caption:= string(AddMenu(NoM));
SousMenu.Enabled:= True;
SousMenu.Tag:= i; {Mémo de l'indice du sous-menu dans son Tag}
SousMenu.OnClick:= @Base.ClickMenu; {Affectation de la fonction Click}
Base.MenuPrinc.Items[PosM].Add(SousMenu); {Installe le sous-menu}
end;
LibOK:= True;
Result:= True;
end
else
LibOK:= False;
end
else
LibOk:= False;
Result:= LibOK;
end;