Página 1 de 2

Customizar mensagens advertencias ex: MsfInfo, MsgStop, etc.

Enviado: 15 Ago 2019 13:15
por lwinter
Boa tarde,

Alguem poderia me dizer se tem uma forma de customizar a aparência das telas das funções abaixo:
MsgInfo, MsgStop, MsgYesNo, MSGEXCLAMATION
Eu gostaria de alterar a fonte, cor de fundo e texto tanto do painel quanto dos botões.
É possível? Caso afirmativo, teria como explicar como fazer?

Outra coisa estou compilando minha aplicação conforme linha abaixo do HBP mas ocorre o erro "undefined reference HB_FUN_MSGINFO" as demais funções funciona ok.
xhb.hbc
hbwin.hbc
hbct.hbc
gtwvg.hbc

Grato!!!

rgds,

Customizar mensagens advertencias ex: MsfInfo, MsgStop, etc.

Enviado: 15 Ago 2019 18:52
por JoséQuintas
Aqui eu uso, mas criei minhas próprias.
Se não me engano, também tem na HMG.

Na prática são a MessageBox() do Windows, apenas o ícone é que se altera.
No Harbour essa MessageBox() fica disponível na hbwin.

Nota: o nome das constantes pode variar conforme Harbour 3.2 ou 3.4

Código: Selecionar todos

FUNCTION MsgYesNo( cText )

   LOCAL lValue

   lValue := wapi_MessageBox( wvgSetAppWindow():hWnd, cText, "Confirmação", WIN_MB_YESNO + WIN_MB_ICONQUESTION + WIN_MB_DEFBUTTON2 ) == WIN_IDYES

   RETURN lValue

FUNCTION MsgExclamation( cText )

   wapi_MessageBox( wvgSetAppWindow():hWnd, cText, "Atenção", WIN_MB_ICONASTERISK )

   RETURN NIL

FUNCTION MsgWarning( cText )

   wapi_MessageBox( wvgSetAppWindow():hWnd, cText, "Atenção", WIN_MB_ICONEXCLAMATION )

   RETURN NIL

FUNCTION MsgStop( cText )

   wapi_MessageBox( wvgSetAppWindow():hWnd, cText, "Atenção", WIN_MB_ICONHAND )

   RETURN NIL
Se quiser diferente do Windows, só criando suas próprias rotinas, ou usando alguma que alguém tenha criado.

Customizar mensagens advertencias ex: MsfInfo, MsgStop, etc.

Enviado: 16 Ago 2019 13:30
por lwinter
Jose, consegui entender o conceito das mensagens. Mas não sei nem por onde começar para modificar minhas janelas. Teria como dar um exemplo ou apontar algum diretório do Harbour onde posso trabalhar?
Tentei verificar o fonte demowvg.prg mas ele precisa de threads e estou fugindo disso, hehehe...
Agradeceria muito se alguém pudesse me ajudar, inclusive colocarei o meu fonte final para todas degustarem.

obrigado.

rgds,

Customizar mensagens advertencias ex: MsfInfo, MsgStop, etc.

Enviado: 16 Ago 2019 14:41
por JoséQuintas
Me confundi.
É mensagens ou visual do aplicativo?

Customizar mensagens advertencias ex: MsfInfo, MsgStop, etc.

Enviado: 16 Ago 2019 14:49
por lwinter
Estou tenteando mudar a aparência da aplicação e por isso preciso mudar a aparência das mensagens. É possível?

Customizar mensagens advertencias ex: MsfInfo, MsgStop, etc.

Enviado: 16 Ago 2019 15:04
por JoséQuintas
Ué.. pode deixar os fontes preparados pra isso, e depois se concentra só no visual.

Código: Selecionar todos

IF MsgYesNo( "Exclui" )
   DELETE
ENDIF
No meu caso tenho minha rotina tradicional, e essas da API

Código: Selecionar todos

Mensagem( "Digite campos, ESC sai" )
Mensagem( "Sim ou Não", "S,N" )
Mensagem( "Sim ou não ou ESC", "S,N, 27" )
Mensagem( "Sim ou Nao", "S,N", 1, 1 )
MsgYesNo( "Sim ou não" )
Mensagem()
Na tradicional, os parâmetros adicionais indicam se tem beep, ou se são no centro da tela.
Se no seu aplicativo ainda não usa rotina de mensagem, pode começar por aí.
Depois, pode alterar a rotina para o visual que quiser, e já altera todo aplicativo de uma vez.

Customizar mensagens advertencias ex: MsfInfo, MsgStop, etc.

Enviado: 16 Ago 2019 15:09
por JoséQuintas
E no fonte anterior que postei, se não usar GTWVG é só verificar a função correspondente que retorne o handle da janela atual.
Se deixar sem nada funciona, mas não fica vinculada à janela atual, pode até ficar atrás da janela atual, por isso o handle é importante.

Código: Selecionar todos

 wapi_MessageBox( wvgSetAppWindow():hWnd, cText, "Atenção", WIN_MB_ICONASTERISK )
Se não me engano, hbwin tem equivalente a isso, pra retornar o hWnd da janela atual.
Dá uma testada e veja como fica.

Código: Selecionar todos

 wapi_MessageBox(  , cText, "Atenção" )
 wapi_MessageBox(  , cText, "Atenção", WIN_MB_ICONASTERISK )

Customizar mensagens advertencias ex: MsfInfo, MsgStop, etc.

Enviado: 16 Ago 2019 22:49
por JoséQuintas
Só pra deixar ilustrado....

Código: Selecionar todos

REQUEST HB_CODEPAGE_PTISO

#include "set.ch"

PROCEDURE Main

   Set( _SET_CODEPAGE, "PTISO" )
   SetMode(30,90)
   SetColor("W/B")
   CLS
   Mensagem( "Digite campos, ESC Sai" )
   Inkey(0)
   Mensagem()
   Inkey(0)
   Mensagem( "Sim ou Não", "S,N" )
   Mensagem( "Sim ou Não ou ESC", "S,N, 27" )
   Mensagem( "Sim ou Não", "S,N", 1, 1 )
   MsgYesNo( "Sim ou Não" )
   Mensagem( "dshfksdhdkh dkslhklh kh kh kh kh kh kh kh kj hk hk hk hk jh kh k hk hk hl h" + ;
      "kdskhdd fkhk hkhkj hkj hkj hkjh k hkh  hk hk hkj h", " 13" )
   Mensagem( "dshfksdhdkh dkslhklh kh kh kh kh kh kh kh kj hk hk hk hk jh kh k hk hk hl h" + ;
      "kdskhdd fkhk hkhkj hkj hkj hkjh k hkh  hk hk hkj h", " 13", 1, 1 )

   RETURN
mensagem1.png
mensagem1.png (11.68 KiB) Exibido 3816 vezes
mensagem2.png
mensagem2.png (7.01 KiB) Exibido 3816 vezes
mensagem3.png
mensagem3.png (10.61 KiB) Exibido 3816 vezes
mensagem5.png
mensagem5.png (9.98 KiB) Exibido 3816 vezes
mensagem6.png
mensagem7.png
mensagem7.png (11.19 KiB) Exibido 3816 vezes
mensagem8.png
É engraçado, mas a mensagem console está mais com a cara do Windows 10 do que a da API do Windows kkkkkk
A da API Windows parece velha kkkk

Customizar mensagens advertencias ex: MsfInfo, MsgStop, etc.

Enviado: 17 Ago 2019 19:14
por lwinter
Concordo com você Jose!
Este estilo chama-se flat design e é nele que estou me concentrando para fazer uma nova UI para console.
Vou criar uma nova função Alert ao estilo Flat com funcionalidade de mouse, e com alinhamento personalizado (esquerdo, direito, centralizado ou justificado). Tudo o que eu for desenvolvendo vou disponibilizar neste fórum.

rgds,

Customizar mensagens advertencias ex: MsfInfo, MsgStop, etc.

Enviado: 21 Ago 2019 19:51
por lwinter
Conforme prometido segue o meu fonte da minha função MsgAlert, similar ao Alert porem abre uma nova janela CRT por cima. Alem disso funciona com mudança de linha com o caracter ";" igual o alert mas a minha função pode justificar ou alinhar para a esquerda ou direita. Alem disso pode personalizar as cores dos botões. Eu deixei o padrão, vermelho e verde mas pode-se fazer com qualquer cor, basta alterar o fonte que esta bem simples.

Customizar mensagens advertencias ex: MsfInfo, MsgStop, etc.

Enviado: 22 Ago 2019 04:07
por lugab
Bom dia, Lwinter...
Faltou definir essa variavel
┌──────────────────────────────────────────────────────────────┐
│ Error BASE/1003 Variable does not exist: WIN_SW_RESTORE │
│ │
│ Quit Retry │
└──────────────────────────────────────────────────────────────┘

Customizar mensagens advertencias ex: MsfInfo, MsgStop, etc.

Enviado: 22 Ago 2019 04:59
por JoséQuintas
Talvez porque indicou LIBs e não HBC
gtwvg.hbc hbwin.hbc

Customizar mensagens advertencias ex: MsfInfo, MsgStop, etc.

Enviado: 22 Ago 2019 23:58
por Ana Mitoooo

Código: Selecionar todos

wvtwin.ch(287): #define SW_RESTORE         9
hbgtwvg.ch(143): #define HB_GTS_SW_RESTORE 9

Customizar mensagens advertencias ex: MsfInfo, MsgStop, etc.

Enviado: 24 Ago 2019 01:38
por JoséQuintas
Só pra curiosidade, a GTWVG.HBC

Código: Selecionar todos

description=GTWVG (an extension of GTWVT, win-only)
skip={!allwin}
incpaths=.
headers=hbgtwvg.ch wvgparts.ch wvtwin.ch
gt=${_HB_DYNPREF}${hb_name}${_HB_DYNSUFF}
libs=hbwin.hbc
gui=yes
mt=yes
skip={!allwin} significa que vai ser pulada se não for Windows
headers=hbgtwvg.ch wvgparts.ch wvtwin.ch são justamente os arquivos CH, que são adicionados no uso da GTWVG
libs=hbwin.hbc

Não concordo com essa parte, deveria ser só pelo #include mesmo.
É que se o aplicativo tratar GTWVG e outra LIB gráfica ao mesmo tempo, essa definição dentro do GTWVG.hbc vai atrapalhar, então melhor deixar manual.
O mesmo pra hbwin.hbc

Customizar mensagens advertencias ex: MsfInfo, MsgStop, etc.

Enviado: 27 Ago 2019 20:55
por lwinter
Me desculpe pela demora da resposta mas esta linha em questão não é necessária para a função MsgAlert. Se vocês tirarem vai funcionar normalmente. Eu herdei ela do exemplo da demowvg.prg e esqueci de tirar.