Hallo,
Tom hat oben im Makro "+" statt ' drinn was zu einem Macrofehler führt.
Zu deiner Frage, eigentlich ist die Local ja nur in der Funktion, aber durch den Codeblock entsteht eine weitere Referenz auf den Speicherbereich und somit wird das LOCAL ausgehebelt (detached locals).
Hier mein Vorschlag, ich hoffe ich vertippe mich jetzt nicht auch
Code: Alles auswählen
cPfad := "..\Dokumente\" // ein Pfad ist sicherer !
aDirectory := directory( cPfad+"*.pdf" )
nMaxLength := len(aDirectory)
if nMaxLength > 0
for i := 1 to nMaxLength
cDokument := aDirectory[i,1]
x := len(cDokument)-4
cDokument := substr(cDokument,1,x)
bCode := &("{|| _showPDF(, '"+cPfad+cDokument+".pdf') }")
oMenu:addItem( { cDokument, bCode ,,XBPMENUBAR_MIA_OWNERDRAW }, BMP_PDF )
next
endif
wichtig ist bei solchen Aktionen, dass Stringparameter in ' ' eingeschlossen werden, was dann mit den begrenzenden " " recht unübersichtlich wird, daher hier nochmals in rot
" und normalen ':
&(
"{|| _showPDF(, '
"+cPfad+cDokument+
".pdf') }
" )
ohne die Klammern für den Codeblock gibt das dann
_showPDF(,'Datei1.pdf')
_showPDF(,'Datei2.pdf')
_showPDF(,'Datei3.pdf')
etc.
da das Ganze recht schnell unübersichtlich wird, habe ich früher zuerst den Text gebaut
und danach in einen codeblock umgewandelt:
Code: Alles auswählen
cCode := "{|| _showPDF(, '"+cPfad+cDokument+".pdf') }"
msgbox(cCode,"Prüfen !")
bCode := &(cCode)
// Testen
eval(bCode,...)
PS: falls eine solche Funktion danach zur Laufzeit als fehlend gemeldet wird - sollte mit DLLs in Xbase++ eigentlich nicht vorkommen - muss man diese Funktion irgendwo im Programm nochmals erwähnen (anfordern):
Code: Alles auswählen
function IchWerdeNieAufgerufen()
_FehlendeFunktion()
return NIL