Página 1 de 1

saveScreen e restScreen restaurando com encode errado

Enviado: 27 Abr 2020 19:38
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,

saveScreen e restScreen restaurando com encode errado

Enviado: 27 Abr 2020 21:45
por JoséQuintas

Código: Selecionar todos

   hb_gtInfo( HB_GTI_COMPATBUFFER, .F. )

saveScreen e restScreen restaurando com encode errado

Enviado: 28 Abr 2020 14:56
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,

saveScreen e restScreen restaurando com encode errado

Enviado: 28 Abr 2020 15:51
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.

saveScreen e restScreen restaurando com encode errado

Enviado: 28 Abr 2020 20:42
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.

saveScreen e restScreen restaurando com encode errado

Enviado: 28 Abr 2020 23:42
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!!!!!!

saveScreen e restScreen restaurando com encode errado

Enviado: 01 Mai 2020 19:41
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?

saveScreen e restScreen restaurando com encode errado

Enviado: 01 Mai 2020 21:27
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.

saveScreen e restScreen restaurando com encode errado

Enviado: 01 Mai 2020 21:37
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.

saveScreen e restScreen restaurando com encode errado

Enviado: 03 Mai 2020 19:46
por lwinter
Deu certo! Obrigado!