Problemas com formatação...

Delphi

16/03/2005

e aí comunidade..presciso de um help...

analizem ...tenho um edit onde vou digitar um certo valor...

gostaria que formatace dessa forma
Digitei 500 aparece 500,00
Digitei 5000 aparece 5000,00 ( sem ponto msm )


query1.fieldbyname(´valor´).value:=formatfloat(´ ,#,,0.00´,v_Valor);

queria que funcionace no lugar do código acima...

t+ galera...


Gigatel

Gigatel

Curtidas 0

Respostas

Andremuller

Andremuller

16/03/2005

Tem um componente pronto que faz isso: TCurrencyEdit da Rx.
Troque a propriedade DisplayFormat para 0.00;- 0.00 e o resultado será o formato que estás procurando.


GOSTEI 0
Gigatel

Gigatel

16/03/2005

Más onde fica isso ? é um componete ?

Tem um componente pronto que faz isso: TCurrencyEdit da Rx. Troque a propriedade DisplayFormat para 0.00;- 0.00 e o resultado será o formato que estás procurando.



GOSTEI 0
Andremuller

Andremuller

16/03/2005

Sim, mas o componentes Rx foram incorporados ao Project-Jedi (http://homepages.borland.com/jedi/jvcl/)
então pode baixar dali.

Também dá pra fazer um tratamento semelhante da seguinte forma

procedure TForm1.Edit1Exit(Sender: TObject);
var
  oEdt: TEdit;
begin
  oEdt := Sender as TEdit;
  if trim(oEdt.Text) <> ´´ then
  try
    oEdt.Text := FormatFloat(´0.00´, StrToFloat(oEdt.Text));
  except
    ShowMessage(´Valor incorretamente digitado.´);
    oEdt.SetFocus;
  end;
end;


aí é só apontar os outros eventos onExit dos teus outros edits para esse acima.

Resolveu?


GOSTEI 0
Marcio.theis

Marcio.theis

16/03/2005

Você tb pode baixar este [url=http://users.cjb.net/mmaatt/tredit.zip]Edit[/url] , no qual ele faz a operação de formatar campo para mostrar, podendo vc escolher


GOSTEI 0
Gigatel

Gigatel

16/03/2005

e tem outra coisa eu estou querendo é eliminar o ponto ( no caso do valor ser igual ou maior que mil ) este ponto está sacaneando alguns meses de trabalho... tem que ser em programação, pois a função vai ficar num código onde é gerado parcelas o edit acima foi só um exemplo.

Más onde fica isso ? é um componete ? [quote:193e270bb3=´andremuller´]Tem um componente pronto que faz isso: TCurrencyEdit da Rx. Troque a propriedade DisplayFormat para 0.00;- 0.00 e o resultado será o formato que estás procurando.
[/quote:193e270bb3]


GOSTEI 0
Andremuller

Andremuller

16/03/2005

Aquela função que postei ou o DisplayFormat que informei eliminam o ponto.
Agora é só tu decidir como resolver.
Se nenhuma das duas opções te resolve o problema me avisa porque que a gente pensa em outra coisa.


GOSTEI 0
Gigatel

Gigatel

16/03/2005

É porque tenho um programinha que gera notas promissórias, só descobri que dava pau depois de um tempão de uso, vejam :

Notas abaixo de 999,99 reais o programa computa e fas os calculos sem problemas . passou de 1.000,00 dá a seguinte mensagem.

1.000,00 is not a valid floating point value.

issó tá me deixando de cabelo em pé, custei a botar o programa funcionar e agora dá este pau danado...por isso a fomatação teria que ser algo assim 1000,00 e não 1.000,00

vlw...


GOSTEI 0
Gigatel

Gigatel

16/03/2005

isso num fica num edit naum, é na hora de gerar as parcelas...

É porque tenho um programinha que gera notas promissórias, só descobri que dava pau depois de um tempão de uso, vejam : Notas abaixo de 999,99 reais o programa computa e fas os calculos sem problemas . passou de 1.000,00 dá a seguinte mensagem. 1.000,00 is not a valid floating point value. issó tá me deixando de cabelo em pé, custei a botar o programa funcionar e agora dá este pau danado...por isso a fomatação teria que ser algo assim 1000,00 e não 1.000,00 vlw...



GOSTEI 0
Andremuller

Andremuller

16/03/2005

Cara mas como tu chega nessa formatação 1.000,00 ???
Tu tá lendo isso do banco? Armazenando que que formato então?

Se tu estiver gerando esse número na hora como tu tá chegando nessa formatação, ele está como string?


GOSTEI 0
Marcio.theis

Marcio.theis

16/03/2005

Acredito que vc esta inserindo este valor via insert no banco, por isto gerando o erro, sendo que vc pode resolver isto utilizando uma função simples, já passei por isto e criei uma função asim:

function FormataNumero(num: string): string;
var
   str: string;
   x: integer;
begin
str:=num;
for x:=1 to length(str) do
    if str[x] = ´,´ then
        str[x]:=´.´;
FormataNumero:=str;
end;


no qual para usar a função você somente passa o seu valor para string da seguinte forma

FormataNumero(FloatToStr(tblReceberVLRECEBER.Value));

sendo que assim ira lhe retornar uma string podendo ser inserido via insert no banco.


GOSTEI 0
Silviogs

Silviogs

16/03/2005

Olá Gigatel

o componentes RX que se fala, está dispoível aqui na clubedelphi para Download na seçao componentes-diversos.

Atenciosamente


Silvio Guedes


GOSTEI 0
Gigatel

Gigatel

16/03/2005

Postei 2 screns do meu programa em execução e seus respctivos erros talves fica mais fácil o entendimento...

http://geocities.yahoo.com.br/gigatelsoft/01.JPG
http://geocities.yahoo.com.br/gigatelsoft/02.JPG


GOSTEI 0
Andremuller

Andremuller

16/03/2005

Esse grid é DBAware?
Se for então quando tu for calcular o valor como tu está acessando esse campo?
porque se tu acessar da forma TeuField.AsFloat não deve dar problema

Cara, senão, para facilitar, manda o trecho de código que tá dando esse erro.
Não precisa ser toda a função, as linhas que geram o erro já vão ajudar a entender melhor.


GOSTEI 0
Gigatel

Gigatel

16/03/2005

Esse grid é DBAware? Se for então quando tu for calcular o valor como tu está acessando esse campo? porque se tu acessar da forma TeuField.AsFloat não deve dar problema Cara, senão, para facilitar, manda o trecho de código que tá dando esse erro. Não precisa ser toda a função, as linhas que geram o erro já vão ajudar a entender melhor.



Tá certo... vamos explicar...na primeira imagem é onde funciona o cadastro das notas e a segunda imagem é onde faço a manutenção das notas ( baixa, juros, descontos etc )...vamos lá.

no desenho o grid tem um valor...( 1.000 ) este valor só aparece depois que eu pressionar o botão concluir , neste botão se processa várias coisas, faz a divisão se nescessário ( no exemplo veja que só tem uma parcela )e lança o mesmo na contas á receber... o código responsável pela parcela é este abaixo, e é onde tem uma função de formatação que vai ser gravado num banco de dados onde os mesmo serão calculados posteriormente ( e aí que tá problema ).

procedure T_FormContas.Geraparcelas(Sender: TObject);
var
v_count,v_parc: integer;
v_date:Tdatetime;
v_valor:REAL;
begin
Table2.Edit;
Table2Valor.value := edvalor.text;
Table2Parcelas.value := edparcela.Text;
Table2DataCad.Value := formatDateTime(´dd/mm/yyyy´,Date);
Table2Tipo.Value := ´C´;
Table2.Refresh;
v_date:=strtodate(eddata.text)+ strtofloat(ComboBox2.text);
v_count:=strtoint(edparcela.text);
v_parc:=1;
Query1.Open;
while v_count>0 do
begin
Query1.insert;
Query1.FieldByName(´QuantParcelas´).asinteger:=(v_parc);
V_VALOR:=((strtofloat(edvalor.text)-strtofloat(edentrada.text)))/strtoint((edparcela.text));
query1.fieldbyname(´valor´).value:=formatfloat(´ ,#,,00´,v_Valor);
query1.FieldByName(´Vencimento´).asdatetime:=v_date;
Query1CodControle.value := Table2CodSistema.value;
Query1Endereco.value := Table2Endereco.Value;
Query1Nome.value := Table2Nome.Value;
Query1Complemento.value := Table2Complemento.value;
Query1Bairro.value := Table2Bairro.value;
Query1Cidade.value := Table2Cidade.Value;
Query1UF.value := Table2UF.value;
Query1CPFCNPJ.value := Table2CPFCNPJ.value;
Query1Discricao.value := Table2Discricao.value;
Query1DATA_CAD.Value := formatDateTime(´dd/mm/yyyy´,Date);
Query1CodAcess.Value := Table1Codigo.value;
Query1.post;
v_count:=v_count-1;
v_parc:=v_parc+1;
v_date:=v_date+30;
query1.next;
end;
Query1.Close;
Query1.open;
Query1.filtered := true;
Query1.Filter := ´CodControle = ´ + Floattostr(Table2CodSistema.value);
if MessageDlg(´Deseja imprimir promissórias ?´,
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
Query1.Close;
// Zreport1.Print;
// ZReport1.Preview;
Query1.open;
Query1.filtered := true;
Query1.Filter := ´CodControle = ´ + Floattostr(Table2CodSistema.value);
end;
end;

agora no segundo desenho é onde faço a mantenção de valores ( akeles processados pelo código acima ), umas da funções e calcular o quanto se deve de uma nota ( uma nota pode ter várias parcelas e o programa calcula isso ) o problema acontece nesta hora..
veja o código...

Neste código filtra a tabela relacionada para exibir somentes dados referente a nota.

procedure T_FormCRReceb.ListaTab2;
begin
Table2.filtered := true;
Table2.Filter := ´CodControle = ´ + Floattostr(Table1CodSistema.value);
end;

Aki ele calcula os valores fitrados na função acima e exibe em um caption
acho que o problema esteja num função desta de calculo...

procedure T_FormCRReceb.ListaTab2Calc;
var
i,r: integer;
n: real;
begin
n:= 0;
Table2.open;
r:= Table2.RecordCount;
Table2.First;
for i:=1 to r do
begin
n:= n + Table2Valor.asfloat;
Table2.Next;
end;
Label8.caption:= formatfloat(´R$ ,#,,0.00´,n);
end;

vejam e deem sua opnião...


GOSTEI 0
Andremuller

Andremuller

16/03/2005

Cara tu debugou esse código pra saber exatamente em qual linha que está dando esse pau?

se for em

V_VALOR:=((strtofloat(edvalor.text)-strtofloat(edentrada.text)))/strtoint((edparcela.text));
query1.fieldbyname(´valor´).value:=formatfloat(´ ,#,,00´,v_Valor);


tente fazer
query1.fieldbyname(´valor´).AsFloat := (strtofloat(edvalor.text)-strtofloat(edentrada.text))/strtoint(edparcela.text);



Dica: sempre que tu enviar código para o fórum, seleciona ele e clica em ´Code´


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

16/03/2005

o campo valor é de que tipo? se for FLOAT, não precisa usar o FormatFloat.

query1.fieldbyname(´valor´).asfloat:=v_Valor;


GOSTEI 0
Fred

Fred

16/03/2005

Simplesmente use a mascara ´0.00´ ao inves de ,#,,00´ ou ,0.00 e etc.!!!!!!!!! 8)


GOSTEI 0
Gigatel

Gigatel

16/03/2005

deu certo más não formata mais ( melhor assim ) fica bem porco o serviço más funciona...

como corrigir isso para funcionar com akele código ?

var
a,b,c,d:real;
e,f:string;
begin
a:= strtofloat(Edit6.text);
b:= strtofloat(Edit2.text);
c:= strtofloat(Edit1.text);
e:= FloatToStr((StrToFloat(Edit6.Text)*StrToFloat(Edit7.Text))/100);
f:= FloatToStr((StrToFloat(Edit6.Text)*StrToFloat(Edit7.Text))/100);
d:= a+b-c+strtofloat(e);
edit3.Text:= floattostr(d);
edit3.Text:= format(´¬n´, [strtofloat(edit3.Text)]);


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

16/03/2005

procedure T_FormContas.Geraparcelas(Sender: TObject);
var
  v_count,v_parc: integer;
  v_date: Tdatetime;
  v_valor: real;
begin
  Table2.Edit;
  Table2Valor.AsFloat := strtofloat(edvalor.text);
  Table2Parcelas.AsInteger := strtoint(edparcela.Text);
  Table2DataCad.AsDate := formatDateTime(´dd/mm/yyyy´,Date);
  Table2Tipo.AsString := ´C´;
  Table2.Post;

  v_date := strtodate(eddata.text) + strtofloat(ComboBox2.text);
  v_count := strtoint(edparcela.text);
  v_valor := RoundTo((Table2Valor.AsFloat-strtofloat(edentrada.text))/Table2Parcelas.AsInteger,-2);

  Query1.Open;
  
  for v_parc := 1 to v_count do
  begin
    Query1.insert;
    Query1.FieldByName(´QuantParcelas´).asinteger := v_parc;

    // aqui ajusta o resultado caso uma parcela tenha mais de 2 casas decimais
    // o ajuste será feito na primeira parcela
    if v_parc=1
    then query1.fieldbyname(´valor´).AsFloat := Table2Valor.AsFloat - (v_Valor * (v_count-1))
    else query1.fieldbyname(´valor´).AsFloat := v_Valor;

    query1Vencimento.asdatetime := v_date;
    Query1CodControle.asinteger := Table2CodSistema.asinteger;
    Query1Endereco.asstring := Table2Endereco.asstring;
    Query1Nome.asstring := Table2Nome.asstring;
    Query1Complemento.asstring := Table2Complemento.asstring;
    Query1Bairro.asstring := Table2Bairro.asstring;
    Query1Cidade.asstring := Table2Cidade.asstring;
    Query1UF.asstring := Table2UF.asstring;
    Query1CPFCNPJ.asstring := Table2CPFCNPJ.asstring;
    Query1Discricao.asstring := Table2Discricao.asstring;
    Query1DATA_CAD.asdate := formatDateTime(´dd/mm/yyyy´,Date);
    Query1CodAcess.Value := Table1Codigo.value;
    Query1.post;

    v_date := v_date + 30;
  end;

  Query1.Close;
  Query1.filtered := true; // filtered não é recomendado. torna o sistema lento.
  Query1.Filter := ´CodControle = ´ + Floattostr(Table2CodSistema.value);
  Query1.Open;

  if MessageDlg(´Deseja imprimir promissórias ?´, 
  mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    Query1.Close;
//   Zreport1.Print;
//   ZReport1.Preview;
    Query1.open;
    Query1.filtered := true;
    Query1.Filter := ´CodControle = ´ + Floattostr(Table2CodSistema.value);
  end;
end;

obs: é necessário adicionar a unit Math na cláusula uses.

agora no segundo desenho é onde faço a mantenção de valores ( akeles processados pelo código acima ), umas da funções e calcular o quanto se deve de uma nota ( uma nota pode ter várias parcelas e o programa calcula isso ) o problema acontece nesta hora..
veja o código...

Neste código filtra a tabela relacionada para exibir somentes dados referente a nota.

procedure T_FormCRReceb.ListaTab2;
begin
  Table2.filtered := true;
  Table2.Filter := ´CodControle = ´ + Floattostr(Table1CodSistema.value);
end;


Aki ele calcula os valores fitrados na função acima e exibe em um caption
acho que o problema esteja num função desta de calculo...

procedure T_FormCRReceb.ListaTab2Calc;
var
  n: real;
begin
  n:= 0;
  Table2.Open;
  Table2.First;
  while not Table2.Eof do
  begin
    n := n + Table2Valor.asfloat;
    Table2.Next;
  end;
  Label8.caption:= Format(´¬10.2d´,[n]);
end;



GOSTEI 0
Gigatel

Gigatel

16/03/2005

Emerson está dando este erro...

[Error] Unit13.pas(400): Undeclared identifier: ´AsDate´


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

16/03/2005

desculpe... deveria ser AsDateTime


GOSTEI 0
Gigatel

Gigatel

16/03/2005

desculpe... deveria ser AsDateTime


agora deu certinho...más encontrei outro bug...

aki tbm dá erro ..

Label8.caption:= Format(´¬10.2d´,[n]);


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

16/03/2005

o correto é

Label8.caption:= Format(´¬10.2f´,[n]);


GOSTEI 0
Gigatel

Gigatel

16/03/2005

o correto é Label8.caption:= Format(´¬10.2f´,[n]);


funcionol...só mais uma dúvida...como ficaria o código acima se eu usar um edit ...tipo coloco 200 aparece 200,00 daria para fezer neste código ?

Valeu mesmo ...acho que agora meu problema ficou bem menor e acho que dá para resolver...sem ficar pertubando o povo daki... más valeu mesmo...


GOSTEI 0
Gigatel

Gigatel

16/03/2005

esta função tem como colocar um edit ?

Label8.caption:= Format(´¬10.2f´,[n]);


GOSTEI 0
POSTAR