Página 1 de 1

Falha ao mostrar acentuação no Sistema

Enviado: 14 Nov 2012 09:15
por elvio.tche
Migrei um sistema de locadora do Clipper 5.3b para Harbour 3.2 (BCC 5.8), porém, estou com um pequeno incomodo.
Eventualmente, executo o sistema com um parâmetro para gravar novos valores para que o sistema salve alguns dados da máquina para evitar copiá-lo sem autorização (principalmente pelos funcionários da locadora).
O que estou tentando fazer é que o sistema mostre as mensagens do sistema com acentuação correta, além da acentuação dos dados gravados nos DBFs.

Tentei o seguinte:

Código: Selecionar todos

/* Solucao para CodePage mostrar acentuação no Sistema - Requisição... /*
REQUEST HB_CODEPAGE_PTISO     // As requisições de codepage possibilitam
REQUEST HB_CODEPAGE_PT850     // trabalhar com vários SOs e charsets pt_br, ou seja, corrigem a acentuação
REQUEST HB_LANG_PT

Procedure main()
Parameters cParamIni

Local nOpcao:=1,cScrLocal:="",cHoraIni:=Time()
Local cFileControl:="VIDEO",cDirInst:="..\VIDEO"
Local xVar1,xVar2,xVar3,cVolName:=""
Local aMenuLBL:={},aMenuRLT:={},aMSelRLT:={},aMenu:={},aMenuVal:={}

/* Variáveis de Identificação do Usuário do Sistema */
Private W_US_NOME,W_US_END,W_US_BAI,W_US_CID,W_US_UF,W_US_CEP,W_US_FONE,W_US_CGC

/* Variável Matriz para Frases do Cupom de Locação */
Private aFrases:={"","","","",""}

/* Variáveis para Configuração da Impressora */
Private VI_Dev:="" /* Porta de Saída do Relatório */
Private VI_Cod:="" /* Código da Impressora */
Private VI_LOC:=0  /* Impressora Local ou Rede */

/* Variável do Tipo de Fita para Emissão do Cupom Fiscal */
Private nTipoNota:=0

/* Variável do Caminho das Tabelas de Dados e Indices */
Private DBF_Path:=""

/* Solucao para CodePage mostrar acentuação no Sistema /*
HB_LANGSELECT('PT')
HB_SETCODEPAGE('PT850')

/* Log Inicial */
SaveLog()
SaveLog("* * * INÍCIO * * *")

QOut()
QOut("Aguarde...")
QOut()
... o sistema é compilado e recebo a seguinte mensagem:
Error BASE/1003 Variable does not exist: CPARAMINI
Called from VIDEO(51)


Então, mudei as primeiras linhas para:

Código: Selecionar todos

Function main(cParamIni)
...

/* Solucao para CodePage mostrar acentuação no Sistema - Requisição... /*
REQUEST HB_CODEPAGE_PTISO     // As requisições de codepage possibilitam
REQUEST HB_CODEPAGE_PT850     // trabalhar com vários SOs e charsets pt_br, ou seja, corrigem a acentuação
REQUEST HB_LANG_PT

/* Solucao para CodePage mostrar acentuação no Sistema /*
HB_LANGSELECT('PT')
HB_SETCODEPAGE('PT850')
...
.... então compila e executa normalmente, porém, as acentuações das mensagens são exibidos outros caracteres, como por exemplo:
- Seleç╠o = Seleção
- Locaç╠o - Locação
- Devoluç╠o - Devolução
... e assim por diante.

Alguma sugestão sobre como contornar esse probleminha?

Agradeço desde já!

Parâmetros por linha de comando no main()...

Enviado: 15 Nov 2012 10:11
por Jairo Maia
Olá Elvio,

Seja bem vindo ao fórum.

Pelo que vejo tanto a seleção de idioma como o código de página está correto. Você poderia anexar uma mensagem acentuada como está no seu código para analisarmos. Selecione uma mensagem, salve com o mesmo editor que você usa para escrever seus fontes, compacte e use a opção de anexar no rodapé da caixa de mensagem após logado.

Parâmetros por linha de comando no main()...

Enviado: 16 Nov 2012 01:17
por asimoes
Olá Elvio,

Eu uso desta forma sem problemas

Código: Selecionar todos

  REQUEST HB_LANG_PT
  REQUEST HB_CODEPAGE_PT850
  HB_LANGSELECT("PT")
  HB_CDPSELECT( "PT850" )

Falha ao mostrar acentuação no Sistema

Enviado: 16 Nov 2012 08:15
por elvio.tche
Bom, o problema da acentuação é o que menos importa, pois se for o caso, eu removo a acentuação de todas as palavras em todos os prg's, talvez um pouco radical, mas, evita os caracteres "estranhos" para o usuário.
O mais importante, é o caso do parâmetro que envio ao executável para ajustes de configurações do sistema. Esse é o ponto que gostaria de resolver.
Estou em dúvida em relação ao "REQUEST": ele pode ser colocado em qualquer posição do programa fonte, ou deve ser definido antes da linha "function main(cParamIni)" ?

Falha ao mostrar acentuação no Sistema

Enviado: 16 Nov 2012 08:27
por Pablo César
... o sistema é compilado e recebo a seguinte mensagem:
Error BASE/1003 Variable does not exist: CPARAMINI
Called from VIDEO(51)
Se o problema também é a variável do parâmetro (talvez quando não é passado parâmetro algum), adicione o reforço para que a variável não fique NIL.

Código: Selecionar todos

Function Main(cParamIni)
If cParamIni=Nil
   cParamIni=""
Endif
Estou em dúvida em relação ao "REQUEST": ele pode ser colocado em qualquer posição do programa fonte, ou deve ser definido antes da linha "function main(cParamIni)" ?
Tanto faz, o certo é colocá-los bem no início antes para que possa carrega-los e faezr o uso o quanto antes. Podem ficar antes do Function Main.

Falha ao mostrar acentuação no Sistema

Enviado: 16 Nov 2012 09:18
por elvio.tche
Boa, o "reforço" condicional vai muito bem.

O Editor que utilizo para trabalhar com os fontes ".prg" é o notepad++. Faço o ajuste, via meu, para:
Formatar -> Conjunto de Caracteres -> Europa Ocidental -> OEM 850.

Falha ao mostrar acentuação no Sistema

Enviado: 16 Nov 2012 11:41
por JoséQuintas
Comentário:
Aqui eu faço backup dos meus HDs, e baixo MP3.
Nisso o Windows já dá problema com caracteres acentuados, ou estrangeiros, chegando até a travar programas e a lixeira do próprio Windows.
Por essas e outras, eu não permito acentuação no sistema.
E não coloco acentuação nos MP3.... rs

E pra complicar:
Em DBF/DOS acentuação é de um jeito
No Windows é de outro
No MySql é de outro

O fuso horário é outro problema que anda no mesmo caminho.

Falha ao mostrar acentuação no Sistema

Enviado: 16 Nov 2012 15:49
por elvio.tche
Pois é, penso seriamente em "proibir" e remover a acentuação dos sistemas, justamente pelas dificuldades e diferentes tratamentos que os programas fornecem e tratam esses caracteres.
Por hora, vou deixar tudo como está e vou pensar sobre o que vou fazer.
Valeu.