Página 1 de 1
COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?
Enviado: 26 Set 2019 11:53
por Fernando queiroz
Tenho o seguinte OWNERBUTTON
@ 207,104 OWNERBUTTON oOwnerbutton3 SIZE 63,30 ;
TEXT 'F1-SAIR' ;
COORDINATES 0, 15, 0, 0 ;
FONT HFont():Add( '',0,-11,400,,,) ;
BITMAP 'EXIT16BMP' FROM RESOURCE ;
COORDINATES 0, 1, 0, 0 ;
TOOLTIP 'Sai da Rotina / Finaliza Venda' ;
ON CLICK {|| FormVendas:oPhantom:SETFOCUS() ,IF(MEMVAR->w_vNF > 0.00 , PAGAMENTO_GRAFICO( ), oDlg:Close() ) }
E gostaria em tempo de Execução mudar o TEXT e o BITMAP
já tentei usando o REDEFINE mas não acontece nada
REDEFINE OWNERBUTTON oOwnerbutton3 OF FormVendas ID 1001 ;
TEXT 'F1-PAGAR' ;
BITMAP 'Dollar' FROM RESOURCE
Alguem teria uma dica de como fazer

:% :%
COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?
Enviado: 06 Out 2019 17:16
por asimoes
Usa
ThisForm:oButton:SetText("novo valor")
ThiForm:oBitmap:= HBitmap():AddFile('TESTE.BMP')
ThisForm:oButton:Refresh()
Não testei, mas o olhando o fonte da classe deve ser por ai.
COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?
Enviado: 06 Out 2019 18:31
por asimoes
Exemplo trocando o label e imagem de botão Ownerbutton em tempo de execução
Código: Selecionar todos
STATIC FUNCTION oButtonex1_onClick
THREAD STATIC aBit, nImg := 1
IF aBit = Nil
aBit := {"img001.jpg", "img002.jpg"}
nImg := 1
ENDIF
Thisform:oOwnerbutton1:Settext(StrZero(nImg,3)) //Troca o texto do botão
Thisform:OOwnerbutton1:oBitmap := HBitmap():AddFile(aBit[nImg])
Thisform:OOwnerbutton1:xb := 10 // alinha 10 pixel a esquerda do botão
Thisform:OOwnerbutton1:widthb := 24 //redimensiona a imagem do botão (largura)
Thisform:OOwnerbutton1:heightb := 24 //redimensiona a imagem do botão (altura)
Thisform:oOwnerbutton1:Refresh()
nImg ++
IF nImg > 2
nImg := 1
ENDIF
RETURN .T.
COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?
Enviado: 06 Out 2019 18:46
por asimoes

- 2019-10-06 18_44_14-Form1.png (2.1 KiB) Exibido 3337 vezes

- 2019-10-06 19_12_54-Form1.png (2.22 KiB) Exibido 3336 vezes
Código: Selecionar todos
STATIC FUNCTION oButtonex1_onClick
THREAD STATIC aBit, nImg := 1
IF aBit = Nil
aBit := {"img001.jpg", "img002.jpg"}
nImg := 1
ENDIF
Thisform:oOwnerbutton1:Settext(StrZero(nImg,3)) // Trocal label
Thisform:OOwnerbutton1:oBitmap := HBitmap():AddFile(aBit[nImg]) //Troca imagem
Thisform:OOwnerbutton1:xb := 10 //Ajuste posição Horizontal
Thisform:OOwnerbutton1:yb := -2 //Ajuste posição Vertical
Thisform:OOwnerbutton1:widthb := 24 // Ajuste largura
Thisform:OOwnerbutton1:heightb := 24 //Ajuste Altura
Thisform:OOwnerbutton1:lTransp := .T.
Thisform:oOwnerbutton1:Refresh()
nImg ++
IF nImg > 2
nImg := 1
ENDIF
RETURN .T.
COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?
Enviado: 06 Out 2019 19:18
por asimoes
Fica mais arrumado
Código: Selecionar todos
WITH OBJECT Thisform
:oOwnerbutton1:Settext(StrZero(nImg,3))
:OOwnerbutton1:oBitmap := HBitmap():AddFile(aBit[nImg])
:OOwnerbutton1:xb := 10
:OOwnerbutton1:yb := -2
:OOwnerbutton1:widthb := 24
:OOwnerbutton1:heightb := 24
:OOwnerbutton1:lTransp := .T.
:oOwnerbutton1:Refresh()
END
COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?
Enviado: 06 Out 2019 19:51
por JoséQuintas
Não sei dizer na hwgui, mas depende de como o button foi criado pra funcionar direito.
Pela API do Windows é só usar o SendMessage() com o handle da janela e a imagem/texto.
Mas se quando criou indicou que era texto, ou imagem... só vai aceitar isso: uma coisa ou outra.
COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?
Enviado: 06 Out 2019 21:58
por Fernando queiroz
infelizmente não funciona!!
somente se CLICAR NO BOTÃO que ele muda,
Quero que a troca ocorra por condição e nao por click
:% :% :%
COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?
Enviado: 06 Out 2019 22:14
por asimoes
Posta o código que a gente tenta resolver
COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?
Enviado: 06 Out 2019 22:15
por Fernando queiroz
CONSEGUI!!!!!
FormVendas:oOwnerbutton1:Settext("F1-Pagar") // Trocal label
FormVendas:OOwnerbutton1:oBitmap := HBitmap():AddFile("Cashregister") //Troca imagem
// FormVendas:OOwnerbutton1:xb := 10 //Ajuste posição Horizontal
// FormVendas:OOwnerbutton1:yb := -2 //Ajuste posição Vertical
// FormVendas:OOwnerbutton1:widthb := 24 // Ajuste largura
// FormVendas:OOwnerbutton1:heightb := 24 //Ajuste Altura
FormVendas:OOwnerbutton1:lTransp := .T.
FormVendas:oOwnerbutton1:Paint()
FormVendas:oOwnerbutton1:SETFOCUS()
FormVendas:oOwnerbutton1:refresh()
Só falta pegar o bitmap do resouce , não estou sabendo como fazer

)

)

)
COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?
Enviado: 06 Out 2019 22:18
por asimoes
Trocar
Addfile por Addresource
COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?
Enviado: 06 Out 2019 22:26
por Fernando queiroz
showwwwwww
Obrigado pela ajuda!!
o problema era que tinha de acrescentar
FormVendas:oOwnerbutton1:Paint()
FormVendas:oOwnerbutton1:SETFOCUS()
FormVendas:oOwnerbutton1:refresh()
pois sem isso ele só funciona com CLICK ou passando o mouse
:{ :{ :{
COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?
Enviado: 07 Out 2019 08:04
por JoséQuintas
Fernando queiroz escreveu:o problema era que tinha de acrescentar
FormVendas:oOwnerbutton1:Paint()
FormVendas:oOwnerbutton1:SETFOCUS()
FormVendas:oOwnerbutton1:refresh()
Só comentário:
esqueci do detalhe de "owner draw".
No controle padrão, quem repinta é o próprio Windows.
Mas no controle owner draw, é o próprio controle quem tem que repintar.
É isso que a chamada de : Paint() faz, o próprio button se repinta, e não o Windows.
Mas ela deveria ter sido chamada automaticamente ao trocar texto e/ou imagem e/ou no :refresh()
Talvez mais interessante ajustar a LIB, trocar o button:obitmap := por uma rotina SetGet.
Nada do outro mundo: uma função no lugar de atribuição direta, assim a função chamaria o Paint()/Refresh().
Só afetaria dentro do controle, método SetGet é justamente pra substituir a atribuição direta, sem precisar chamar como função/método.
COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?
Enviado: 07 Out 2019 10:30
por Fernando queiroz
JoséQuintas escreveu:Fernando queiroz escreveu:o problema era que tinha de acrescentar
FormVendas:oOwnerbutton1:Paint()
FormVendas:oOwnerbutton1:SETFOCUS()
FormVendas:oOwnerbutton1:refresh()
Só comentário:
esqueci do detalhe de "owner draw".
No controle padrão, quem repinta é o próprio Windows.
Mas no controle owner draw, é o próprio controle quem tem que repintar.
É isso que a chamada de : Paint() faz, o próprio button se repinta, e não o Windows.
Mas ela deveria ter sido chamada automaticamente ao trocar texto e/ou imagem e/ou no :refresh()
Talvez mais interessante ajustar a LIB, trocar o button:obitmap := por uma rotina SetGet.
Nada do outro mundo: uma função no lugar de atribuição direta, assim a função chamaria o Paint()/Refresh().
Só afetaria dentro do controle, método SetGet é justamente pra substituir a atribuição direta, sem precisar chamar como função/método.
Acho que não faz direto pois em alguns casos ela só muda quando pressionado, no meu caso queria que mudasse por condição
testei com REDEFINE deu certo mas com click do botão
com a dica do pessoal aconteceu a mesma coisa, depois acrescentei o PAINT() e REFRESH() ele mudava quando passava o mouse, enfim
com SETFOCUS() o danado mudouuuuuu :-Y :-Y :-Y :-Y