Bom dia nobres professores(as)!
Não é o q eu queria, mas, como não consegui desvendar o mistério, fiz de forma tradicional o formulário Notificações que será exibido, tanto em console/WVG, quanto em 100% GUI/HMG.
- Tela Notificações Simples WVG/HMG
Como fiz?
1- usei um WVGCRT pra criar uma tela com informações que seriam usadas somente nela;
2- usei @ say pra preencher individualmente todas as 24 linhas da tela;
3- tem um inkey(0) impedindo o fechamento automático da tela, sem que o usuário possa ler ou decidir fechar;
4- para a pergunta, usei o seguinte código:
FUNCTION WVGSimNao( cText, cTitulo )
LOCAL lValue
hb_Default(@cTitulo, win_ansitoOem("Confirmação") )
lValue := wapi_MessageBox( wapi_GetActiveWindow(), cText, cTitulo, MB_YESNO + WIN_MB_ICONQUESTION + WIN_MB_DEFBUTTON1 ) == IDYES
RETURN lValue
A chamada a essa função é muito simples, que dispensa esclarecimentos.
Já que uso um hÃbrido de console/wvg com gui/hmg ao mesmo tempo num(a) único(a) sistema(thread), por que então não usei a MSGYESNO() da HMG que dispensa fazer essa manualmente?
Muito simples:
A MSGYESNO() da HMG é do tipo NÃO MODAL, ou seja, ela fica solta e se por ventura o usuário clicar noutro lugar da tela do windows, pode acontecer de não se ver a mensagem de confirmação automaticamente, tendo que ficar procurando-a num dos programas abertos;
Já a WVGSIMNAO() personalizada, é do tipo MODAL e enquanto a tela de NOTIFICAÇÕES não for fechada com o SIM ou NÃO ela ficará grudada nela.
5- Quando se sai da PERGUNTA, e, para poupar criação de uma nova tabela somente para salvar a resposta se SIM ou se NÃO, eu uso a regedit mesmo para salvar nas configurações do usuário. Com isso, se o usuário responder SIM, é criada um registro na REGEDIT (não importa qual o versão do win xp ou superior 32/64) por nome de NOTIFICACAO com o valor 1. Caso seja NÃO, o valor será 0;
5.1- A quem possa me indagar: "tome cuidado com a REGEDIT, pois ali é do Windows e vc pode danificar, e, blá blá blá, etc...". Em 1998, quando estava sendo lançado na primeira emissora de rádio do Brasil, o simples software PLAYLIST DIGITAL, feito 100% em C e C++, eu vi que o autor desse pequeno "sisteminha de fundo de quintal", usava esse recurso para impedir pirataria do seu software;
5.2- O software hoje, é tão pequeno, que ocupa 24% do mercado nacional de automação de emissoras de rádio (AM, FM, WEB, etc) do Brasil;
5.3- O Playlist Digital ocupa pouca parcela do mercado da América Latina. O segundo colocado no ranking no Brasil, detém 12% do mercado nacional de rádios rsrsrsrsrs. O "sisteminha" tem o dobro do 2º colocado, sendo o PRIMEIRO COLOCADO EM SOFTWARE para GESTÃO e AUTOMAÇÃO de músicas, comerciais, vinhetas, etc, de rádios no nosso paÃs;
5.4- Até hoje, o software usa o REGEDIT do Windows para evitar pirataria, além de outros novos recursos.
6- Com isso, toda vez que entrar no sistema é feita uma verificação na REGEDIT. Se o registro existir e for 0, não será mostrada a tela de NOTIFICAÇÕES, se for 1, será mostrada até o usuário decidir não vê-la novamente.
o Código é bem simples, veja:
if WVGSimNao( win_ansiToOem("Mostrar esta Notificação da próxima vez ?" )) = .t.
Regtmp:= win_regRead( cRootKey + "Notif")
if Regtmp = nil
Win_RegWrite ( cRootKey + "Notif", 1 , WIN_REG_DWORD )
else
Win_RegWrite ( cRootKey + "Notif", 1 , WIN_REG_DWORD )
endif
else
Regtmp:= win_regRead( cRootKey + "Notif")
if Regtmp = nil
Win_RegWrite ( cRootKey + "Notif", 0 , WIN_REG_DWORD )
else
Win_RegWrite ( cRootKey + "Notif", 0 , WIN_REG_DWORD )
endif
endif
6.1- A variável CROOTKEY contém previamente o local onde quero salvar/criar o registro dentro da REGEDIT;
6.2- a linha e suas seguintes IF REGTMP = NIL, é apenas por segurança, talvez, vc ache uma solução com um código mais enxuto;
7- Ao final da resposta SIM/NÃO, claro e não menos importante, mas, sendo obrigatório, senão a WVG bagunça tudo, é feito o
oCrt:Destroy();
7.1- Se a gente não fizer assim, aÃ, teremos uma bagunça nas telas seguintes CONSOLE/WVG.
Se alguém achar uma forma mais simples de se apresentar numa única linha com quebra automática de página todo o texto da NOTIFICAÇÃO, para ser mais fácil a manutenção, vamos agradecer, talvez um tipo de MEMO num único @ SAY.
Pelo meu pouco conhecimento, não sei se existe um @ SAY ou algo similar em clipper/harbour que preencha toda a tela com um único comando/código.
Por enquanto é só pessoal.
Espero que seja útil aos que tem mais dificuldade como eu. Gracias!