JA ... man "könnte" eine PUBLIC / PRIVATE verwenden ...
aber die Frage "an-und-für-sich" ist doch wie man ein Object in den Codeblock String von einem Makro bekommt
ich hatte meine PUBLIC / PRIVATE mittels "Summer93" in Function umgewandelt.
Code: Alles auswählen
PROCEDURE MAIN
LOCAL oStatic,cb
oStatic := XbpStatic():new(,,{0,0},{320,200}):create()
// statt PUBLIC - PRIVATE
MyObj(oStatic)
cb := MakeBock( "MyFunc","Hello world")
EVAL(cb)
WAIT
RETURN
FUNCTION MakeBock(cFunc,cString)
LOCAL bBlock
bBlock := "{|| "+cFunc+"('"+cString+"')}"
RETURN &bBlock
FUNCTION MyFunc(cString)
LOCAL oObj := MyObj()
oObj:SetCaption(cString)
RETURN NIL
FUNCTION MyObj(xValue)
STATIC oObj
IF PCOUNT() > 0
oObj := xValue
ENDIF
RETURN oObj
da ich eine Menge PUBLIC / PRIVATE in meinem ehemaligen Cl*pper Code hatte habe ich alle Function in 1 x PRG gepackt und ein Array als STATIC verwendet. Der Zugriff erfolgt über #xtranslate (was den ehemaligen Variablen entspricht)
Code: Alles auswählen
#xtranslate cKDNR => Stack\[SP,1]
#xtranslate cARTNR => Stack\[SP,2]
...
#xtranslate lGetTimeout => Stack\[SP,36]
STATIC Stack := {}
STATIC SP := 0
FUNCTION _STACKINIT
// Anzahl Elemente mit #xtranslate
AADD( Stack, ARRAY( 36 ) )
// n-Dim für MDI
SP ++
cKDNR := SPACE(5)
cARTNR := SPACE(5)
...
lGetTimeout := .F.
lGetTimeout := 0
RETURN (SP)
FUNCTION _STACKEXIT(nThread)
LOCAL iMax
ADEL(Stack,nThread)
DO WHILE .T.
iMax := LEN(Stack)
IF iMax = 0
EXIT
ELSEIF Stack[iMax] = NIL
ASIZE(Stack,LEN(Stack) - 1)
ELSE
EXIT
ENDIF
ENDDO
SP := LEN(Stack)
RETURN (SP)
wie man sieht ist das Array n-Dim d.h. man kann damit auch MDI.