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.
USO DE DIALOGOS NOMODALES
-
- Posts: 132
- Joined: Sun Oct 23, 2005 4:09 pm
- Location: Pánuco,Ver. México
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: USO DE DIALOGOS NOMODALES
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
> 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
-
- Posts: 132
- Joined: Sun Oct 23, 2005 4:09 pm
- Location: Pánuco,Ver. México
Re: USO DE DIALOGOS NOMODALES
Gracias Antonio.
Ahora ¿se puede saber si ya está abierto un dialogo para únicamente posicionarse en el lugar de abrirlo de nuevo.?
saludos
Ahora ¿se puede saber si ya está abierto un dialogo para únicamente posicionarse en el lugar de abrirlo de nuevo.?
saludos
Re: USO DE DIALOGOS NOMODALES
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?
NOWAIT en el ACTIVATE DIALOG
Espero que los que saben mas sobre no modales nos puedan aclarar las dudas
gracias
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 no entiendo tu pregunta .... entiendo que los dialogos se muestran se abren normalmente solo que hay que poner el parametroMiguel 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
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
gracias
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
Re: USO DE DIALOGOS NOMODALES
Si, se puede.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
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
Carlos G.
FiveWin 19.06 + Harbour 3.2, BCC 7 Windows 10
Re: USO DE DIALOGOS NOMODALES
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.
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.