USO DE DIALOGOS NOMODALES

USO DE DIALOGOS NOMODALES

Postby Miguel Salas » Fri Feb 17, 2017 4:16 am

Buenas noches a todos.

Nunca he usado dialogos NOWAIT (NO MODALES) pero ahora mi cliente me pide eso.

primer problema: abro todas mis tablas en mi modulo principal y las cierro hasta el salir de la aplicación.
así que al abrir módulos y mas módulos el área ( alias) de mi tabla es la misma en todos, por lo que al hacer algo en el segundo dialogo le "pega" al primero (digamos un filtro), así al regresar al primero ya no es el mismo contenido. Esto es obvio por que NO fue creado para trabajar así. Lo que se me ocurre es abrir mis segundos diálogos con otros áreas y alias para poder hacer esto. ¿o Algún otro consejo ?

desde ya saludos.
Miguel Salas
 
Posts: 132
Joined: Sun Oct 23, 2005 4:09 pm
Location: Pánuco,Ver. México

Re: USO DE DIALOGOS NOMODALES

Postby Antonio Linares » Fri Feb 17, 2017 7:39 am

Miguel,

> Lo que se me ocurre es abrir mis segundos diálogos con otros áreas y alias para poder hacer esto

Esa es la forma correcta de hacerlo
regards, saludos

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

Re: USO DE DIALOGOS NOMODALES

Postby Miguel Salas » Fri Feb 17, 2017 5:00 pm

Gracias Antonio.

Ahora ¿se puede saber si ya está abierto un dialogo para únicamente posicionarse en el lugar de abrirlo de nuevo.?

saludos
Miguel Salas
 
Posts: 132
Joined: Sun Oct 23, 2005 4:09 pm
Location: Pánuco,Ver. México

Re: USO DE DIALOGOS NOMODALES

Postby artu01 » Fri Feb 17, 2017 9:00 pm

Hola Miguel y Antonio
yo estoy terminando de hacer un sistema con dialogos no modales pero yo abro todo los archivos una sola vez al arrancar
el sistema y se cierra todos ellos cuando se sale del mismo... este es un trozo de mi codigo...no tendre problema
con ponerlo en red?
Code: Select all  Expand view

    IF !(VALTYPE( AbreDbf("ARTICULO", .T., .F. , , cPathDbf+cSubCarp, {"articulo"  }, "Articulos" ) ) == "O" .AND.     ;
         VALTYPE( AbreDbf("PATRON", .T., .F. , , cPathDbf+cSubCarp, {"PATRON"  }, "Patrones" ) ) == "O" .AND.          ;
         VALTYPE( AbreDbf("PERSONA" , .T., .F., , cPathDbf, {"PERSONA"}, "Personas") ) == "O" .AND.           ;
         VALTYPE( AbreDbf("IGV"     , .T., .F., , cPathDBF, , "I.G.V." ) ) == "O" .AND.                        ;
         VALTYPE( AbreDbf(cDbfGuia , .T., .F., "CABGUIA", cPathDbf, {cDbfGuia}, "Cabecera") ) == "O" .and.    ;
         VALTYPE( AbreDbf(cDbfDGuia , .T., .F., "DETGUIAD", cPathDbf, {cDbfDGuia}, "Movimientos de guias" ) ) == "O" .AND. ;
         VALTYPE( AbreDbf(cDbfParte , .T., .F., "CABPARTE", cPathDbf, {cDbfParte}, "Cabecera de Parte") ) == "O" .and.    ;
         VALTYPE( AbreDbf(cDbfdParte , .T., .F., "DETPARTE", cPathDbf, {cDbfdParte}, "Movimientos de partes" ) ) == "O" .AND. ;
         VALTYPE( AbreDbf(cDbfFac   , .T., .F., "FACTURA", cPathDbf, {cDbfFac}, "Facturas"   ) ) == "O"  .AND.;
         VALTYPE( AbreDbf("CONPAG" , .T., .F., , cPathDBF, {"CONPAG"}, "Condiciones de Pago" ) ) == "O" .AND.      ;
         VALTYPE( AbreDbf("MCODI"   , .T., .F., , cPathDbf+cSubCarp, {"MCODI"}, "Proveedores"         ) ) == "O" .AND. ;
         VALTYPE( AbreDbf("EMPRESA"  , .T., .F. , , cPathDBF, {"empresa"}, "Empresas"  ) ) == "O"  ;
        )
        lOk:=.f.
        Msgalert("El archivo esta siendo usado")
      IIF( Select("PERSONA" ) <> 0, PERSONA->( DBCLOSEAREA() ), )
      IIF( Select("IGV" ) <> 0, IGV->( DBCLOSEAREA() ), )
      IIF( Select(cDbfGuia) <> 0, (cDbfGuia)->( DBCLOSEAREA() ), )
      IIF( Select(cDbfDGuia) <> 0, (cDbfDGuia)->( DBCLOSEAREA() ), )
          IIF( Select(cDbfParte) <> 0, (cDbfParte)->( DBCLOSEAREA() ), )
          IIF( Select(cDbfdParte) <> 0, (cDbfdParte)->( DBCLOSEAREA() ), )
      IIF( Select("MCODI") <> 0, MCODI->( DBCLOSEAREA() ), )
      IIF( Select("ARTICULO") <> 0, ARTICULO->( DBCLOSEAREA() ), )
      IIF( Select("CONPAG") <> 0, CONPAG->( DBCLOSEAREA() ), )
      IIF( Select("EMPRESA"  ) <> 0, EMPRESA->( DBCLOSEAREA()  ), )
      IIF( Select("PATRON"  ) <> 0, PATRON->( DBCLOSEAREA()  ), )
      IIF( Select("Factura") <> 0, Factura->( DBCLOSEAREA() ), )
    ENDIF
Return lok
 

Miguel Salas wrote:Gracias Antonio.

Ahora ¿se puede saber si ya está abierto un dialogo para únicamente posicionarse en el lugar de abrirlo de nuevo.?

saludos

Miguel no entiendo tu pregunta .... entiendo que los dialogos se muestran se abren normalmente solo que hay que poner el parametro
NOWAIT en el ACTIVATE DIALOG
Code: Select all  Expand view

DEFINE DIALOG oDlg RESOURCE "BRW_GUIA" TITLE "Notas de Pedido"
....
// coloco los controles
.....
.....
ACTIVATE DIALOG oDlg NOWAIT
 

Espero que los que saben mas sobre no modales nos puedan aclarar las dudas
gracias
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 397
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: USO DE DIALOGOS NOMODALES

Postby FiveWiDi » Fri Feb 17, 2017 10:25 pm

Miguel Salas wrote:Gracias Antonio.

Ahora ¿se puede saber si ya está abierto un dialogo para únicamente posicionarse en el lugar de abrirlo de nuevo.?

saludos


Si, se puede.

Aquí te dejo una función que yo utilizo para abrir una MDICHILD y gestionar las DBF que utiliza y la propia apertura de la MDICHILD.
La MDICHILD respecto de las DBF se comporta igual que un DIALOG NOWAIT.
En este código, fíjate en la variable 'oSWnd', es una STATIC que contiene la MDICHILD; con ella hago un SHOW() o un HIDE(). Yo no cierro la MDICHILD hasta que salgo de la aplicación, sólo la escondo en vez de cerrarla durante la existencia de la aplicación.
La definición de la MDICHILD la tengo en un fichero aparte, de ahí que haga "#include 'Alumne01.FWD'".
Las variables que utilices en el DIALOG NOWAIT deberás declararlas como STATIC si cuando vuelves a llamar el DIALOG las quieres 'gestionar', pués si son LOCAL al acabar la función dejan de existir.

Code: Select all  Expand view

#include "AMPA32.ch"
#include "FWDCtrl.ch"

#xTranslate @<oDbf>:<(cField)>  =>  ( <oDbf>:nArea )-><cField>

STATIC aFamilia  := {}
STATIC aConcep   := {}

/* *********************************************************************************** */
/* *********************************************************************************** */
FUNCTION Alumne01( AMPAarra, nAccion, cCodiAlum, nGoRegi )

/* nAccion valdrà:
                   0 - No hace nada, simplemente un GoTo.
                   1 - Nova alta
                   2 - Modifica
                   3 - Borrar
*/


STATIC lExiste      := .F.
STATIC nEditando    := 0
STATIC oSWnd        := Nil
STATIC oSAfegir     := Nil
STATIC oSModi       := Nil
STATIC oSDel        := Nil
STATIC oSGo         := Nil
STATIC oSRecno      := Nil

STATIC oSTdbfAlumne := Nil

STATIC aHistoFiltre := {0}

Local lRespuesta  := .T.
Local aFiltro     := aFiltroFun( AMPAARRA )

#include "Alumne01.LCL"

Local aGets       := {}

Local oTdbfAlumne  := Nil

// Per a que aGetFamili cerqui en una DBF sense estar filtrada.
Local oTdbfAlumneFree := Nil

Local oTdbfFamili  := Nil
Local oTdbfPares_  := Nil
Local oTdbfdomici  := Nil
Local oTDbfConcep  := Nil
Local oTDbfRelcon  := Nil
Local oTDbfDatCur  := Nil

//Local aAsociar     := {}
Local aVeomasSiNo  := {}

uBusca      := Space(60)
nRecno      := 1

nEditando   := 0

/* Se chequea que exista una BD de trabajo, en caso contrario no se abre la ventana.
   -------------------------------------------------------------------------------*/

If AMPAarra[2][3][1][1] = ""

    lRespuesta  := .F.

  Else

    If lExiste

        WarningDemo2( oSTdbfAlumne:LastRec() )

        oSWnd:Show()
        oSWnd:Restore()
        lRefresca( AMPAarra, oSWnd )
        oSWnd:SetFocus()

      Else

        AMPAarra[4][1] := .F.

        oTdbfAlumne := oDbfClon( AMPAarra, "ALUMNE" )
        oTdbfAlumne:Setindex(4)   // per nom

        oTdbfAlumne:Gotop()


        oTdbfAlumneFree := oDbfClon( AMPAarra, "ALUMNE" )
        oTdbfAlumneFree:Setindex( 0 )   // per nom

        oTdbfFamili := oDbfClon( AMPAarra, "FAMILI" )

        oTdbfPares_ := oDbfClon( AMPAarra, "PARES_" )

        oTdbfdomici := oDbfClon( AMPAarra, "DOMICI" )

        oTDbfCONCEP := oDbfClon( AMPAarra, "CONCEP" )

        oTDbfRelcon := oDbfClon( AMPAarra, "RELCON" )

        oTDbfDatCur := oDbfClon( AMPAarra, "DATCUR" )

        oTdbfAlumne:Gotop():Load()

        #include "Alumne01.FWD"

        oSWnd        := oAlumne01
        oSRecno      := oRecno
        oSAfegir     := oAfegir
        oSModi       := oModi
        oSDel        := oDel
        oSGo         := oGo
        oSTdbfAlumne := oTdbfAlumne

        oAlumne01:bGotFocus  := { || ( uSetGoto( AMPAArra, oTdbfAlumne:CodiDomi, Nil, Nil, Nil, Nil, Nil, Nil, Nil ), ;
                                       oAlumne01:Move( 0, 0, (oAlumne01:nRight - oAlumne01:nLeft), (oAlumne01:nBottom - oAlumne01:nTop ), .T. ) ) }


        lGroupGetEdit( AMPAarra, oAlumne01, aGets )

        AADD( aGets, oAlumFacturab )
        AADD( aGets, oAlumlopd )
        AADD( aGets, oAlumDrIm )
        AADD( aGets, oALUMsoci )
        AADD( aGets, oCompDade )
      
       
        ROYes(AMPAarra, aGets)

        NullBrush( oAlumne01 )
        oIndiAlta:Hide()
        oIndiModi:Hide()
        oSayFlt:Hide()

        oTdbfAlumne:SetBrowse( oWBrowse, .F. )

        oLbFamilia:bKeyDown   := {| nKey , nflags | If( nKey = VK_RETURN .and. nEditando = 0, ;
                                                        ( Eval(oLbFamilia:bChange ), If( aFamilia[oLbFamilia:nAt][1] = "P", uGoto( AMPAArra, "P" ), uGoto( AMPAArra, "A" ) ) ), ;
                                                        KeyInoWnd( AMPAarra, oAlumne01, "A", ;
                                                                  {nEditando, oModi, oBusca, oWBrowse, oPrint, oAfegir, oDel, oASFiltre,;
                                                                   Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil }, ;
                                                                   nKey, nflags )    ;
                                                      ) }

        oLbConcep:bLDblClick := { |nRow,nCol,nKeyFlags| ( Eval(oLbConcep:bChange ), uGoto( AMPAArra, "R" ) ) }


        oLbConcep:bKeyDown   := {| nKey , nflags | If( nKey = VK_RETURN .and. nEditando = 0, ;
                                                        ( Eval(oLbConcep:bChange ), uGoto( AMPAArra, "R" ) ), ;
                                                        KeyInoWnd( AMPAarra, oAlumne01, "A", ;
                                                                  {nEditando, oModi, oBusca, oWBrowse, oPrint, oAfegir, oDel, oASFiltre,;
                                                                   Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil}, ;
                                                                   nKey, nflags )    ;
                                                      ) }


        ACTIVATE WINDOW oAlumne01 ;   //   MAXIMIZED ;   ON INIT oLBmnda:Set( AMPAarra[1][2][5][3] ) ;
            VALID ( If( nEditando == 0, ;
                        If( AMPAarra[4][1], ;
                            (lExiste := .F., oPrint:SetFocus(), lWndSalta( AMPAarra, Nil) ,;
                             laTDbfEnd( AMPAarra, { oTdbfAlumne, oTdbfPares_, oTdbfFamili, oTdbfDomici, oTDbfCONCEP, oTDbfRelcon, oTDbfDatCur, oTdbfAlumneFree } ), ;
                             oSTdbfAlumne := oSWnd := oSRecno := oSModi := oSDel := oSAfegir := oSGo := Nil, .T. ), ;
                            (lWndSalta( AMPAarra, oAlumne01 ) ,oSWnd:Hide(), .F. ) ;
                          ) , ;
                        (Eval( oSGo:bAction ), .F.) ;
                      ) ;
                  ) ;
          ON INIT ( oWBrowse:GoTop(), AutResiz( AMPAarra[1][2][3][3], AMPAarra[1][2][2][3], oAlumne01, 2 )) //FIVEWIDI

        oLbfamilia:SetArray( { "*", "*", "*", "*", "*" } )
        //oLbfamilia:bLine = { || { ArraFamilia[ oLbfamilia:nAt ][2] } }
        oLbfamilia:Refresh()
        oLbfamilia:GoTop()

        oLbConcep:SetArray( { "*", "*", "*", "*", "*", "*", "*", "*", "*" } )
        //oLbConcep:bLine = { || { ArraFamilia[ oLbConcep:nAt ][2] } }
        oLbConcep:Refresh()
        oLbConcep:GoTop()

        oTabs:SetOption( 3 )

        VeoMasSiNo( AMPAARRA, aVeoMasSiNo, Nil )

        oAlumne01:Hide()
        oAlumne01:Show()

        lExiste := .T.

    EndIf

    If ValType(cCodiAlum) = "C"
        If AllTrim(cCodiAlum) <> ""
            oSTdbfAlumne:KillFilter( .T. )
            //oSayFlt:Hide()
            oSRecno:Varput( nGoToAlum( AMPAarra, oSTdbfAlumne, cCodiAlum, .F., .T. ) )
        EndIf
    ElseIf nGoRegi > 0
        oSTdbfAlumne:KillFilter( .T. )
        //oSayFlt:Hide()
        oSRecno:Varput( nGoRegi )
    EndIf

    If nAccion = 0
        Eval( oSGo:bAction )
    ElseIf nAccion = 1
        Eval( oSAfegir:bAction )
    ElseIf nAccion = 2
        Eval( oSGo:bAction )
        Eval( oSModi:bAction )
    ElseIf nAccion = 3
        Eval( oSGo:bAction )
        Eval( oSDel:bAction )
    EndIf

EndIf

Return lRespuesta
/* *********************************************************************************** */
 
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1060
Joined: Mon Oct 10, 2005 2:38 pm

Re: USO DE DIALOGOS NOMODALES

Postby cnavarro » Sat Feb 18, 2017 5:37 pm

En mi opinión deberías utilizar MDICHILDs en lugar de DIALOGs NOWAIT
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 54 guests