Page 1 of 1

Manejo de Variables en Entorno MDI

Posted: Wed Sep 05, 2007 7:21 pm
by leandro
Amigos y colegas del foro tengan buen dia, en este momento me encuentro tratando de pasar mi sistema de entorno SDI a entorno MDI, pero me han dado problemas el manejo de las variables.. aqui pongo el codigo de la creación de un dialogo en entorno SDI el cual me funciona perfectamente.

Code: Select all

********************
*Catalogo de Medidas
********************
PROC pMedida()

vgraba:=.f.
oCuadro:="oMedida"
oM1vc1:="Código"
oM1lc1:={"Código","Nombre"}
vOrden:="m_Medida"
oC1vg1:=space(100)

oTbMed := oLamcla:oServer:Query("SELECT * from "+oLamcla:tMedi+" ORDER BY "+alltrim(vOrden), .f. )

DEFINE DIALOG oCuadro RESOURCE "orCiudad" OF oWinp ICON "#8001"

 REDEFINE BTNBMP Btn_Agre ID 4007 OF oCuadro RESOURCE "Bagre"  TOOLTIP oLamcla:mTagr NOBORDER ACTION (vgraba:=.t.,oLamcla:autoriza(29))
 REDEFINE BTNBMP Btn_Modi ID 4001 OF oCuadro RESOURCE "Bmodi"  TOOLTIP oLamcla:mTmod NOBORDER ACTION (vgraba:=.f.,oLamcla:autoriza(30))
 REDEFINE BTNBMP Btn_Borr ID 4002 OF oCuadro RESOURCE "Bborr"  TOOLTIP oLamcla:mTbor NOBORDER ACTION oLamcla:autoriza(31)
 REDEFINE BTNBMP Btn_Imor ID 4004 OF oCuadro RESOURCE "Bimpr"  TOOLTIP oLamcla:mTimp NOBORDER ACTION oLamcla:autoriza(32)
 REDEFINE BTNBMP Btn_Sali ID 4006 OF oCuadro RESOURCE "Bsalid" TOOLTIP oLamcla:mTsal NOBORDER ACTION oCuadro:end()
 REDEFINE BTNBMP Btn_Limp ID 4010 OF oCuadro RESOURCE "BLimpi" TOOLTIP oLamcla:mTfil NOBORDER ACTION (oC1vg1:=space(100),pArMedi())

 REDEFINE COMBOBOX oM1oc1 VAR oM1vc1 PROMPTS oM1lc1 ID 4003 OF oCuadro UPDATE ;
        ON CHANGE(IF(oM1vc1="Código",vOrden:="m_Medida",vOrden:="m_Nombre"),(pArMedi()))

 REDEFINE GET oC1og1 VAR oC1vg1 ID 4009 OF oCuadro UPDATE VALID(pBusMed(),.T.)

 TXBrowse():lHeaders := .T.
 oTbMed:GoTop()

 oBrw := TXBrowse():New( oCuadro )
 WITH OBJECT oBrw
   :CreateHeader()
   MySetbrowse( oBrw,oTbMed )
   :nMarqueeStyle       := MARQSTYLE_HIGHLROW
   :nColDividerStyle    := LINESTYLE_RAISED
   :bClrSelFocus        := {|| { CLR_WHITE, RGB(24, 116, 205) } }
   oBrw:blDblClick          := {|| vgraba:=.f.,oLamcla:autoriza(30)}
   oBrw:bKeyDown            := {|nKey|iif(nKey == 13,(vgraba:=.f.,oLamcla:autoriza(30)),(" "))}
   :nHeaderLines        := 1
   :lColDividerComplete := .t.
   :lRecordSelector     := .t.
   :SetColor(CLR_BLACK, RGB(255,255,235))
   :bClrStd := {|| IF( (oTbMed:Recno()%2)==0,{CLR_BLACK,oLamcla:cClr2},{CLR_BLACK,oLamcla:cClr1} ) }

   WITH OBJECT :AddCol()
     :cHeader       := "Código"
     :bStrData      := GenCB(oTbMed,1)
     :nHeadStrAlign := AL_LEFT
     :nDataStrAlign := AL_LEFT
     :nWidth        := 80
   END

   WITH OBJECT :AddCol()
     :cHeader       := "Nombre"
     :bStrData      := GenCB(oTbMed,2)
     :nHeadStrAlign := AL_LEFT
     :nDataStrAlign := AL_LEFT
     :nWidth        := 225
   END

   WITH OBJECT :AddCol()
     :cHeader       := "Sigla"
     :bStrData      := GenCB(oTbMed,3)
     :nHeadStrAlign := AL_LEFT
     :nDataStrAlign := AL_LEFT
     :nWidth        := 65
   END

   :CreateFromResource( 102 )
  END
 oCuadro:cTitle := "Tabla de Medidas"

ACTIVATE DIALOG oCuadro CENTERED
oTbMed:End()
En entorno MDI

Code: Select all

********************
*Catalogo de Medidas
********************
PROC pMedida()

vgraba:=.f.
oM1vc1:="Código"
oM1lc1:={"Código","Nombre"}
vOrden:="m_Medida"
oC1vg1:=space(100)

oLamcla:oTbMed := oLamcla:oServer:Query("SELECT * from "+oLamcla:tMedi+" ORDER BY "+alltrim(vOrden), .f. )

DEFINE WINDOW oWndChild MDICHILD OF oWnd FROM 3,3 TO 6,6 COLOR "N/W" nomaximize border none ICON "#8009"
  //oWndChild:bGotFocus  = { || oCuadro:SetFocus() }

  DEFINE DIALOG oCuadro RESOURCE "orCiudad" OF oWndChild

   REDEFINE BTNBMP Btn_Agre ID 4007 OF oCuadro RESOURCE "Bagre"  TOOLTIP oLamcla:mTagr NOBORDER ACTION (vgraba:=.t.,oLamcla:autoriza(29))
   REDEFINE BTNBMP Btn_Modi ID 4001 OF oCuadro RESOURCE "Bmodi"  TOOLTIP oLamcla:mTmod NOBORDER ACTION (vgraba:=.f.,oLamcla:autoriza(30))
   REDEFINE BTNBMP Btn_Borr ID 4002 OF oCuadro RESOURCE "Bborr"  TOOLTIP oLamcla:mTbor NOBORDER ACTION oLamcla:autoriza(31)
   REDEFINE BTNBMP Btn_Imor ID 4004 OF oCuadro RESOURCE "Bimpr"  TOOLTIP oLamcla:mTimp NOBORDER ACTION oLamcla:autoriza(32)
   REDEFINE BTNBMP Btn_Sali ID 4006 OF oCuadro RESOURCE "Bsalid" TOOLTIP oLamcla:mTsal NOBORDER ACTION oCuadro:end()
   REDEFINE BTNBMP Btn_Limp ID 4010 OF oCuadro RESOURCE "BLimpi" TOOLTIP oLamcla:mTfil NOBORDER ACTION (oC1vg1:=space(100),pArMedi())

   REDEFINE COMBOBOX oM1oc1 VAR oM1vc1 PROMPTS oM1lc1 ID 4003 OF oCuadro UPDATE ;
          ON CHANGE(IF(oM1vc1="Código",vOrden:="m_Medida",vOrden:="m_Nombre"),(pArMedi()))

   REDEFINE GET oC1og1 VAR oC1vg1 ID 4009 OF oCuadro UPDATE VALID(pBusMed(),.T.)

   TXBrowse():lHeaders := .T.
   oLamcla:oTbMed:GoTop()

   oBrw := TXBrowse():New( oCuadro )
   WITH OBJECT oBrw
     :CreateHeader()
     MySetbrowse( oBrw,oLamcla:oTbMed )
     :nMarqueeStyle       := MARQSTYLE_HIGHLROW
     :nColDividerStyle    := LINESTYLE_RAISED
     :bClrSelFocus        := {|| { CLR_WHITE, RGB(24, 116, 205) } }
     oBrw:blDblClick          := {|| vgraba:=.f.,oLamcla:autoriza(30)}
     oBrw:bKeyDown            := {|nKey|iif(nKey == 13,(vgraba:=.f.,oLamcla:autoriza(30)),(" "))}
     :nHeaderLines        := 1
     :lColDividerComplete := .t.
     :lRecordSelector     := .t.
     :SetColor(CLR_BLACK, RGB(255,255,235))
     :bClrStd := {|| IF( (oLamcla:oTbMed:Recno()%2)==0,{CLR_BLACK,oLamcla:cClr2},{CLR_BLACK,oLamcla:cClr1} ) }

     WITH OBJECT :AddCol()
       :cHeader       := "Código"
       :bStrData      := GenCB(oLamcla:oTbMed,1)
       :nHeadStrAlign := AL_LEFT
       :nDataStrAlign := AL_LEFT
       :nWidth        := 80
     END

     WITH OBJECT :AddCol()
       :cHeader       := "Nombre"
       :bStrData      := GenCB(oLamcla:oTbMed,2)
       :nHeadStrAlign := AL_LEFT
       :nDataStrAlign := AL_LEFT
       :nWidth        := 225
     END

     WITH OBJECT :AddCol()
       :cHeader       := "Sigla"
       :bStrData      := GenCB(oLamcla:oTbMed,3)
       :nHeadStrAlign := AL_LEFT
       :nDataStrAlign := AL_LEFT
       :nWidth        := 65
     END

     :CreateFromResource( 102 )
    END

  ACTIVATE DIALOG oCuadro NOWAIT CENTERED ON INIT oCuadro:Move( 0, 0 ) VALID (oWndChild:End(), .t. )

  oWndChild:nWidth := oCuadro:nWidth+7
  oWndChild:nHeight := oCuadro:nHeight+32

  oWndChild:cTitle:="Tabla de Medidas"

ACTIVATE WINDOW oWndChild ON INIT oWnd:paint()
oLamcla:oTbMed:End()
La "ventana" se dibuja perfectamente para los _, pero al momento que el GET (oC1og1) toma el foco me sale el ERROR variable oC1vg1 no existe, aun estando definida al inicio de la funcion.

Alguien me puede ayudar..

Posted: Wed Sep 05, 2007 7:46 pm
by Antonio Linares
Leandro,

Una ventana MDI hija no es MODAL, es decir, la ejecución de la aplicación no se detiene al hacer ACTIVATE WINDOW, por eso la ejecución sigue y sales de la función en donde has declarado esas variables.

Tendrás que hacer esas variables static ó bien crear una clase que contenga todos esos valores que usas

Ok..

Posted: Wed Sep 05, 2007 8:06 pm
by leandro
Ok Antonio muchas gracias por la repuesta.. voy a probar y cualquier cosa vuelvo a molestar.

Posted: Wed Sep 05, 2007 9:58 pm
by R.F.
yo lo que hago para evitarme molestias es utilizar la data CARGO de la ventana MDICHILD, ahi pongo mis variables dentro de un arreglo:

oWndChil:Cargo := {}
oWndChild: Cargo [1] := lo que sea
oWndChild:Cargo[2] := .......
......