Página 2 de 3
RestScreen() falhando com UTF8
Enviado: 22 Fev 2025 16:44
por developer
As melhorias do José são boas, para mim este foi um exercício interessante, até me ajudou a relembrar algumas idéias perdidas no tempo, realmente foi divertido.
A idéias de colocar textura ficou interessante, deu um "ar" legado ao programa apesar que eu pessoalmente preferir mais o estilo "liso":
RestScreen() falhando com UTF8
Enviado: 23 Fev 2025 10:10
por Softwhouse
Developer, qual o código vc usou ? Desenhou os quadros digitando ALT + Chr(xxx) ? Meu problema está justamente nisso, desenhar os quadros e acentuar as telas.
RestScreen() falhando com UTF8
Enviado: 23 Fev 2025 10:16
por Softwhouse
Quintas, obrigado pelas sugestões. Não consegui entender o funcionamento da função Confirma. Se opc retorna sempre 1 como vai saber quando a opção for 2 ?
Quanto ao recebimentos dos parâmetros na função Tela(cEmpresa, cSistema) foi esquecimento na digitação. Obrigado.
RestScreen() falhando com UTF8
Enviado: 23 Fev 2025 15:07
por developer
Developer, qual o código vc usou ? Desenhou os quadros digitando ALT + Chr(xxx) ? Meu problema está justamente nisso, desenhar os quadros e acentuar as telas.
Rapaz, deu um trabalho adicionar assinatura pois não funcionava de jeito nenhum, finalmente consegui! Agora o nome aparece também.
Não uso ALT, sendo que isso só funciona se você usar um editor de código em CP437 (EN) que não é o meu caso (exceto quando tenho que editar algum código antigo que foi feito naquele editor), então acabo tendo que usar CHR()
RestScreen() falhando com UTF8
Enviado: 23 Fev 2025 15:17
por alxsts
Olá!
Softwhouse escreveu:Developer, qual o código vc usou ? Desenhou os quadros digitando ALT + Chr(xxx) ?
A forma mais fácil de desenhar um Box na tela é usando a função DispBox(). Os conjuntos de caracteres usados para o contorno dos boxes estão no arquivo "Box.ch", e são formados por 8 caracteres cada. O arquivo, por padrão, fica na pasta include. É possível adicionar um nono caracteres à string, que servirá para preencher o interior do Box.
Código: Selecionar todos
#include "Box.ch"
Function Main()
// Desenhar um Box com bordas simples, preenchido com espaços
DispBox( 0, 0, MaxRow(), MaxCol, B_SINGLE + Space( 1 ) )
Inkey(0)
RETURN NIL
Softwhouse escreveu:Se opc retorna sempre 1 como vai saber quando a opção for 2 ?
Repare que o retorno da função é uma expressão lógica... não retorna sempre 1 e sim um valor .T. ou .F. É equivalente a:
DispBox
Displays a box on the screen.
Syntax
DispBox( <nTop>, <nLeft>, <nBottom>, <nRight>, ;
[<cnBoxString>] , [<cColor>] ) --> NIL
Arguments
<nTop> and <nLeft> : screen coordinates for the upper left corner of the DispBox()output
<nBottom> and <nRight> : screen coordinates for the lower right corner of the DispBox()output
<cnBoxString> : The appearance of the box to display can either be specified as numeric 1 (single line box), numeric 2 (double line box), or as a character string holding up to nine characters. The first eight characters define the border of the box while the ninth character is used to fill the box. #define constants to be used for <cnBoxString> are available in the BOX.CH #include file.
Pre-defined box strings for DispBox()
Constant Description
--------------- ----------------------------------------
B_SINGLE Single-line box
B_DOUBLE Double-line box
B_SINGLE_DOUBLE Single-line top, double-line sides
B_DOUBLE_SINGLE Double-line top, single-line sides
If no <cnBoxString> is specified, a single-line box is drawn. <cColor> : SetColor() compliant color string; default is the standard color of SetColor().
Return
DispBox() returns always NIL.
Description
The function DispBox() displays a box on the screen as specified with <cnBoxString>, using the standard color of SetColor() or <cColor>, if specified.
If a character string is used for <cnBoxString>, the first eight characters define the border of the box in clockwise direction, beginning with the upper left corner. An optional ninth character fills the area inside the box. Alternatively, a single character can be passed which is used to draw the entire box border. When the box is completely drawn, the cursor is positioned at the coordinates <nTop>+1 and <nLeft>+1, so that a subsequent DispOut() call starts displaying in the upper left corner of the box area.
Example
// The example demonstrates how characters are used to draw a box.
// Alphabetic characters define <cnBoxString> instead of characters
// holding graphic signs.
#include "Box.ch"
PROCEDURE Main
CLS
DispBox( 10,10,20,50, "AbCdEfGhi", "W+/R" )
Inkey(0)
DispBox( 10,10,20,50, B_DOUBLE + Space(1) )
DispOut( "Using #define constant" )
RestScreen() falhando com UTF8
Enviado: 23 Fev 2025 19:59
por JoséQuintas
Opcionalmente voce pode criar funções MsgYesNo() e MsgNoYes().
Uma com default em SIM e outra com default em NÃO.
Sim retorna .T.
Não retorna .F.
Também não precisa colocar IF MsgYesNo( "xxx" ) == .T.
Retorno idêntico nas duas, pra não ficar preso a retornos diferentes.
Costumo usar funções padrão com nome em inglês, pra facilitar post em fórum internacional.
Pra algumas LIBs isso dá conflito, porque elas também usam kkkk
Opcionalmente também, se for Windows, tem a Messagebox() da API Windows, na lib hbwin do harbour.
Código: Selecionar todos
FUNCTION MsgYesNo( cText )
LOCAL lValue
//hb_ThreadStart( { || PlayText( cText ) } )
lValue := wapi_MessageBox( wapi_GetActiveWindow(), cText, AppEmpresaApelido() + " Confirmação", WIN_MB_YESNO + WIN_MB_ICONQUESTION + WIN_MB_DEFBUTTON2 + WIN_MB_TOPMOST ) == WIN_IDYES
RETURN lValue
FUNCTION MsgExclamation( cText )
//hb_ThreadStart( { || PlayText( cText ) } )
wapi_MessageBox( wapi_GetActiveWindow(), cText, AppEmpresaApelido() + " Atenção", WIN_MB_ICONASTERISK + WIN_MB_TOPMOST )
RETURN Nil
FUNCTION MsgWarning( cText )
//hb_ThreadStart( { || PlayText( cText ) } )
wapi_MessageBox( wapi_GetActiveWindow(), cText, AppEmpresaApelido() + " Atenção", WIN_MB_ICONEXCLAMATION + WIN_MB_TOPMOST )
RETURN Nil
FUNCTION MsgStop( cText )
//hb_ThreadStart( { || PlayText( cText ) } )
wapi_MessageBox( wapi_GetActiveWindow(), cText, AppEmpresaApelido() + " Atenção", WIN_MB_ICONHAND + WIN_MB_TOPMOST )
RETURN Nil
Então... no final, aproveitar tela é relativo.
Com a mensagem da API Windows, não precisa salvar/restaurar tela por exemplo.
Se for GTWVG, ela tem o Alert() também.
E por aí vai.
De repente, quebrando a cabeça à toa pra manter caracteres especiais, salvar/restaurar tela, etc.
RestScreen() falhando com UTF8
Enviado: 23 Fev 2025 20:15
por JoséQuintas
Também em GTWVG você tem o recurso de janelas.
Pra usar o termo GUI, podemos chamar de DIALOGS.
É o fim de usar save/restore screen.
E já separa as "dialogs" da mesma forma que vai precisar fazer com lib GUI.
Faço uso restrito disso, mas nada impede usar no aplicativo inteiro.
RestScreen() falhando com UTF8
Enviado: 24 Fev 2025 16:31
por Softwhouse
Não uso ALT, sendo que isso só funciona se você usar um editor de código em CP437 (EN) que não é o meu caso (exceto quando tenho que editar algum código antigo que foi feito naquele editor), então acabo tendo que usar CHR()
Sim, mas qual código usou ? Aquí configurei o Notepad++ p/ 8859-1 e no fonte coloquei REQUEST HB_CODEPAGE_PTISO e HB_SETCODEPAGE('PT_ISO') e não funcionou, configurei o Notepad++ para ANSI e também não deu certo.
RestScreen() falhando com UTF8
Enviado: 24 Fev 2025 17:15
por JoséQuintas
Pera aí... é harbour ou xharbour ?
E tem mais outra pra ficar feliz:
Ao postar o fonte no fórum, corre o risco dele virar UTF-8, deixa de ser o fonte original.
Codepage aí... ferrou...
RestScreen() falhando com UTF8
Enviado: 24 Fev 2025 17:23
por JoséQuintas
hbmk2 -find codepage
gtwvg.hbc (installed):
wvt_SetCodepage()
gtwvw.hbc (not installed):
wvw_SetCodepage()
xhb.hbc (installed):
hb_SetCodepage()
Harbour core (installed):
...
Sei lá se WVT tem tratamento especial...
Mas hb_SetCodePage() é compatibilidade com xharbour, essa lib deve ser evitada ao máximo.
RestScreen() falhando com UTF8
Enviado: 24 Fev 2025 17:26
por JoséQuintas
E na dúvida....
Pelo menos nessa eu sei que funciona conforme padrão.
RestScreen() falhando com UTF8
Enviado: 24 Fev 2025 17:31
por developer
Sim, mas qual código usou ? Aquí configurei o Notepad++ p/ 8859-1 e no fonte coloquei REQUEST HB_CODEPAGE_PTISO e HB_SETCODEPAGE('PT_ISO') e não funcionou, configurei o Notepad++ para ANSI e também não deu certo.
Não uso o Notepad++, estou usando o VSCode, sugiro você escolher o
encoding que preferir, não tem que ser o ISO 8859-1 mas eu acho este a melhor escolha para o seu caso, porém pode ser qualquer um: ANSI, CP437, UTF-8, apenas mantenha tudo no mesmo código escolhido, inclusive o editor, assim não terá problemas e não ficará confuso, é uma boa prática (diria até essencial) ter uma definição clara do que vai fazer e manter-se naquilo (é bom documentar), faça o trabalho limpo que ficará mais fácil para você no futuro.
Código: Selecionar todos
B_DOUBLE
CHR(199)
CHR(182)
CHR(179)
CHR(209)
CHR(207)
CHR(197)
PS: Estou procurando trabalho, se souber de alguma coisa, avise pelo PV. Sou bem flexível.
RestScreen() falhando com UTF8
Enviado: 24 Fev 2025 17:44
por Softwhouse
Quintas, estou usando Harbour.
Mário, não entendeu. O Editor está configurado como?
ANSI ?
ISO 8859-1 ?
No código fonte colocou o o que ?
REQUEST HB_CODEPAGE_PTISO ?
HB_CDPSELECT('PTISO')
REQUEST HB_CODEPAGE_PT850 ?
HB_CDPSELECT(PT850) ?
Pode colocar seu código fonte ?
RestScreen() falhando com UTF8
Enviado: 26 Fev 2025 16:45
por developer
O Editor está configurado como?
ISO 8859-1
Veja na imagem, usando VSCode, ISO 8859-1 (canto inferior direito):
No código fonte colocou o o que ?
Pode colocar seu código fonte ?/
O código fonte é o
seu próprio
RestScreen() falhando com UTF8
Enviado: 26 Fev 2025 18:37
por Softwhouse
Pois é, desta forma não funciona no NotePad++, acentua corretamente mas os caracteres para desenho das telas não funcionam.