saveScreen e restScreen restaurando com encode errado

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

lwinter
Usuário Nível 3
Usuário Nível 3
Mensagens: 123
Registrado em: 07 Mar 2011 12:08
Localização: Campinas - SP

saveScreen e restScreen restaurando com encode errado

Mensagem por lwinter »

Pessoal, estou usando o codepage
Set( _SET_CODEPAGE, "PTISO" )

Faco o desenho da minha tela normalemente com o caracter chr (196), porem ao salvar e restaurar a tela ela fica baguncada com o caracter "?" no lugar de 196.
Consultando o google, foi citado uma breve resposta das funcoes hb_savescreen e hb_restscreen que trabalha com unicode.
Fui tentar usa-la e ao compilar obtive undefined func.
Alguem saberia me dizer qual a lib destas funcoes?
Nota: ja estou incluindo a xhb.hbc

Obrigado!

rgds,
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

saveScreen e restScreen restaurando com encode errado

Mensagem por JoséQuintas »

Código: Selecionar todos

   hb_gtInfo( HB_GTI_COMPATBUFFER, .F. )
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/
lwinter
Usuário Nível 3
Usuário Nível 3
Mensagens: 123
Registrado em: 07 Mar 2011 12:08
Localização: Campinas - SP

saveScreen e restScreen restaurando com encode errado

Mensagem por lwinter »

Oi jose, agora funcionou! Porem tem uma parte da tela que faço sombra que modifico diretamente e justo nesta parte passou a dar problema de "?" sendo que antes nao ocorria. Vou deixar o fonte abaixo para voce dar uma olhada, ok?


func ShadowMenu (Y, X, Y1, X1)
local nColorFore := 1, nColorBack := 2 // indices da palette (SetColor ('1/2')) Harbour (antigo clipper)
local nByteColor := (nColorFore - 1) + ((nColorBack - 1) * 16)

RestScreen (Y1+1,X,Y1+1,X1+1, Transform (SaveScreen (Y1+1,X,Y1+1,X1+1), ;
REPLICATE ('X' + CHR (nByteColor), X1 - X + 2)))
RestScreen (Y+1,X1+1,Y1+1,X1+1, Transform (SaveScreen (Y+1,X1+1,Y1+1,X1+1), ;
REPLICATE ('X' + CHR (nByteColor), Y1 - Y + 1)))
RestScreen (Y,X-1,Y1+1,X-1, Transform (SaveScreen (Y,X-1,Y1+1,X-1), ;
REPLICATE ('X' + CHR (nByteColor), Y1 - Y + 2)))

return nil



Outra duvida o que faz exatamente esta funcao? Ela deixa de ser compativel com o clipper?

rgds,
lwinter
Usuário Nível 3
Usuário Nível 3
Mensagens: 123
Registrado em: 07 Mar 2011 12:08
Localização: Campinas - SP

saveScreen e restScreen restaurando com encode errado

Mensagem por lwinter »

Fazendo um debug, verifiquei que o savescreen com o parametro "hb_gtInfo( HB_GTI_COMPATBUFFER, .F. )" retorna uma string diferente.
Onde ao dar um dispout "? tela" aparece " e'dados da string'" ou seja, aparece a letra "e" ao lado de fora da string indicando ela estar em outro formato. Fui testa-la usando a hb_StrIsUTF8 (tela) e retornou .f., indicando nao se tratar de uma utf8. Alguem saberia me dizer do que se trata o prefixo "e" antes da string? Seria uma Oem? Se for, existe pouquissimas funcoes que tratam dela.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

saveScreen e restScreen restaurando com encode errado

Mensagem por JoséQuintas »

lwinter escreveu:Outra duvida o que faz exatamente esta funcao? Ela deixa de ser compativel com o clipper?
Sim.
E o savescreen() do Clipper é em codepage US.
O Harbour tem função pra sombra, mas não uso, não sei dizer qual é, se não me engano está na hbct.

Quanto a UTF8, é pior do que parece.
Existem funções próprias pra UTF8, e não serve usar Substr(), At(), Len(), etc.
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/
lwinter
Usuário Nível 3
Usuário Nível 3
Mensagens: 123
Registrado em: 07 Mar 2011 12:08
Localização: Campinas - SP

saveScreen e restScreen restaurando com encode errado

Mensagem por lwinter »

Oi Jose!
Obrigado pela dica. Pesquiser com hbmk2 -find shadow e encontrei a hb_shadow.
Encontrei tambem um post do Pctoledo que indicava como utilizar esta funcao em viewtopic.php?f=4&t=19589

Agora a minha rotina especifica de sombra ficou:

func ShadowMenu (Y, X, Y1, X1)
local nColorFore := 1, nColorBack := 2 // indices da palette (SetColor ('1/2')) Harbour (antigo clipper)
local nByteColor := (nColorFore - 1) + ((nColorBack - 1) * 16)

hb_shadow (Y, X, Y1, X1 - 1, nByteColor)
hb_shadow (Y - 1, X - 2, Y1, X - 2, nByteColor)
hb_shadow (Y1, X - 2, Y1, X1 - 2, nByteColor)

return nil

Ficou ate mais simples do que antes!

Muito agradecido!!!!!!
lwinter
Usuário Nível 3
Usuário Nível 3
Mensagens: 123
Registrado em: 07 Mar 2011 12:08
Localização: Campinas - SP

saveScreen e restScreen restaurando com encode errado

Mensagem por lwinter »

Aproveitando este mesmo topico, estou com problema de encode com a funcao Chr.
Aparece caracteres estranhos hora com um "quadradinho" hora com "?". Agora a funcao restscreen e savescreen estao funcionando com aquele comando que o Jose envisou. Porem o chr nao esta.
Alguem poderia saber porque?
Anexos
tabela asc.png
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

saveScreen e restScreen restaurando com encode errado

Mensagem por JoséQuintas »

lwinter escreveu:Porem o chr nao esta.Alguem poderia saber porque?
A tabela ASCII para PTISO é essa.
O que está procurando é da codepage US, e não existe na PTISO.

Acho que a alternativa é fazer igual o Harbour faz na @ TO, ou @ BOX.

É tipo o Harbour trabalhar com algo parecido com UTF8, que representa qualquer caractere, mas ele não estar disponível no uso normal.
Então.. ele tem a possibilidade, mas não nos comandos normais.
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/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

saveScreen e restScreen restaurando com encode errado

Mensagem por Itamar M. Lins Jr. »

Ola!
Já tinha postado aqui, em uma conversão clipper, que fiz para harbour.

Código: Selecionar todos

function xyz_DE_TELA_CLIPPER
hb_cdpSelect("EN")
...Funções para desenho das telas, com os caracteres da tabela "EN"
hb_cdpSelect("PTISO")
return .t.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
lwinter
Usuário Nível 3
Usuário Nível 3
Mensagens: 123
Registrado em: 07 Mar 2011 12:08
Localização: Campinas - SP

saveScreen e restScreen restaurando com encode errado

Mensagem por lwinter »

Deu certo! Obrigado!
Responder