Page 2 of 2

Re: Problema con dialogos nowait

PostPosted: Mon Oct 24, 2016 9:15 pm
by artu01
Es NO MODAL

Re: Problema con dialogos nowait

PostPosted: Mon Oct 24, 2016 9:27 pm
by cnavarro
Por qué?

Re: Problema con dialogos nowait

PostPosted: Mon Oct 24, 2016 9:51 pm
by artu01
Funcion que es un browse no modal
Code: Select all  Expand view

FUNCTION Brwartic( nTipo, labre)
   LOCAL aRect, oBtn
   
   AbreDbf("ARTICULO", .T., .F. , , cPathDBFE, {"articulo"  }, "Articulos" ) )
   
   REDEFINE LISTBOX oBrw                                           ;
      FIELDS ARTICULO->Cod                                         ;
            ,ARTICULO->DesG                                        ;
            ,Transform(ARTICULO->Pv, "999.9999")                   ;
            ," "                                                   ;
      FIELDSIZES 70, 250,120, 90, 10                               ;
      HEADERS OemToAnsi("C¢digo")                                  ;
            ,OemToAnsi("Descripci¢n")                              ;
            ,"Precio S/."                                          ;
            ," "                                                   ;
      COLOR 0, RGB(192,210,192)                                    ;
      ID 5000 OF oDlg                                              ;
      UPDATE                                                       ;
      ACTION ChTag("ARTICULO", 1, oBrw)                            ;
            ,ChTag("ARTICULO", 2, oBrw)

   oBrw:aJustify  := { .F., .F.,.F., .T., .F. }

    oBrw:bKeyDown   := { |nKey| ProcMtn(nKey, nTipo) }
    oBrw:bLDblClick := { || ProcMtn( 13, nTipo )     }

   REDEFINE BUTTON oBtn ID ID_CANCEL OF oDlg ;
      ACTION (  oDlg:End()  ) CANCEL   // ==> boton salir, cierra el browse Ok
      oBtn:cTooltip := "Sale de la ventana"

   REDEFINE BUTTON oBtn ID ID_NEW OF oDlg    ;
      ACTION ( ProcMtn(VK_INSERT) )
      oBtn:cTooltip := "Ingresa un nuevo registro"

   REDEFINE BUTTON oBtn ID ID_CHANGE OF oDlg ;
      ACTION ( ProcMtn(VK_RETURN) )
      oBtn:cTooltip := "Modifica el registro"

   REDEFINE BUTTON oBtn ID ID_DEL OF oDlg    ;
      ACTION ( ProcMtn(VK_DELETE) )
      oBtn:cTooltip := "Borra el registro"

   IF nTipo <> 1
      REDEFINE BUTTON oBtn ID ID_ENTER OF oDlg  ;
         ACTION ( aValRet:={oDbfArt:Cod, oDbfArt:DESG, oDbfArt:uM}; //******Boton enter para que el usuario seleccione la fila que desea seleccinar
                 ,oDlg:End() ) CANCEL
         oBtn:cTooltip := "Selecciona un registro"    
   ENDIF

   ACTIVATE DIALOG oDlg CENTERED NOWAIT Valid(Cierra(( nOrd)))

RETURN ( aValRet ) // parece que en no modal ya no ejecuta esta sentencia, entonces como haria para regresar los valores de la fila seleccionada x el usuario?

Static Function Cierra(nOrd)
      CLOSE ARTICULO    
Return .t.
 


Rutina que invoca a la funcion de arriba que es no modal

Code: Select all  Expand view

       DEFINE DIALOG oDlgItem RESOURCE "DLG_item_guia" TITLE "Item" FONT oFontS

       REDEFINE GET oGet VAR carticu ID 101 OF oDlgItem       ; // el usuario presiona enter en blanco y me llama a la funcion valart
                PICTURE "@!"                                  ;      
                VALID ValArt(@cArticu, oDlgItem) UPDATE  
                IIF( lmodo, oGet:Enable(), oGet:Disable() )
...
...
...
       ACTIVATE DIALOG oDlgItem  
RETURN ( NIL )

static FUNCTION ValArt(cCod, oDlg)
  Local cDesCta, nRecAc, nRecDa, aDatos:={}
  local lok
   IF Empty(cCod)

      nRecAc:=ARTICULO->(IndexOrd())
       aDatos:=BRWARTIC(2,.F., @aDatos)  // llama al browse no modal pero no se detiene, se ejecuta toda la sentencias de brwartic y finaliza
     IF aDatos[1] <> Nil                             // cuando este mismo browse era modal si se detenia hasta que el usuario presionara alguna opcion: nuevo, modificar, eliminar    
         cCod:=aDatos[1]
         cDescri := aDatos[2]
      ENDIF
      Articulo->(DBSetOrder(nRecAc))
   EndIf

   IF !Empty(cCod)
      IF !Articulo->(DBSeek(cCod))
         MsgBox(2,"Codigo digitado NO existe")
      ENDIF
   ENDIF

   lok:= Articulo->(Found())
   if lok
      BuscaArt(cCod, oDlg)
    endif
RETURN ( lok )