FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Problema con dialogos nowait
Posts: 400
Joined: Fri May 11, 2007 08:20 PM
Re: Problema con dialogos nowait
Posted: Mon Oct 24, 2016 09:15 PM

Es NO MODAL

fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Problema con dialogos nowait
Posted: Mon Oct 24, 2016 09:27 PM

Por qué?

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
Posts: 400
Joined: Fri May 11, 2007 08:20 PM
Re: Problema con dialogos nowait
Posted: Mon Oct 24, 2016 09:51 PM
Funcion que es un browse no modal
Code (fw): Select all Collapse
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 (fw): Select all Collapse
       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 )
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql

Continue the discussion