Como alinhar numeros a direita?

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Vandi
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 16 Set 2011 23:26
Localização: Brasilia-DF

Como alinhar numeros a direita?

Mensagem por Vandi »

Boa noite,

Numa certa rotina gostaria de mostrar alguns numeros, porém, tenho que alinhá-los a direita.
Alguém poderia me dizer como fazer isso? Já fiz algumas pesqueisas, mas não achei a solução.

Gilvandi
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Como alinhar numeros a direita?

Mensagem por alxsts »

Olá!

Os campos numéricos são naturalmente alinhados à direita.

A tua dúvida não ficou clara. Estes "números" estão contidos em campos numéricos ou do tipo carácter? Qual seria a situação? Get, TBrowse, Say?

Por favor, forneça mais detalhes para que a análise e solução do problema seja facilitada.
[]´s
Alexandre Santos (AlxSts)
Vandi
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 16 Set 2011 23:26
Localização: Brasilia-DF

Como alinhar numeros a direita?

Mensagem por Vandi »

Alexandre,
Bom dia...

A rotina que mostra os valores na tela é essa aí. Acontece que dependendo do valor êles não ficam corretamente alinhados na margem direita.

Gilvandi

Código: Selecionar todos

*-------------------------------------------------
Function MostraDados()
*---------------------------------------------------------------------
   @479,113 SAY StrZero(gQtd,5)    COLOR BLUE SIZE 65, 30  FONT oFont003 OF TelaVenda1
   @473,158 SAY TRANSFORM(gRefKg,"999.999")  COLOR BLUE SIZE 65, 30  FONT oFont003 OF TelaVenda1
   @460,203 SAY TRANSFORM(gRefVr,"999,999.99")  COLOR BLUE SIZE 80, 30  FONT oFont003 OF TelaVenda1
   @460,248 SAY TRANSFORM(gBebVr,"999,999.99")  COLOR BLUE SIZE 80, 30  FONT oFont003 OF TelaVenda1
   @460,293 SAY TRANSFORM(gSobVr,"999,999.99")  COLOR BLUE SIZE 80, 30  FONT oFont003 OF TelaVenda1
Return Nil
Editado pela última vez por Pablo César em 16 Mai 2012 08:36, em um total de 3 vezes.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Como alinhar numeros a direita?

Mensagem por Pablo César »

Gilvandi, para exibir na tela é fácil. Mas para que isso dê certo você vai precisar setar a fonte para o tipo mono-espaçada como Courier New. Pois outra fonte como Arial, que tem medidas diferenciadas como o 1 ( um ) e o 0 ( zero ) que não ocupam o mesmo tamanho.

Código: Selecionar todos

*-------------------------------------------------
Function MostraDados()
*---------------------------------------------------------------------
   @479,113 SAY StrZero(gQtd,5)    COLOR BLUE SIZE 65, 30  FONT oFont003 OF TelaVenda1
   @473,158 SAY PadL(Alltrim(TRANSFORM(gRefKg,"999.999")),10)  COLOR BLUE SIZE 65, 30  FONT oFont003 OF TelaVenda1
   @460,203 SAY PadL(Alltrim(TRANSFORM(gRefVr,"999,999.99")),10)  COLOR BLUE SIZE 80, 30  FONT oFont003 OF TelaVenda1
   @460,248 SAY PadL(Alltrim(TRANSFORM(gBebVr,"999,999.99")),10)  COLOR BLUE SIZE 80, 30  FONT oFont003 OF TelaVenda1
   @460,293 SAY PadL(Alltrim(TRANSFORM(gSobVr,"999,999.99")),10)  COLOR BLUE SIZE 80, 30  FONT oFont003 OF TelaVenda1
Return Nil
Só resta te perguntar se você quer manter a exibição do modo americano ou quer exibir no modo brasileiro onde o milhar é separado com ponto e o decimal com vírgula ?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Vandi
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 16 Set 2011 23:26
Localização: Brasilia-DF

Como alinhar numeros a direita?

Mensagem por Vandi »

Pablo,

Bom dia...

Agradeço sua atenção... poderia postar então como ficaria essa rotina, inclusive no padrão brasileiro?

Gilvandi
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Como alinhar numeros a direita?

Mensagem por sygecom »

Olá Vandi,
OS SAY são alinhados a ESQUERADA por padrão e os GET NUMÉRICO a DIREITA.

Para alinhar seu exemplo a DIREITA pode usar assim:

Código: Selecionar todos

*-------------------------------------------------
	Function MostraDados()
	*---------------------------------------------------------------------
	   @460,113 SAY StrZero(gQtd,5)                                                   COLOR BLUE SIZE 80, 30  FONT oFont003 OF TelaVenda1;
           STYLE SS_RIGHT
	   @460,158 SAY PadL(Alltrim(TRANSFORM(gRefKg,"999.999")),10)      COLOR BLUE SIZE 80, 30  FONT oFont003 OF TelaVenda1;
           STYLE SS_RIGHT
	   @460,203 SAY PadL(Alltrim(TRANSFORM(gRefVr,"999,999.99")),10)  COLOR BLUE SIZE 80, 30  FONT oFont003 OF TelaVenda1;
           STYLE SS_RIGHT
	   @460,248 SAY PadL(Alltrim(TRANSFORM(gBebVr,"999,999.99")),10)  COLOR BLUE SIZE 80, 30  FONT oFont003 OF TelaVenda1;
           STYLE SS_RIGHT
	   @460,293 SAY PadL(Alltrim(TRANSFORM(gSobVr,"999,999.99")),10)  COLOR BLUE SIZE 80, 30  FONT oFont003 OF TelaVenda1;
           STYLE SS_RIGHT
	Return Nil
Cuide apenas para que o tamanho dos SIZE seja o mesmo para ficar tudo bem alinhado corretamente, e cuide também para que comece na mesma coluna. Veja que mudei isso no seu exemplo.

Se quiser pode pegar mais tipos de STYLE que você pode usar em: \hwgui\include\windows.ch

Abaixo os STYLE que podem ser usados nos SAY

Código: Selecionar todos

/*
 * Static Control Constants
 */
#define SS_LEFT                   0    // 0x00000000L
#define SS_CENTER                 1    // 0x00000001L
#define SS_RIGHT                  2    // 0x00000002L
#define SS_ICON                   3    // 0x00000003L
#define SS_BLACKRECT              4    // 0x00000004L
#define SS_GRAYRECT               5    // 0x00000005L
#define SS_WHITERECT              6    // 0x00000006L
#define SS_BLACKFRAME             7    // 0x00000007L
#define SS_GRAYFRAME              8    // 0x00000008L
#define SS_WHITEFRAME             9    // 0x00000009L
#define SS_USERITEM              10    // 0x0000000AL
#define SS_SIMPLE                11    // 0x0000000BL
#define SS_LEFTNOWORDWRAP        12    // 0x0000000CL
#define SS_OWNERDRAW             13    // 0x0000000DL
#define SS_BITMAP                14    // 0x0000000EL
#define SS_ENHMETAFILE           15    // 0x0000000FL
#define SS_ETCHEDHORZ            16    // 0x00000010L
#define SS_ETCHEDVERT            17    // 0x00000011L
#define SS_ETCHEDFRAME           18    // 0x00000012L
#define SS_TYPEMASK              31    // 0x0000001FL
#define SS_NOTIFY               256    // 0x00000100L
#define SS_CENTERIMAGE          512    // 0x00000200L
#define SS_RIGHTJUST           1024    // 0x00000400L
#define SS_REALSIZEIMAGE       2048    // 0x00000800L
#define SS_SUNKEN              4096    // 0x00001000L
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Vandi
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 16 Set 2011 23:26
Localização: Brasilia-DF

Como alinhar numeros a direita?

Mensagem por Vandi »

Sygecom,

Obrigado pela dica... deu ok!!! Alterei minha rotina e ficou perfeita.

Gilvandi
Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

Como alinhar numeros a direita?

Mensagem por Linguagemclipper »

Estou precisando fazer isso em modo console. O exemplo dado foi em modo gráfico com a HWGUI.

Código: Selecionar todos

nVALOR := 0 
@ 00,00 SAY "VALOR R$" GET nVALOR PICTURE "@E 999,999,999.99"
READ
No caso aí fica no padrão Britânico e Brasileiro, mas é muito chato entrar com números da esquerda para a direita.
Quando fosse número teria que começar da direita para a esquerda.
Nos exemplos de máscaras existentes que testei nenhuma deu certo. Vou ter que desenvolver um "reader" próprio?... Alguém teria isso aí pronto para eu não ter que reinventar a roda? Agradeço.
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Como alinhar numeros a direita?

Mensagem por alxsts »

Olá!

Veja o tópico Alinhar GET numérico à DIREITA. É um tópico longo e confuso mas, talvez sirva de inspiração...
[]´s
Alexandre Santos (AlxSts)
Responder