Ayuda con wvgPushButton()

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Ruben Dario
Usuário Nível 3
Usuário Nível 3
Mensagens: 127
Registrado em: 14 Jun 2015 23:19
Localização: Colombia

Ayuda con wvgPushButton()

Mensagem 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") }  
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ayuda con wvgPushButton()

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ayuda con wvgPushButton()

Mensagem 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 ::
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ayuda con wvgPushButton()

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Ruben Dario
Usuário Nível 3
Usuário Nível 3
Mensagens: 127
Registrado em: 14 Jun 2015 23:19
Localização: Colombia

Ayuda con wvgPushButton()

Mensagem 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") }
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ayuda con wvgPushButton()

Mensagem por JoséQuintas »

Sem saber o que faz a rotina, ou o que tem na tela, fica impossível responder.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Ruben Dario
Usuário Nível 3
Usuário Nível 3
Mensagens: 127
Registrado em: 14 Jun 2015 23:19
Localização: Colombia

Ayuda con wvgPushButton()

Mensagem por Ruben Dario »

Saludos al Forum

Como Ejecuto esta Instruccion, no me funciona

cComExec := 'iif(::aContl[1]=1,::reg_nav0001("S0")," ")'
oThisButton:Activate := { || cComExec }
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ayuda con wvgPushButton()

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Ruben Dario
Usuário Nível 3
Usuário Nível 3
Mensagens: 127
Registrado em: 14 Jun 2015 23:19
Localização: Colombia

Ayuda con wvgPushButton()

Mensagem 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


Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Ayuda con wvgPushButton()

Mensagem 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 )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder