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
2019-10-06 18_44_14-Form1.png (2.1 KiB) Exibido 3337 vezes
2019-10-06 19_12_54-Form1.png
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