FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour pasar el foco desde una ventana nomodal a otra nomodal
Posts: 400
Joined: Fri May 11, 2007 08:20 PM
pasar el foco desde una ventana nomodal a otra nomodal
Posted: Sat May 27, 2017 12:31 AM
Gente:
no consigo pasar el foco a una ventana nomodal desde una ventana no modal, por mas que le pongo al segundo dialogo el SETFOCUS() en el Init no toma el foco
Code (fw): Select all Collapse
FUNCTION Guia()

   LOCAL oBtn
   LOCAL nKey
   LOCAL aDatos := {}

                                            
    DEFINE DIALOG oDlg RESOURCE "BRW_GUIA" TITLE "Notas de Pedido" //FONT oFontS

    REDEFINE SAY oSay PROMPT cString ID 111 OF oDlg        

    REDEFINE XBROWSE oBrw                                    ;
     COLUMNS "if(codusu='00',' ', FACBOL)","dtoc(FECHA)","NUMERO","MCODI->NG","IIF(MONEDA=='S', 'S/.', 'US$')",;
             "TOTBRUTO","TOTDSCTO","TOTSUB","TOTIGV","TOTAL" ;
            ALIAS "CABGUIA","MCODI"                          ;
      FIELDSIZES 30,68,54,200,30,85,60,60,60,85              ;
      HEADERS                               ;
             "F/B"                          ;
            ,"FECHA"                        ;
            ,"NUMERO"                       ;
            ,"CLIENTE"                      ;
            ,"MON."                         ;
            ,"T.BRUTO"                      ;
            ,"T.DSCTO"                      ;
            ,"SUBTOT"                       ;
            ,"IGV"                          ;
            ,"TOTAL"                        ;
      PICTURES nil,"99/99/9999",nil,nil, nil, '99,999,999.99', '999,999.99','999,999.99','999,999.99','99,999,999.99'  ;
      ID 4001 OF oDlg                       ;
      LINES CELL NOBORDER UPDATE

      oBrw:aJustify   := {.F.,.T.,.F.,.F.,.F.,.T.,.T.,.T.,.T.,.T.}
      oBrw:bKeyDown   := { |nKey| ProcMtn( nKey ) }
      oBrw:bLDblClick := { || ProcMtn( VK_RETURN ) }
      oBrw:nMarqueeStyle       := MARQSTYLE_HIGHLROW
            
      oBrw:l2007            := .f.
      oBrw:bClrHeader := {|| { CLR_HBLUE,RGB(232, 255, 232) } }
      oBrw:nStretchCol := STRETCHCOL_WIDEST
      
     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) )   ===> presiono boton y a va abrir el dialogo odlgdet
     oBtn:cTooltip := "Modifica el registro"
     REDEFINE BUTTON oBtn ID ID_DEL OF oDlg           ;
              ACTION ( ProcMtn(VK_DELETE) )
     oBtn:cTooltip := "Anula Nota de Pedido"

     REDEFINE BUTTON oBtn ID ID_CANCEL OF oDlg ;
         ACTION ( oDlg:End() ) CANCEL
         oBtn:cTooltip := "Sale de la ventana"
     ACTIVATE DIALOG oDlg NOWAIT ON INIT (oDlg:MOVE(50,220),oDlg:bLostFocus = { ||  oDlgDet:Setfocus() } )  ==>blostfocus lo utilizo para que el foco se quede en el dialogo oDlgDet pero no se activa el foco en ese dialogo
     
....
....
return nil

STATIC FUNCTION ProcMtn(nKey)
   LOCAL nRecAnt
   *- Evalua
   IF nKey>=96 .AND. nKey<=105
      nKey:=nKey-48
   ENDIF
   DO CASE
      CASE nKey == VK_RETURN
     oDlg:bLostFocus = { || oDlgDet:Setfocus() }  ==>le anticipo al primer dialog nomodal que se va quedar el foco en el dialogo odlgdet pero no lo hace
         oBrw:bLostFocus = { || oDlgDet:Setfocus() } ==>le anticipo al primer dialog nomodal que se va quedar el foco en el dialogo odlgdet pero no lo hace 
         NuevoDet(.F.)
      ....
      ....
   Encase
....
...
Return Nil

Static Function Nuevodet(lmodo)


   DEFINE DIALOG oDlgDet RESOURCE "DLG_CABGuia" TITLE "Nota de Pedido" FONT oFontS  ==>llamo a esta dialogo lo abre pero el foco se queda en la ventana que lo invoco

   REDEFINE GET oGet VAR dFecha ID 100 OF oDlgDet UPDATE ;                         
   VALID (iif(codusu="01" .or. codusu="02" .or. codusu="03" .or. codusu="04", oDlgDet:aControls[2]:oJump:=oDlgDet:aControls[4],),.T.)   

   REDEFINE GET oGet VAR cNumero ID 104 OF oDlgDet UPDATE  ;                      
   VALID( cNumero:=StrZero(val(cNumero),6), oDlgDet:update(), .t.)
   ....
   ....

   ACTIVATE DIALOG oDlgDet NOWAIT on init (oDlgDet:aControls[2]:Setfocus(), oBrwDet:Refresh() );
      valid (detguiat->(DBCloseArea()),.t.)
      
   cabguia->(DBSetOrder(4))
RETURN ( nil )

Gracias
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: pasar el foco desde una ventana nomodal a otra nomodal
Posted: Sat May 27, 2017 05:06 AM

La claúsula ACTIVATE DIALOG ... ON INIT debe devolver una expresión lógica .F. para poder cambiar el foco

Por ejemplo:
ACTIVATE DIALOG oDlg CENTERED ;
ON INIT ( oGet:SetFocus(), .F. )

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 400
Joined: Fri May 11, 2007 08:20 PM
Re: pasar el foco desde una ventana nomodal a otra nomodal
Posted: Sun May 28, 2017 11:35 PM

Gracias Maestro Antonio!
Funciono perfecto

fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql

Continue the discussion