Aparecer sinais + e - em numeros

Delphi

23/07/2012

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?
Carlos Magno

Carlos Magno

Curtidas 0

Respostas

William

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:

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

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

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

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

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

William

23/07/2012

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

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

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

William

23/07/2012

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

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

Carlos Magno

23/07/2012

o campo se chama LODE
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

23/07/2012

Cara, acho que vai ser:

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

Carlos Magno

23/07/2012

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

Carlos Magno

23/07/2012

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

Joel Rodrigues

23/07/2012

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

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

Bruno Leandro

23/07/2012

Olá Carlos tente utilizar a propriedade Caption neste componente
GOSTEI 0
William

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....
GOSTEI 0
Carlos Magno

Carlos Magno

23/07/2012

Bruno..

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

Bruno Leandro

23/07/2012

em que momento voce esta preenchendo o valor no OnPrint do componente ?
GOSTEI 0
William

William

23/07/2012

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

Carlos Magno

23/07/2012

Bruno:
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

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

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.
GOSTEI 0
William

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...
GOSTEI 0
William

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.

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

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.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

23/07/2012

Show de bola!
Fico feliz em ter ajudado.
Estou encerrando este tópico.
GOSTEI 0
POSTAR