Manejo de Variables en Entorno MDI

Manejo de Variables en Entorno MDI

Postby leandro » Wed Sep 05, 2007 7:21 pm

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  Expand view
********************
*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  Expand view
********************
*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 dos casos, 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..
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1649
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Postby Antonio Linares » Wed Sep 05, 2007 7:46 pm

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
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41948
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Ok..

Postby leandro » Wed Sep 05, 2007 8:06 pm

Ok Antonio muchas gracias por la repuesta.. voy a probar y cualquier cosa vuelvo a molestar.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1649
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Postby R.F. » Wed Sep 05, 2007 9:58 pm

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] := .......
......
Saludos
R.F.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Enrico Maria Giordano, Google [Bot] and 52 guests