D6: BPLs og mainmenu.merge
Jeg er gået død på følgende opgave:Jeg vil gerne have en BPL som jeg indlæser til mit program ved opstart, og som udvider menuen på det indlæsende program med funktioner i BPL'en
Jeg har gjort følgende:
Oprettet en mainmenu i hovedprogrammet hvor funktioner har forskellige groupindex (10, 20 ..).
Konstrueret en BPL med en mainmenu hvor alle funktioner har groupindex som er forskellige fra dem der er i hovedprogrammet
I hovedprogrammet indlæser jeg BPL ved opstart, på følgende måde:
// kodestump 1
bplmodulx := loadpackage('etiket.bpl');
if bplmodulx <>0 then begin
@setup := getprocaddress(bplmodulx,'setup');
if assigned(setup) then begin
setup(bplmenu);
mainmenu1.Merge(bplmenu);
end;
end;
bplmodulx, setup og bplmenu er defineret som globale variable udenfor programobjektet.
var
frmmain: Tfrmmain;
bplmodulx : hmodule;
setup :procedure(var menu:tmainmenu);
bplmenu : tmainmenu;
I BPL sker der ikke ret meget:
procedure setup(var menu : tmainmenu);
begin
// initialiserer de forms der skal benyttes
frmsetup := tfrmsetup.Create(application);
frmetiket:= tfrmetiket.Create(application);
menu :=frmetiket.yderst;
end;
frmetiket er BPL's "primære" form, mens frmsetup er en form der kaldes af BPL's mainmenu (hedder "yderst")
Mit problem er følgende:
Når jeg har udført kodestump 1, bliver programmets menu udvidet med de funktioner der er i BPL'en, og kalder også de forventede ting i BPL'en, men nogle af de oprindelige funktioner i hovedmenuen er ligeledes (utilsigtet) blevet erstattet med kald til BPL'en.
Er der nogle der ved hvordan man får dette til at fungere efter hensigten ????