Fórum Digito Igual a Caixa Eletrônico #282468

20/05/2005

0

Senhores,

Boa tarde!
Alguém sabe como faço para formatar determinado valor de acordo com a digitação do usuário, ou seja parecido com os caixas rápido dos bancos?

Ex1: inicia assim se não me engano....
,0

Ex2: A medida que o usuário vai digitando o número vai avançando uma casa....
0,1

Ex3: A medida que o usuário vai digitando o número vai avançando uma casa....
1,00

Acho que é mais ou menos assim:

Agradeço desde já!


Mmbarros

Mmbarros

Responder

Posts

20/05/2005

Marco Salles

Primeira versão:


Var
 texto:String;


procedure TForm1.Edit1Enter(Sender: TObject);
begin
Edit1.SelStart:=Length(edit1.Text);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
 i:Integer;
 caracter:Char;
 cumprimento:Integer;
 TextoAux:String;
begin
texto:=Edit1.Text;
cumprimento:=Length(Edit1.Text);
if texto[cumprimento]=´0´ Then
  Texto[cumprimento]:=Key
else
  begin
    Texto:=Texto+Key;
    i:=pos(´,´,Texto);
    Caracter:=Texto[i+1];
    Texto[i]:=Caracter;
    Texto[i+1]:=´,´;
    if Texto[1]=´0´ Then
      begin
       i:=2;
       cumprimento:=Length(Texto);
       TextoAux:=´´;
        while i <= cumprimento do
           begin
            TextoAux:=TextoAux+Texto[i];
            i:=i+1;
           end;
        Texto:=TextoAux;
      end;
  end ;
Showmessage(Texto);
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
Edit1.OnChange:=Nil;
edit1.Text:=Texto;
Edit1.Onchange:=Edit1Change;
Edit1.SelStart:=Length(edit1.Text);;
end;



Responder

Gostei + 0

20/05/2005

Marco Salles

:arrow:

[b:0ca9fd4adc]Esqueci tb de colocar na propriedade Edit1.Text no Objecto Inspector

Propriedade Text =0,00 [/b:0ca9fd4adc]

Var
texto:String;


procedure TForm1.Edit1Enter(Sender: TObject); 
begin 
Edit1.SelStart:=Length(edit1.Text); 
end; 

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); 
var 
 i:Integer; 
 caracter:Char; 
 cumprimento:Integer; 
 TextoAux:String; 
begin 
texto:=Edit1.Text; 
cumprimento:=Length(Edit1.Text); 
if texto[cumprimento]=´0´ Then 
  Texto[cumprimento]:=Key 
else 
  begin 
    Texto:=Texto+Key; 
    i:=pos(´,´,Texto); 
    Caracter:=Texto[i+1]; 
    Texto[i]:=Caracter; 
    Texto[i+1]:=´,´; 
    if Texto[1]=´0´ Then 
      begin 
       i:=2; 
       cumprimento:=Length(Texto); 
       TextoAux:=´´; 
        while i <= cumprimento do 
           begin 
            TextoAux:=TextoAux+Texto[i]; 
            i:=i+1; 
           end; 
        Texto:=TextoAux; 
      end; 
  end ; 
Showmessage(Texto); 
end; 

procedure TForm1.Edit1Change(Sender: TObject); 
begin 
Edit1.OnChange:=Nil; 
edit1.Text:=Texto; 
Edit1.Onchange:=Edit1Change; 
Edit1.SelStart:=Length(edit1.Text);; 
end;



Responder

Gostei + 0

20/05/2005

Marco Salles

[b:bcddd52970]Segunda Versão[/b:bcddd52970]

Desculpe as versões amigo , e que esta ainda em fase de Testes

Acrescente ainda os eventos Edit1KeyUp e Edit1Click.. Ficando assim:

Var
 texto:String;


procedure TForm1.Edit1Enter(Sender: TObject);
begin
Edit1.SelStart:=Length(edit1.Text);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
 i:Integer;
 caracter:Char;
 cumprimento:Integer;
 TextoAux:String;
begin
texto:=Edit1.Text;
cumprimento:=Length(Edit1.Text);
if texto[cumprimento]=´0´ Then
  Texto[cumprimento]:=Key
else
  begin
    Texto:=Texto+Key;
    i:=pos(´,´,Texto);
    Caracter:=Texto[i+1];
    Texto[i]:=Caracter;
    Texto[i+1]:=´,´;
    if Texto[1]=´0´ Then
      begin
       i:=2;
       cumprimento:=Length(Texto);
       TextoAux:=´´;
        while i <= cumprimento do
           begin
            TextoAux:=TextoAux+Texto[i];
            i:=i+1;
           end;
        Texto:=TextoAux;
      end;
  end ;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
Edit1.OnChange:=Nil;
edit1.Text:=Texto;
Edit1.Onchange:=Edit1Change;
Edit1.SelStart:=Length(edit1.Text);;
end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
Edit1.SelStart:=Length(edit1.Text);
end;

procedure TForm1.Edit1Click(Sender: TObject);
begin
Edit1.SelStart:=Length(edit1.Text);
end;



Responder

Gostei + 0

20/05/2005

Mmbarros

Funcionou Beleza, muito obrigado.


Responder

Gostei + 0

20/05/2005

Marco Salles

Mais uma alteração amigo ... :lol: :lol: :lol:

[b:7a2065166e]Agora so no Evento OnKeySpace[/b:7a2065166e]

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
 i:Integer;
 caracter:Char;
 cumprimento:Integer;
 TextoAux:String;
begin
if Key in [´0´..´9´] Then
begin
  texto:=Edit1.Text;
  cumprimento:=Length(Edit1.Text);
  if texto[cumprimento]=´0´ Then
    Texto[cumprimento]:=Key
  else
    begin
      Texto:=Texto+Key;
      i:=pos(´,´,Texto);
      Caracter:=Texto[i+1];
      Texto[i]:=Caracter;
      Texto[i+1]:=´,´;
        if Texto[1]=´0´ Then
          begin
            i:=2;
            cumprimento:=Length(Texto);
            TextoAux:=´´;
              while i <= cumprimento do
                begin
                  TextoAux:=TextoAux+Texto[i];
                  i:=i+1;
                end;
              Texto:=TextoAux;
          end;
    end ;
  end
else
  begin
    if Key = 8 Then
      if Edit1.SelStart < Length(edit1.Text) Then
        texto:=´0,00´
      else
        begin
          texto:=Edit1.Text;
          texto[length(Texto)]:=´0´;
        end;
  end;
end;



Responder

Gostei + 0

20/05/2005

Marco Salles

Acredito que seja a Ultima Alteração

[b:57592bb44d]Coloque este código No Show[/b:57592bb44d]

procedure TForm1.FormShow(Sender: TObject);
begin
Texto:=´0´+DecimalSeparator+´00´;
Edit1.Text:=Texto;
end;


[b:57592bb44d]Altere mais uma vez o Evento OnKeyPress[/b:57592bb44d]

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
 i:Integer;
 caracter:Char;
 cumprimento:Integer;
 TextoAux:String;
begin
if Key in [´0´..´9´] Then
begin
  texto:=Edit1.Text;
  cumprimento:=Length(Edit1.Text);
  if texto[cumprimento]=´0´ Then
    Texto[cumprimento]:=Key
  else
    begin
      Texto:=Texto+Key;
      i:=pos(DecimalSeparator,Texto);
      Caracter:=Texto[i+1];
      Texto[i]:=Caracter;
      Texto[i+1]:=DecimalSeparator;
        if Texto[1]=´0´ Then
          begin 
            i:=2;
            cumprimento:=Length(Texto); 
            TextoAux:=´´;
              while i <= cumprimento do
                begin
                  TextoAux:=TextoAux+Texto[i]; 
                  i:=i+1;
                end; 
              Texto:=TextoAux;
          end;
    end ;
  end 
else
  begin 
    if Key = 8 Then
      if Edit1.SelStart < Length(edit1.Text) Then
        texto:=´0,00´
      else 
        begin
         texto:=Edit1.Text;
         Cumprimento:=Length(Texto);
         Texto[cumprimento]:=0;
         i:=pos(DecimalSeparator,Texto);
         Caracter:=Texto[i-1];
         Texto[i]:=Caracter;
         Texto[i-1]:=DecimalSeparator;
         if Texto[1]=DecimalSeparator Then
           Texto:=´0´+Texto;
        end;
  end;
end;


[b:57592bb44d]Os outros eventos Continuam como estão...[/b:57592bb44d]

Acho que ta bom :lol: :lol: :lol:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar