Problemas com formatação...
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...
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
Curtidas 0
Respostas
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.
Troque a propriedade DisplayFormat para 0.00;- 0.00 e o resultado será o formato que estás procurando.
GOSTEI 0
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
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
aí é só apontar os outros eventos onExit dos teus outros edits para esse acima.
Resolveu?
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
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
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
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.
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
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...
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
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
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?
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
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:
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.
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
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
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
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
http://geocities.yahoo.com.br/gigatelsoft/01.JPG
http://geocities.yahoo.com.br/gigatelsoft/02.JPG
GOSTEI 0
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.
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
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
16/03/2005
Cara tu debugou esse código pra saber exatamente em qual linha que está dando esse pau?
se for em
tente fazer
Dica: sempre que tu enviar código para o fórum, seleciona ele e clica em ´Code´
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
16/03/2005
o campo valor é de que tipo? se for FLOAT, não precisa usar o FormatFloat.
query1.fieldbyname(´valor´).asfloat:=v_Valor;
query1.fieldbyname(´valor´).asfloat:=v_Valor;
GOSTEI 0
Fred
16/03/2005
Simplesmente use a mascara ´0.00´ ao inves de ,#,,00´ ou ,0.00 e etc.!!!!!!!!! 8)
GOSTEI 0
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)]);
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
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
16/03/2005
Emerson está dando este erro...
[Error] Unit13.pas(400): Undeclared identifier: ´AsDate´
[Error] Unit13.pas(400): Undeclared identifier: ´AsDate´
GOSTEI 0
Emerson Nascimento
16/03/2005
desculpe... deveria ser AsDateTime
GOSTEI 0
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
16/03/2005
o correto é
Label8.caption:= Format(´¬10.2f´,[n]);
Label8.caption:= Format(´¬10.2f´,[n]);
GOSTEI 0
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
16/03/2005
esta função tem como colocar um edit ?
Label8.caption:= Format(´¬10.2f´,[n]);
Label8.caption:= Format(´¬10.2f´,[n]);
GOSTEI 0