Pues ya no sé si es que ayer fué luna llena o algo de eso, que no doy con lo que busco. Voy a poner un trocito de mi código que creo representa el meollo. Esta función es llamada desde el menú de la ventana principal. Por cada vez que se ejecuta, se crea una nueva ventana.
aArrayVars es un array que va contener todas las variables y objetos y nombres de alias. El primer parámetro o índice del array lo utilizo referenciar varibles/objetos o alias. El segundo índice del array, lo uso para
El problema está, como comentaba en post anteriores, que cuando quiero hacer referencia a cualquier objeto de alguna ventana, he perdido la referencia para buscarlo en el array, porque nWnd cambia su valor. Por tanto, cada vez que generamos una nueva ventana, nWnd va a ser referencia únicamente de la última ventana creada. Por ello, si cambiamos de ventana, al hacer referencia a aObjVar( oArt, nWnd ), tan sólo me estaré refiriendo a la última ventana por el valor que tiene nWnd.
La solución de Antonio podría ser valida, excepto porque mi variable para el objeto ventana, la tengo que referenciar con nWnd también, de la manera siguiente: aObjVar( oWndChild, nWnd )
A ver si con el trocito de código se entiende mejor y yo entiendo mejor cómo solucionarlo.
Code: Select all | Expand
#include "FiveWin.ch"
#define aObjVar(i,j) aArrayVars[1][i][j]
#define aAlias(i,j) aArrayVars[2][i][j]
#define nTipVarMax 2 //Tipo máximo de variables (ObjVar y Alias = 2)
#define nWndMax 10 //Tope ventanas Man_Art()
// Objetos y variables
#define oWndChild 1
#define oDlg 2
#define oSayProc 3
#define oSayEmpr 4
#define oArt 5
#define cProc 6
#define cEmpresa 7
#define nObjVarMax 7 //Número máximo de variables y objetos
// Alias
#define Tec 1
#define Art 2
static aArrayVars[nTipVarMax][nObjVarMax][nWndMax]
static nWnd
**********************************************************************************************************************
function ManArt()
**********************************************************************************************************************
if nWnd = nil
nWnd := 1
else
nWnd ++
endif
aAlias( Tec, nWnd ) := CnwOpenDbf( oWndPrinc, "TEC.DBF", 5, .t., .f. )
//Funcion para abrir una base de datos compartida o exclusiva, retorna un alias nuevo y único
SET INDEX TO Tec_Cod, Tec_Nom
aAlias( Art, nWnd ) := CnwOpenDbf( oWndPrinc, "ART.DBF", 5, .t., .f. )
SET INDEX TO Art_Cod, Art_Nom, Art_Sub, Art_Int
DATABASE aObjVar( oArt, nWnd )
aObjVar( oArt, nWnd ):lOemAnsi = .t.
aObjVar( oArt, nWnd ):Load()
aObjVar( oArt, nWnd ):bBOF = { || MsgInfo( "Primer Registro" ) }
aObjVar( oArt, nWnd ):bEOF = { || MsgInfo( "Último Registro" ) }
SELECT ( aAlias( Art, nWnd ) )
DEFINE WINDOW aObjVar( oWndChild, nWnd ) MDICHILD OF oWndPrinc ;
FROM 5,5 TO 6,6;
COLOR "N/W" ;
BORDER NONE // prevent resizing
DEFINE DIALOG aObjVar( oDlg, nWnd ) RESOURCE "Articulos" OF aObjVar( oWndChild, nWnd )
REDEFINE SAY aObjVar( oSayProc, nWnd ) PROMPT aObjVar( cProc, nWnd ) ID 10 OF aObjVar( oDlg, nWnd )
REDEFINE SAY aObjVar( oSayEmpr, nWnd ) PROMPT aObjVar( cEmpresa, nWnd ) ID 20 OF aObjVar( oDlg, nWnd )
REDEFINE GET aObjVar( oGetArt_Cod, nWnd ) VAR aObjVar( oArt, nWnd ):Art_Cod ID 40 OF aObjVar( oDlg, nWnd ) PICTURE '@!' UPDATE
REDEFINE GET aObjVar( oArt, nWnd ):Art_Nom ID 50 OF aObjVar( oDlg, nWnd ) PICTURE '@!' UPDATE
REDEFINE GET aObjVar( oArt, nWnd ):Art_Col ID 60 OF aObjVar( oDlg, nWnd ) PICTURE '@!' UPDATE
REDEFINE BUTTON aObjVar( oBtnAnterior, nWnd ) ID 1000 OF aObjVar( oDlg, nWnd );
ACTION ( aObjVar( oArt, nWnd ):Skip( -1 ) , If( aObjVar( oArt, nWnd ):BoF(), MsgBeep(),), aObjVar( oDlg, nWnd ):Update() )
REDEFINE BUTTON aObjVar( oBtnSiguiente, nWnd ) ID 2000 OF aObjVar( oDlg, nWnd );
ACTION ( aObjVar( oArt, nWnd ):Skip(),;
If( aObjVar( oArt, nWnd ):EoF(), aObjVar( oArt, nWnd ):Skip( -1 ),), aObjVar( oDlg, nWnd ):Update() )
ACTIVATE DIALOG aObjVar( oDlg, nWnd ) NOWAIT CENTERED;
ON INIT ( aObjVar( oBtnSiguiente, nWnd ):SetFocus(), aObjVar( oDlg, nWnd ):Move( 0, 0 ), .f. );
VALID ( aObjVar( oWndChild, nWnd ):End(), .t. )
aObjVar( oWndChild, nWnd ):nWidth := aObjVar( oDlg, nWnd ):nWidth+7
aObjVar( oWndChild, nWnd ):nHeight := aObjVar( oDlg, nWnd ):nHeight+32
ACTIVATE WINDOW aObjVar( oWndChild, nWnd )
return nil
Gracias!