USO DE DIALOGOS NOMODALES

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

USO DE DIALOGOS NOMODALES

Post by Miguel Salas »

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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: USO DE DIALOGOS NOMODALES

Post by Antonio Linares »

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
Miguel Salas
Posts: 132
Joined: Sun Oct 23, 2005 4:09 pm
Location: Pánuco,Ver. México

Re: USO DE DIALOGOS NOMODALES

Post by Miguel Salas »

Gracias Antonio.

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

saludos
artu01
Posts: 306
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: USO DE DIALOGOS NOMODALES

Post by artu01 »

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

    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

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
FiveWiDi
Posts: 910
Joined: Mon Oct 10, 2005 2:38 pm

Re: USO DE DIALOGOS NOMODALES

Post by FiveWiDi »

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

#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 19.06 + Harbour 3.2, BCC 7 Windows 10
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: USO DE DIALOGOS NOMODALES

Post by cnavarro »

En mi opinión deberías utilizar MDICHILDs en lugar de DIALOGs NOWAIT
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Post Reply