Página 1 de 1

Ayuda con wvgPushButton()

Enviado: 02 Jan 2020 17:40
por Ruben Dario
Saludos
He creado ester Boton
El evento si funciona, lo que hace es que no me refresca el registro en el formulario. Solamente lo hace cuando retiro el Puntero de Maus de los botones.

Código: Selecionar todos

         oThisButton := wvgPushButton():New(::oCrt)   
         oThisButton:Border       := .T.
         oThisButton:PointerFocus := .f.
         oThisButton:Caption := IconFromCaption( acButtons[ nCont ], @cToolTip )
         oThisButton:Create( , , { -1, iif( nCol == 0, -0.1, -nCol ) }, { -3, -5 } )  // { -1, iif( nCol == 0, -0.1, -nCol ) }, { -3, -5 } )
         oThisButton:ToolTipText := cToolTip  
         oThisButton:Activate :=  { || ::reg_nav0001("S0") }  

Ayuda con wvgPushButton()

Enviado: 02 Jan 2020 19:33
por JoséQuintas
Ruben Dario escreveu:El evento si funciona, lo que hace es que no me refresca el registro en el formulario. Solamente lo hace cuando retiro el Puntero de Maus de los botones.
Em GTWVG não existe... formulário... isso é coisa de GUI.

Ou... ao que está se referindo como formulário? GETs? GETs NÃO são atualizados automaticamente no Clipper/Harbour.

Geralmente faço assim:

Código: Selecionar todos

DO WHILE .T.
    Formulario()
   // menu com botões, exemplo: buttonSair:Activate := { || hb_Keyput( K_ESC ) }
   nKey := Inkey(0)
   DO CASE
   CASE nKey == K_ESC; EXIT
   CASE nKey == K_HOME; GOTO TOP
   CASE nKey == K_END; GOTO BOTTOM
   CASE nKey == K_PGDN; SKIP
   CASE nKey == K_PGUP; SKIP -1
   CASE nKey == K_INSERT; Formulario( .T., "I" )
   CASE nKey == K_ENTER; Formulario( .T., 'A" )
   CASE nKey == K_DEL; IF Mensagem( "Excluir?", "S,N" ) == "S"; DELETE; ENDIF
   ENDCASE
ENDDO

FUNCTION Formulario( lEdit, cOption )

hb_Default( @lEdit, .F. )
hb_Default( @cOption, "C" )

@ 1, 0 SAY "hjkhsfd"  GET a
@ 2, 0 SAY "sdfsdfddf" GET b
IF ! lEdit .OR. cOption == "C"
   CLEAR GETS
   RETURN NIL
ENDIF
READ
IF LastKey() == K_ESC
   RETURN NIL
ENDIF
IF cOptions == "I"
   APPEND BLANK
ENDIF
REPLACE field->x WITH a, field->y WITH b
RETURN NIL
Ou... nos botões associar rotina completa

no pushbutton primeiro: GOTO TOP; Formulario() e talvez um crt:refresh()
no pushbutton ultimo: GOTO BOTTOM; Formulario() e talvez um crt:refresh()
e assim por diante.

Se fosse GUI.....
Então teria o disable de botões, e enable de digitações, mas não é o caso.

Ayuda con wvgPushButton()

Enviado: 02 Jan 2020 19:38
por JoséQuintas
Não se esqueça que pode usar o WITH OBJECT

Código: Selecionar todos

oThisButton := wvgPushButton():New(::oCrt)   
WITH OBJECT oThisButton
   :Border       := .T.
   :PointerFocus := .f.
   :Caption := IconFromCaption( acButtons[ nCont ], @cToolTip )
   :Create( , , { -1, iif( nCol == 0, -0.1, -nCol ) }, { -3, -5 } )  // { -1, iif( nCol == 0, -0.1, -nCol ) }, { -3, -5 } )
   :ToolTipText := cToolTip  
   :Activate :=  { || ::reg_nav0001("S0") }  
ENDWITH
É questão de se acostumar, mas com certeza no início confunde quando usar : ou ::

Ayuda con wvgPushButton()

Enviado: 02 Jan 2020 19:43
por JoséQuintas
Só mais um detalhe:

Código: Selecionar todos

oThisButton:Caption := IconFromCaption( acButtons[ nCont ], @cToolTip )
Esse IconFromCaption é porque tenho os botões em um array, e seleciono o ícone conforme o nome.
Não sei se está usando o mesmo esquema, ou se apenas manteve porque copiou fonte.
Se não está usando um array, pode usar IconFromCaption( "BOTAOSAIR", @cToolTip ), e na rotina IconFromCaption atribui o ícone/tooltip conforme o nome recebido.
É bom pra manter TODAS as telas do aplicativo com mesmo ícone pra mesma função e/ou pra gerenciar num lugar só as imagens.

Ayuda con wvgPushButton()

Enviado: 02 Jan 2020 23:07
por Ruben Dario
Gracias me Funciono

Otra duda que tengo
esta Instruccion
@ POS,cpos+46 GET lEditar PUSHBUTTON;
CAPTION "&Edit" STATE { || ::reg_nav0001("M0") } WHEN ::aContl[1]=0 ;
message "Edita Registro" ; //FOCUS { || ruben1("E") }
COLOR if(::jlopm1,::cBtnClr,::cBtnCl1) //colorset(C_MENU_SELECTED,.T.)

No se si esta condicion se puede colocar ::reg_nav0001("S0") } WHEN ::aContl[1]=0 en el :Activate de wvgPushButton()

oThisButton:Activate := { || ::reg_nav0001("S0") }

Ayuda con wvgPushButton()

Enviado: 03 Jan 2020 12:05
por JoséQuintas
Sem saber o que faz a rotina, ou o que tem na tela, fica impossível responder.

Ayuda con wvgPushButton()

Enviado: 11 Jan 2020 18:16
por Ruben Dario
Saludos al Forum

Como Ejecuto esta Instruccion, no me funciona

cComExec := 'iif(::aContl[1]=1,::reg_nav0001("S0")," ")'
oThisButton:Activate := { || cComExec }

Ayuda con wvgPushButton()

Enviado: 11 Jan 2020 19:20
por JoséQuintas
Ruben Dario escreveu:Como Ejecuto esta Instruccion, no me funciona
cComExec := 'iif(::aContl[1]=1,::reg_nav0001("S0")," ")'
oThisButton:Activate := { || cComExec }
Talvez assim:

Código: Selecionar todos

bCode := { || iif( ::aCont[ 1 ] == 1, ::reg_Nav0001( "SO" ), NIL ) }
OThisButton:Activate := bCode

Ayuda con wvgPushButton()

Enviado: 29 Jan 2020 19:38
por Ruben Dario
Saludos

Si me funciona de esta manera ,
Hay un DO donde lo ejecuta en forma infinita, la unica manera que lo controla es el
nKey := Inkey(0)
::cOption := Chr( nKey )

pero si coloco el Key := Inkey(0)
cuando lo ejecuto solamente se hace ejecto cuando muevo el puntero de maus.
si lo quito Key := Inkey(0) funciona, el problema es que ejecuta el siglo de DO.

Código: Selecionar todos

      nCol := cpos+1  //nCol := 1
      FOR nCont = 1 TO Len( ::acButtons ) 
       //msginfo(::acButtons[ nCont ]) 
         oThisButton := wvgPushButton():New()
         oThisButton:PointerFocus := .f.
         oThisButton:Caption := ::IconFromCapt( ::acButtons[ nCont ], @cComExec,  @cToolTip) //oThisButton:Caption := IconFromCaption( ::acButtons[ nCont ], @cToolTip )
         //oThisButton:Create( , , { -1, iif( nCol == 0, -0.1, -nCol ) }, { -3, -5 } )  // { -1, iif( nCol == 0, -0.1, -nCol ) }, { -3, -5 } ) 
         oThisButton:Create( , , { -(pos-0.8), iif( nCol == 0, -0.1, -nCol ) }, { -2, -4 } )
         oThisButton:ToolTipText := cToolTip  
        cComExec := { || iif(::aContl[1]=0,::reg_nav0001("S0")," ") }  
         oThisButton:Activate :=  cComExec   
            
         Aadd( ::aGuiButtons, oThisButton )
         nCol += 5
      NEXT
      ::GuiShow()
      RETURN NIL


METHOD GUISelect()
      LOCAL nKey
      
      nKey := Inkey(0)  
      ::cOption := Chr( nKey )  
.......

      RETURN NIL



Ayuda con wvgPushButton()

Enviado: 29 Jan 2020 19:47
por JoséQuintas
Ruben Dario escreveu:Si me funciona de esta manera ,
Hay un DO donde lo ejecuta en forma infinita, la unica manera que lo controla es el
nKey := Inkey(0)
::cOption := Chr( nKey )
pero si coloco el Key := Inkey(0)
cuando lo ejecuto solamente se hace ejecto cuando muevo el puntero de maus.
si lo quito Key := Inkey(0) funciona, el problema es que ejecuta el siglo de DO.
Talvez mais simples agrupar tudo na mesma maneira e usar Inkey(0) sempre.

Código: Selecionar todos

DO WHILE .T.
   // tela/botões
   Inkey(0)
   DO CASE
   CASE nKey == KeyButtom
      IF ::aCont1[ 1 ] := 0
        ::Reg_Nav001( "SO" )
    ENDIF
   ENDCASE
Sem conhecer a rotina completa, fica difícil imaginar o que pode estar acontecendo.
Se puder fazer um fonte simples mostrando o problema, podemos verificar qual a melhor saída.

Importante:
Se configurar para o Inkey() detectar também movimento do mouse, isso atrapalha, e geralmente não precisa disso.

SET EVENTMASK TO INKEY_ALL - INKEY_MOVE
nKey := Inkey( 0, INKEY_ALL - INKEY_MOVE )