DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
Carlos Magno
 


País: Brasil
Estado: PI
Cidade: Picos
Mensagens: 136
 Postado em: 23/7/2012 04:46:25 PM

Ola galera......to aprendendo a trabalhar com delphi. Tenho tanto 7 quanto o 2010. E me apareceu um probleminha num programinha que estou fazendo.

tenho uns 8 campos numéricos onde preciso colocar uma máscara de forma que se o número for positivo apresente o sinal + e se for negativo o sinal -. Ex: +1,25; +3,75.

Alguem pode me ajudar?
wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 614
 Postado em: 23/7/2012 07:29:02 PM

Colega vai uma função simples, que recebe um valor double verifica se é maior que 0 ou menor que 0, então retorna uma string formatada com sinal:

#Código

function FormataValor(valor: Double): string;
begin
if valor > 0 then
Result := FormatFloat(+0.00, valor)
else
Result := FormatFloat(0.00, valor);
end;


OBS.: Note que quando for negativo não precisa adicionar o sinal -.
Carlos Magno
 


País: Brasil
Estado: PI
Cidade: Picos
Mensagens: 136
 Postado em: 24/7/2012 08:25:26 AM

Entendi seu código e o coloquei. Só que ao rodar ele da um erro pedindo um BEGIN BEGIN expected but END found.. Acho que esqueci de dizer que isso é um QRDBText.
wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 614
 Postado em: 24/7/2012 08:58:29 AM

Note que estou usando uma instrução linear:

#Código

function FormataValor(valor: Double): string;
begin
if valor > 0 then
Result := FormatFloat(+0.00, valor) //Não vai Ponto e vírgula
else
Result := FormatFloat(0.00, valor);
end;
Carlos Magno
 


País: Brasil
Estado: PI
Cidade: Picos
Mensagens: 136
 Postado em: 24/7/2012 09:26:55 AM

não foi colocado o ponto e virgula e continua dando o mesmo erro. Tentei do seu modo e também o não linear e dá o mesmo erro.
Carlos Magno
 


País: Brasil
Estado: PI
Cidade: Picos
Mensagens: 136
 Postado em: 24/7/2012 09:28:27 AM

Veja so como está.
#Código

procedure Tfrm_servprint.QRDBText36Print(sender: TObject;
var Value: String);
function FormataValor(valor: Double): string;
begin
if valor > 0 then
Result := FormatFloat(+0.00, valor)
else
Result := FormatFloat(0.00, valor);
end;

wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 614
 Postado em: 24/7/2012 09:55:23 AM

Não colega !!! Essa função é externa fica fora da procedure, quando for usá-la vc chama function, exemplo:

#Código

function Tfrm_servprint.FormataValor(valor: Double): string;
begin
if valor > 0 then
Result := FormatFloat(+0.00, valor) //Não vai Ponto e vírgula
else
Result := FormatFloat(0.00, valor);
end;

//Dentro da procedure que for necessária
QRBText36.text := FormataValor(<ak vai o valor para ser formatado>);


Nesse caso como os valores são de um dataset precisão ser formatados durante a criação do relatório.
Carlos Magno
 


País: Brasil
Estado: PI
Cidade: Picos
Mensagens: 136
 Postado em: 24/7/2012 10:54:28 AM

Caro colega.... desculpe minha burrice, mas como falei, sou iniciante e ainda tenho muito a aprender. Estou a quase dois meses aprendendo na raça sozinho, lendo, pesquisando, tentando e errando. Por isso que, você deu a direção e eu, tentando e errando, não consegui chamar o valor nessa parte:

#Código
qrdbtext36.text := FormataValor(essa parte onde estou errando);
wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 614
 Postado em: 24/7/2012 11:09:13 AM

Colega não esquenta ninguém nasce sabendo a programar, demora um certo tempo até pegar o jeito da coisa.

#Código

qrdbtext36.text := FormataValor(essa parte onde estou errando);


Você vai passar como parâmetro para Function FormataValor(), o valor que vc quer que seja formatado possivelmente deve ser um campo da sua tabela.

Poste qual o código inteiro ou campo que deseja formatar..

OBS.: Pretendo escrever um artigo sobre as principais diferenças como usar procedures e functions no delphi, vou postar ak no portal DevMedia.
Carlos Magno
 


País: Brasil
Estado: PI
Cidade: Picos
Mensagens: 136
 Postado em: 24/7/2012 01:51:34 PM

o campo se chama LODE
Joel Rodrigues
 
 

 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 3122
 Postado em: 26/7/2012 07:27:40 AM

Cara, acho que vai ser:

#Código

qrdbtext36.text := FormataValor(tabela.FieldByName(´LODE´).AsFloat);
Carlos Magno
 


País: Brasil
Estado: PI
Cidade: Picos
Mensagens: 136
 Postado em: 26/7/2012 08:00:38 AM

Vou testar, caso dê certo eu mudo o topico para resolvido
Carlos Magno
 


País: Brasil
Estado: PI
Cidade: Picos
Mensagens: 136
 Postado em: 26/7/2012 09:00:01 AM

Não deu certo. esta dando erro justamente no QRDBText36.TEXT.
Joel Rodrigues
 
 

 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 3122
 Postado em: 26/7/2012 09:36:58 AM

Carlos, por favor nunca deixe de especificar qual o erro que está ocorrendo.
Carlos Magno
 


País: Brasil
Estado: PI
Cidade: Picos
Mensagens: 136
 Postado em: 26/7/2012 10:07:50 AM

Ok, perdão....o erro é este Undeclared identifier. text. Eu acho que deva esse paramentro text porque após colocar o ponto e aparece uma lista de opções, a text não lista.
BRUNO LEANDRO
 

 


País: Brasil
Estado: SP
Cidade: Tupã
Mensagens: 554
 Postado em: 26/7/2012 10:19:53 AM

Olá Carlos tente utilizar a propriedade Caption neste componente
wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 614
 Postado em: 26/7/2012 10:28:24 AM

Carlos como o colega Bruno mencionou acima, utilize a propriedade Caption deste componente.

Foi uma falha minha demonstrar como exemplo a propriedade text desse componente, pois mesmo recebe valores diretamente do field atribuido para ele e consequentemente do dataset do relatório. Para atribuir um texto para esse tipo de componente somente usando a propriedade caption mesmo.

Por esse motivo deu erro....
Carlos Magno
 


País: Brasil
Estado: PI
Cidade: Picos
Mensagens: 136
 Postado em: 26/7/2012 10:29:25 AM

Bruno..


Citação:
tente utilizar a propriedade Caption neste componente


Usei o caption, compilou, mas não retornou como eu queria, com o sinal de + antes do numero.
BRUNO LEANDRO
 

 


País: Brasil
Estado: SP
Cidade: Tupã
Mensagens: 554
 Postado em: 26/7/2012 10:39:17 AM

em que momento voce esta preenchendo o valor no OnPrint do componente ?
wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 614
 Postado em: 26/7/2012 10:39:32 AM

Só para eu entender, o valor númerico aparece mas o sinal + ou - não?
Carlos Magno
 


País: Brasil
Estado: PI
Cidade: Picos
Mensagens: 136
 Postado em: 26/7/2012 10:44:37 AM

Bruno:

Citação:
em que momento voce esta preenchendo o valor no OnPrint do componente ?

no procedure do FormCreate;

wllfl:

Citação:
Só para eu entender, o valor númerico aparece mas o sinal + ou - não?

aparece o sinal de -, mas não o sinal + se o numero for positivo.
wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 614
 Postado em: 26/7/2012 11:03:23 AM

Carlos eu não trabalho com QuickReport mas como o LEANDRO mencionou acima, existe um evento que é disparado antes do preenchimento da QRDBText, tente inserir o código de formatação nesse evento.
Joel Rodrigues
 
 

 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 3122
 Postado em: 26/7/2012 11:23:25 AM

Galera, andei pensando... e se definisse a propriedade DisplayFormat do campo como +#,##0.00;-#,##0.00
Isso não resolveria? Aí não precisaria aplicar função de formatação.
wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 614
 Postado em: 26/7/2012 11:50:12 AM

Então Joel até pensei na sua idéia, testei no RLReport mesmo e funcionou como está acima, mas não tenho Quick para testar.

Só precisa diferenciar negativo de positivo...
wllfl
 
 

 


País: Brasil
Estado: SP
Cidade: São Roque
Mensagens: 614
 Postado em: 26/7/2012 12:10:11 PM

Colega tenta da seguinte maneira, no evento OnBeforePrint do band onde está QRDBText vc coloca esse código abaixo, esse código também pode ser usando com um componente do tipo label acho que deve ser QRLabel ou coisa parecida.

#Código

QRDBText36.text := FormataValor(tabela.FieldByName(´LODE´).AsFloat);


OBS.: Não atribua nenhum campo para esse QRDBText senão será concatenado ao valor do dataset.
Carlos Magno
 


País: Brasil
Estado: PI
Cidade: Picos
Mensagens: 136
 Postado em: 26/7/2012 01:34:32 PM

Joel meu caro....funcionou como eu queria testando sua ideia...

Meu muito obrigado a todos que se dispuseram a ajudar.
Joel Rodrigues
 
 

 


País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 3122
 Postado em: 26/7/2012 02:24:49 PM

Show de bola!
Fico feliz em ter ajudado.
Estou encerrando este tópico.
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03