COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?

Mensagem 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 ??? :% :%
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?

Mensagem 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.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?

Mensagem 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.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?

Mensagem por asimoes »

2019-10-06 18_44_14-Form1.png
2019-10-06 18_44_14-Form1.png (2.1 KiB) Exibido 3347 vezes
2019-10-06 19_12_54-Form1.png
2019-10-06 19_12_54-Form1.png (2.22 KiB) Exibido 3346 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.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?

Mensagem 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.
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/
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?

Mensagem 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
:% :% :%
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?

Mensagem por asimoes »

Posta o código que a gente tenta resolver
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?

Mensagem 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 :)) :)) :))
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?

Mensagem por asimoes »

Trocar
Addfile por Addresource
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?

Mensagem 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
:{ :{ :{
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?

Mensagem 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.
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/
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

COMO MUDAR O TEXT E O BITMAP DO OWNERBUTTON?

Mensagem 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
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Responder