Página 1 de 1

Se pueden realizar cambios en Pushbutton?

Enviado: 28 Mai 2020 23:31
por Adalberto
Maestros y amigos, buenas noches

Estoy trabajando con Harbour 3.2 y con botones, para eso utilizo una funcion como la que sigue:

Código: Selecionar todos

oThisButton:= wvgPushbutton():New()
oThisButton:Caption:= cImagen
oThisButton:Create(,, {-nFs, -nCi}, {-nFi, -nCd})
oThisButton:PointerFocus:= .F.
oThisButton:Border:= .F.
oThisButton:TooltipText:= cToolTip
oThisButton:Activate:= &cActivar.
RELEASE cActivar
RETURN(oThisButton)
Esta funcionando muy bien, ahora recurro a ustedes porque necesito cambiar la imagen y el texto del ToolTipText durante la ejecución y no encuentro la manera de hacerlo.

Por favor ayudenme con esto, les agradezco mucho.

Atte. Adalberto

Se pueden realizar cambios en Pushbutton?

Enviado: 29 Mai 2020 10:46
por JoséQuintas
Nunca precisei disso, e não sei dizer se dá pra fazer.

Mas talvez simplifique criar dois buttons, e usar a opção de Hide() e Show() - esconder/mostrar
Ou se o segundo button for temporário, quando não precisar mais usar o Destroy()

Se pueden realizar cambios en Pushbutton?

Enviado: 29 Mai 2020 11:20
por Adalberto
Maestro JoséQuintas, buenos días.

Muchas gracias por responder y ayudarme.

Creé un botón cuya acción es poner todo en modo oscuro (dark theme), y ahí me gustaría que los botones cambien por botones similares pero con fondo negro; era sólo eso: Presentación.
Esa idea de crear dos botones y mostrar/esconder me parece más práctica, me pondré a trabajar sobre eso.
De todas maneras y a modo de compartir con los amigos del foro voy a mostrar las ventanas con colores diferentes (todo en gráfico modo consola, así se dice?)
VentanaDarkTeme.jpg
VentanaDarkTeme.jpg (9.58 KiB) Exibido 1069 vezes

Se pueden realizar cambios en Pushbutton?

Enviado: 29 Mai 2020 12:11
por ANDRIL
Pois é seria uma coisa tão simples em diversas linguagens atualizar o texto/label de um botão, porém com a Gtwvg não conseguimos fazer.
Se tivesse esta simples opção nos objetos não precisávamos ficar repintando a tela direto. Não achei um método o wvg_pushbutton que fizesse isso com eficácia.
Se usar

Código: Selecionar todos

oThisButton:setCaption("botao2")
altera o texto do botão mas não se mantem.

Se pueden realizar cambios en Pushbutton?

Enviado: 29 Mai 2020 12:28
por JoséQuintas
ANDRIL escreveu:Pois é seria uma coisa tão simples em diversas linguagens atualizar o texto/label de um botão, porém com a Gtwvg não conseguimos fazer.
Se tivesse esta simples opção nos objetos não precisávamos ficar repintando a tela direto. Não achei um método o wvg_pushbutton que fizesse isso com eficácia.
Se usar
oThisButton:setCaption("botao2")
altera o texto do botão mas não se mantem.
Esquisito isso acontecer.
Olhei o fonte do pushbutton e ele faz igual qualquer outra linguagem, usando a API do Windows que troca o texto.

Código: Selecionar todos

METHOD WvgPushButton:setCaption( xCaption, cDll )
   __defaultNIL( @xCaption, ::caption )
   ...
   ::sendMessage( WIN_WM_SETTEXT, 0, ::caption )
Tá falando do pushbutton mesmo, ou do outro?
Porque chamou atenção o "ficar repintando".

Se pueden realizar cambios en Pushbutton?

Enviado: 29 Mai 2020 13:15
por JoséQuintas
Só curiosidade:

o pushbutton recebe por herança wvgwindow, em wnd.prg, já que o button também é uma janela Windows.

Código: Selecionar todos

CREATE CLASS WvgPushButton INHERIT WvgWindow
e wvgWindow, que é a janela, acrescenta a hWnd, o handle, dela própria, pra chamar a API do Windows.

Código: Selecionar todos

METHOD WvgWindow:sendMessage( nMessage, nlParam, nwParam )
   RETURN wapi_SendMessage( ::hWnd, nMessage, nlParam, nwParam )
igual qualquer lib gráfica que usa API do Windows.
É dessa parte que eu gosto, e que teria futuro, seja pra uso da GTWVG ou pra uso de outras LIBs... mas fazendo parte do Harbour.

Se pueden realizar cambios en Pushbutton?

Enviado: 29 Mai 2020 14:32
por ANDRIL
José, quando testei criei o botão dentro de uma rotina que uso DBEDIT. O botão já estava criado antes de entrar nela rotina. No Dbedit usava o F1 para mudar o texto com oThisButton:setCaption("botao2") e mudava. Quando apertava setas para navegar no dbedit o texto voltava ao anterior, como se tivesse um restscreen que não havia.

Agora fiz um outro teste fora deste Dbedit e permaneceu o texto que é o normal. Mistério! Uso texto puro nestas telas nada gráfico.
Menos mau que agora sei que de uma certa forma esta ok.

Aproveitando, teria como alterarmos o tamanho do texto do botão e o background?

Se pueden realizar cambios en Pushbutton?

Enviado: 29 Mai 2020 15:52
por JoséQuintas
Será que testou o wvgPushbutton? ou o wvt_pushbutton?

Se não me engano, isso dependeria da janela DIALOG, mas na DIALOG não permite @say/@get
Acabei nunca pesquisando.
Meu button NÃO é o original, e altero o tamanho da imagem. Dependendo do tamanho da imagem, sobra menos espaço pra texto, por isso redimensionar automático é interessante.

Parece algo complicado, mas é relativamente simples.
Antes de carregar a imagem, vejo altura e largura, e carrego a imagem com algo do tipo altura - fontsize
é esse tipo de cálculo que não funcionava na gtwvg do harbour 3.2, mas funciona no harbour 3.4.

Se pueden realizar cambios en Pushbutton?

Enviado: 29 Mai 2020 15:55
por JoséQuintas
Tem coisas que tem a ver com o Windows.
O button da GTWVG é o padrão do Windows.
Se lá na documentação de API do Windows disser que pode alterar a cor de fundo, aí podemos alterar.
Caso contrário, só usando button personalizado, que é o que as LIBs normalmente fazem, criam seu próprio button com mais opções.

Se pueden realizar cambios en Pushbutton?

Enviado: 29 Mai 2020 18:38
por Adalberto
Maestro JoséQuintas, buenas tardes

Creé dos botones como usted propuso y dependiendo de si es modo oscuro o full color oculto uno y muestro el otro, todo esta funcionando muy bonito.

Muchas gracias por ayudarme, Bendiciones para usted y para todos los amigos del foro.

Abrazos, Adalberto

Se pueden realizar cambios en Pushbutton?

Enviado: 29 Mai 2020 21:07
por Fernando queiroz
NA HWGUI eu fiz assim

oDlg:oOwnerbutton1:Settext("F1-SAIR") // Trocal label
oDlg:OOwnerbutton1:oBitmap := HBitmap():Addresource("EXIT16BMP") //Troca imagem
oDlg:OOwnerbutton1:lTransp := .T.
oDlg:oOwnerbutton1:Paint()

e esta funcionando ok