Página 1 de 2

Harbour unicode

Enviado: 19 Set 2013 12:13
por JoséQuintas
Existe uma coisa no Harbour que é a compilação usando Unicode: isso eu já usava desde o Harbour 3.0, pra poder rodar em máquina com Windows 98.

Existem também os caracteres Unicode.
Tenho usado o Harbour no estilo Clipper, usando o padrão, nenhuma acentuação, e tudo bem.

Comecei a usar o msgbox da api do Windows, sem acentuação tudo bem.
Agora com Windows 8.1 ativei a opção do meu sistema falar, e ficou péssimo sem acentuação.

Minhas perguntas:

1 - Tem uma função de conversão, que eu possa usar nas rotinas de msgbox() e na rotina de falar?
2 - Tem como o Harbour trabalhar com Unicode? fixar o uso igual no VB?
3 - Como fica o fonte em ANSI, se configurar o editor para unicode já fica resolvido?
4 - E como ficam todas as funções internas e DBFs, aceitarão normal ou Unicode tem aquilo de duas letras significando uma só, e pode mexer com banco de dados e funções?

Obs. Unicode é mais compatível com internet e utf-8 do que o ansi. Testei UTF8 mas não deu certo.

Harbour unicode

Enviado: 19 Set 2013 17:59
por Jairo Maia
Olá José,

Você conhece este documento Understanding harbour codepage & unicode?

Este documento responde suas perguntas 1 e 2 e dá outras informações. Quanto as demais vou dar uma opinião:
JoséQuintas escreveu:Como fica o fonte em ANSI, se configurar o editor para unicode já fica resolvido?
Para textos novos sim, porém os que foram escritos em outra codificação precisa converter. Por exemplo, se você abrir um arquivo escrito em ANSI no Notepad++ pode usar o recurso de conversão do próprio editor para converter para UTF-8.
JoséQuintas escreveu:E como ficam todas as funções internas e DBFs, aceitarão normal ou Unicode tem aquilo de duas letras significando uma só, e pode mexer com banco de dados e funções?
Sim. Os bancos de dados trabalharão normalmente, Porém, se você usa banco de dados com acentuação, precisará converter os registros. Isto não é nada complicado, basta ler o campo caracter transformar em UTF-8 e salvar, e isso em cada registro, claro.
JoséQuintas escreveu:Unicode é mais compatível com internet e utf-8 do que o ansi.
Quando falamos em Unicode com Harbour, pelo menos por enquanto só tem suporte para Unicode UTF-8.

Aproveitando, como você falou em Windows 98, qual é o papel da dll unicows.dll? Apenas para os windows inferiores ao XP? Ou para você rodar em Windows XP e superior essa dll também precisa acompanhar o aplicativo?

Harbour unicode

Enviado: 19 Set 2013 20:03
por JoséQuintas
Quando usei o Harbour 3.0, eu tinha cliente usando W98, e o programa não rodava lá.
Compilando com unicows.dll, e instalando unicows.dll no W98, passou a rodar.
No resto rodava normal.

Achei este texto na net.
Parece algo relacionado a funções de API pra ANSI e Unicode, onde o W98 não tinha as duas.

"Normally, the Windows API provides both A (ANSI) and W (Wide-character) versions of most functions. On Windows 95/98/ME, only the A versions are implemented and attempting to call a W version will fail with an error code that indicates that function is unimplemented. On Windows NT/2000/XP/2003, both the A and W versions are implemented (however the operating system generally only internally implements the W version natively, and the A version is usually a translation thunk to the W version)."

Harbour unicode

Enviado: 19 Set 2013 20:12
por JoséQuintas
por coincidência eu já tinha visto esse link, cheguei lá por pequisa no google.
Mas na prática não entendi o que preciso fazer.
Num primeiro momento é como passer pra APIs do Windows.
O UTF8 não deu certo.

Harbour unicode

Enviado: 19 Set 2013 20:23
por JoséQuintas
Vamos ao lado prático: nunca usei acentuação nem no fonte.
No momento, minha GETSYS está alterada pra não aceitar caracteres especiais.
No tempo do VB6 fiz algo parecido também, pra evitar problemas de caracteres.

Por enquanto, tenho as chamadas a api pra mensagens, que já usa a função de "falar" o texto.
Então queria deixar compatível com o Windows, pra acentuação funcionar em telas Windows e até mesmo nessa de falar.
E uso GTWVG, que também não sei se vai ser compatível.

Harbour unicode

Enviado: 19 Set 2013 20:26
por JoséQuintas
Desculpem, mas esse W8 tem corretor ortográfico embutido, e eu estou com problemas pra enxergar de perto, então nem sempre dá pra ver que o W8 está corrigindo baseado no ingles e estragando as mensagens.
Instalei o Windows 8.1 em português, mas ele teima em mudar sozinho pra inglês.
E não permite retirar o inglês. (imagino que tendo um único idioma ele não ficaria alterando).

Harbour unicode

Enviado: 19 Set 2013 20:59
por JoséQuintas
Só pra complementar:
Fiz um teste alterando o editor pra Unicode, e digitei os textos dessa forma, somente isso.
Fui pela teoria: se o texto está em Unicode, deveria funcionar nas APIs do Windows.
Mas não deu certo.

Harbour unicode

Enviado: 20 Set 2013 09:04
por Jairo Maia
Olá José,

O que achei estranho é a API não reconhecer a codificação ANSI. Essa não entendi.

Quanto ao UTF-8 não funcionar, hoje até entendo que isso é normal, pois o Windows usa a codificação UTF-16.

Nota: Acompanhei há alguns meses uma thread no Google groups sobre compilar o Harbour em UTF-8 para gerar aplicativos em Unicode, não sei se foi conclusivo, pois deixei de acompanhar. Se não me engano é uma discussão de abril deste ano, e tem a participação do Viktor.

Harbour unicode

Enviado: 20 Set 2013 11:48
por JoséQuintas
Se alguém puder testar com as opções que conhece, acho que é um bom teste.

Código: Selecionar todos

PROCEDURE Main
   PlayText( "Testando pra ver se consigo ou não falar golaço em São Paulo" )
   RETURN NIL

FUNCTION PlayText( cText )
   LOCAL oTalk
   
   IF Empty( cText )
      RETURN NIL
   ENDIF
   oTalk := win_OleCreateObject( "SAPI.SPVoice" )
   oTalk:Speak( cText ) // , SVSFDefault
   oTalk:WaitUntilDone( 10000 )
   RETURN NIL
No Harbour 3.2, compilar usando: hbmk2 test hbwin.hbc

No Windows 8.1 Enterprise em português já fala em português.
Me parece que seria o mesmo com Windows 7 Ultimate.
O problema está sendo acentuação compatível.
Sai algo parecido com "testando pra ver se consigo ou num falar golao em Sum Paulo"

Harbour unicode

Enviado: 21 Set 2013 08:39
por Jairo Maia
José, não tenho ainda Windows 8.1, então não pude fazer teste nele. Já quanto a testar em XP, e Windows 8.0, só mesmo reproduz em inglês. Da mesma forma, ocorreu no Seven Ultimate, só em inglês.

O resultado também foi o mesmo passando seu exemplo para VBScript, só fica correto se colocar o texto a falar em inglês. Por exemplo, basta salvar o código abaixo com a extensão .vbs que fala:

Código: Selecionar todos

cFalar="Hello everyone, have a good day"
Set speech=CreateObject("sapi.spvoice")
speech.Speak cFalar

Harbour unicode

Enviado: 21 Set 2013 10:02
por JoséQuintas
Lembro que quando coloquei esse recurso, teria que ser W 7 ultimate, e instalar a voz da mulher em português.
Nunca tinha testado em português por não ter a versão ultimate.

Resta saber se é diferença por ser enterprise, ou por ser 8.1, isso já vir instalado.

Harbour unicode

Enviado: 21 Set 2013 13:42
por JoséQuintas
Algo mais simples:
Tentei isto e não dá certo, de nenhum dos dois jeitos.

Código: Selecionar todos

PROCEDURE main

//request HB_LANG_PT
//request HB_CODEPAGE_PT850
//HB_SETCODEPAGE( "PT850" )
//HB_LANGSELECT( "PT" )
wapi_messagebox( , "São Paulo" )
Por acaso depende do editor também?

Harbour unicode

Enviado: 22 Set 2013 07:42
por Jairo Maia
José, usando codificação ANSI assim funcionou:

Código: Selecionar todos

REQUEST Hb_CodePage_PTISO

Function Main()

  Hb_CdpSelect( "PTISO" )

  wapi_messagebox( Nil, "São Paulo" )

Return Nil

Harbour unicode

Enviado: 22 Set 2013 10:42
por JoséQuintas
Grande Jairo...
Resolveu e até está falando em português. Valeu.

O problema agora é o savescreen/restorescreen com os traços de box.
Desenha certo, mas restaura errado.

Alguma dica pra isso?

exemplo:

Código: Selecionar todos

REQUEST HB_CodePage_PTISO

PROCEDURE Main
   HB_CdpSelect( "PTISO" )
   CLS
   @ 1, 0 SAY "São Paulo"
   @ 2, 0 TO 2, MaxCol()
   SAVE SCREEN
   Inkey(0)
   RESTORE SCREEN
   Inkey(0)
   RETURN   

Harbour unicode

Enviado: 22 Set 2013 18:57
por JoséQuintas
Resolvido.
hb_gtInfo( HB_COMPATBUFFER, .f. )

Agora arrumei pra cabeça... muita acentuação pra colocar no sistema.