Aparecer sinais + e - em numeros
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?
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?
Carlos Magno
Curtidas 0
Respostas
William
23/07/2012
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:
OBS.: Note que quando for negativo não precisa adicionar o sinal -.
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 -.
GOSTEI 0
Carlos Magno
23/07/2012
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.
GOSTEI 0
William
23/07/2012
Note que estou usando uma instrução linear:
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;
GOSTEI 0
Carlos Magno
23/07/2012
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.
GOSTEI 0
Carlos Magno
23/07/2012
Veja so como está.
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;
GOSTEI 0
William
23/07/2012
Não colega !!! Essa função é externa fica fora da procedure, quando for usá-la vc chama function, exemplo:
Nesse caso como os valores são de um dataset precisão ser formatados durante a criação do relatório.
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.
GOSTEI 0
Carlos Magno
23/07/2012
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:
qrdbtext36.text := FormataValor(essa parte onde estou errando);
GOSTEI 0
William
23/07/2012
Colega não esquenta ninguém nasce sabendo a programar, demora um certo tempo até pegar o jeito da coisa.
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.
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.
GOSTEI 0
Carlos Magno
23/07/2012
o campo se chama LODE
GOSTEI 0
Joel Rodrigues
23/07/2012
Cara, acho que vai ser:
qrdbtext36.text := FormataValor(tabela.FieldByName(´LODE´).AsFloat);
GOSTEI 0
Carlos Magno
23/07/2012
Vou testar, caso dê certo eu mudo o topico para resolvido
GOSTEI 0
Carlos Magno
23/07/2012
Não deu certo. esta dando erro justamente no QRDBText36.TEXT.
GOSTEI 0
Joel Rodrigues
23/07/2012
Carlos, por favor nunca deixe de especificar qual o erro que está ocorrendo.
GOSTEI 0
Carlos Magno
23/07/2012
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.
GOSTEI 0
Bruno Leandro
23/07/2012
Olá Carlos tente utilizar a propriedade Caption neste componente
GOSTEI 0
William
23/07/2012
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....
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....
GOSTEI 0
Carlos Magno
23/07/2012
Bruno..
Usei o caption, compilou, mas não retornou como eu queria, com o sinal de + antes do numero.
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.
GOSTEI 0
Bruno Leandro
23/07/2012
em que momento voce esta preenchendo o valor no OnPrint do componente ?
GOSTEI 0
William
23/07/2012
Só para eu entender, o valor númerico aparece mas o sinal + ou - não?
GOSTEI 0
Carlos Magno
23/07/2012
Bruno:
no procedure do FormCreate;
wllfl:
aparece o sinal de -, mas não o sinal + se o numero for positivo.
em que momento voce esta preenchendo o valor no OnPrint do componente ?
no procedure do FormCreate;
wllfl:
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.
GOSTEI 0
William
23/07/2012
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.
GOSTEI 0
Joel Rodrigues
23/07/2012
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.
Isso não resolveria? Aí não precisaria aplicar função de formatação.
GOSTEI 0
William
23/07/2012
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...
Só precisa diferenciar negativo de positivo...
GOSTEI 0
William
23/07/2012
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.
OBS.: Não atribua nenhum campo para esse QRDBText senão será concatenado ao valor do dataset.
QRDBText36.text := FormataValor(tabela.FieldByName(´LODE´).AsFloat);
OBS.: Não atribua nenhum campo para esse QRDBText senão será concatenado ao valor do dataset.
GOSTEI 0
Carlos Magno
23/07/2012
Joel meu caro....funcionou como eu queria testando sua ideia...
Meu muito obrigado a todos que se dispuseram a ajudar.
Meu muito obrigado a todos que se dispuseram a ajudar.
GOSTEI 0
Joel Rodrigues
23/07/2012
Show de bola!
Fico feliz em ter ajudado.
Estou encerrando este tópico.
Fico feliz em ter ajudado.
Estou encerrando este tópico.
GOSTEI 0