hi,
hab zwar keine direkte Lösung für dich, aber das Problem selbst ist
interessant.
Ich hab ein ähnliches Problem gehabt als ich meine Cl*pper Proceduren
auf GUI / MDI umgestellt hab. Da es unter MDI möglich ist "beliebig"
viele Fenster zu öffnen (mit verschiedenen RECNO() ) brauchte ich
nun was zum "identifizieren". Ich gebe nun beim :init / :create eine
"Nummer" > 0 zurück die ich beim "Save,Close etc" benutze.
Code: Alles auswählen
#xtranslate mW9MARK => Stack\[SP, 1]
...
#xtranslate mEditRec => Stack\[SP,18]
STATIC Stack := {} // Array für Memvar´s
STATIC SP := 0 // "Zähler"
STATIC aEditControls := {} // Array SLE
STATIC hWndEdit // handle des "Fenster´s"
FUNCTION EDIT_INIT
AADD(Stack,ARRAY(18)) // Anzahl meiner Memvar´s
SP++ // "STACK" hochzählen
EDIT_LEER() // Memvar´s "leer" vorbelegen
RETURN (SP) // Nummer des "STACK"
...
PROCEDURE EDIT_EXIT(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
PROCEDURE EDIT_STORE(nRecno,nThread)
IF PCOUNT() = 2
SP := nThread
mEditRec := nRecno // => Stack\[SP,18]
....
STATIC PROCEDURE ST_REPLACE(nThread)
SP := nThread
GOTO (mEditRec) // => Stack\[SP,18]
* REF2GETS(aEditcontrols)
Gather(aEditcontrols)
IF ( DbRLock(mEditRec) ) // => Stack\[SP,18]
...
oDlg := XbpDialog():new( AppDeskTop(),oParent, aPos, aSize, , .F.)
...
oDlg:close := {|| ...... EDIT_EXIT(oDlg:cargo) ...}
oDlg:cargo := nThread
oDlg:create()
...
oOK := XbpPushButton():new(....)
oOK:activate := {|| ST_REPLACE(oDlg:cargo) , ;
PostAppEvent(xbeP_Close,,,oDlg) }
...
was du also brauchst wäre ein "Zähler" welchen ich mit dem "Fenster"
verknüpfe über oDlg:cargo.
gruss by OHR
Jimmy