Ir para conteúdo
Fórum Script Brasil
  • 0

Mskedits E Números E Vírgulas


Zolhos

Pergunta

negócio é o seguinte

como eu faço pra deixar o cara só digitar números num maskedit?

OU

como eu faço pra na hora qo cara aperte um botão ele verifique se só tem número lá? eu lembro que no VB a gente usava ISNUMERIC(nomeDoTxt)

outra coisa:

como definir o número de casas decimais máximo como 2 números depois da vírgula?

eu sei que isso parece tosko e fácil

mas ainda sou meio novo em delphi....

obrigado pela ajuda

estou aprendendo MUITO com esse fórum

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

cara

Somente numero no Edit

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

var cValor : Char;

begin

if ( Key in ['.',','] ) then

begin

Key := #44;

if Pos(Key,cValor) <> 0 then

Begin

Beep;

Key := #0;

End;

End;

if not ( Key in ['0','1','2','3','4','5','6','7','8','9',',',#8,#7] ) then

Begin

Beep;

Key := #0;

End;

end;

Para permitir somente numero no edit é o seguinte:

Edit1.text := FormatFloat('0.00',valor);

Onde valor é a variavel com o valor correspondente

Alexandre

Link para o comentário
Compartilhar em outros sites

  • 0

nossa valeu!

olha como eu adaptei os seus códigos:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var cValor : Char;
begin
if ( Key in ['.',','] ) then
begin
Key := #44;
if Pos(Key,cValor) <> 0 then
Begin
Beep;
Key := #0;
End;
End;
if not ( Key in ['0','1','2','3','4','5','6','7','8','9',',',#8,#7] ) then
Begin
Beep;
Key := #0;
End;

end;



procedure TForm1.Edit1Exit(Sender: TObject);
begin
valor := strToFloat(edit1.text);
Edit1.text := FormatFloat('0.00',valor);
end;
declarei a variável valor LÁAAAAAAA encima da unit mas fiquei com uma dúvida o que seria CVALOR? não entendi essa parte...
if Pos(Key,cValor) <> 0 then
        Begin
             Beep;
             Key := #0;
além disso... eu tava pensando como impedir uma pessoa de digitar 2 vírgulas? daí eu fiz esse código mas parece q não deu muito certo...
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var cValor : Char;
virgulas : integer;
begin
if ( Key in ['.',','] ) then
   begin
        if virgulas = 1 then
           begin
                key := #0;
           end
        else
            begin
                 Key := #44;
                 virgulas := 1;
                 if Pos(Key,cValor) <> 0 then
                    Begin
                         Beep;
                         Key := #0;
                    End;

            End;
end;
if not ( Key in ['0','1','2','3','4','5','6','7','8','9',',',#8,#7] ) then
   Begin
        Beep;
        Key := #0;
   End;

end;

como poderia fazer?

o que é o cvalor?

Link para o comentário
Compartilhar em outros sites

  • 0

cara não testei mas acho que pode tirar isso, estou sem o delphi aki mas vou tentar te dar uma luz sobre a questão das virgulas.

Tente colocar uma variavel para receber o numero de virgulas que existem em uma variavel que recebera o valor que esta no edit, você tera que fazer um algoritimo para verificar caracter por caracter e se for igual a uma "," a variavel virgula recebe +1 e quando a varialvel virgula for > 1 ele da uma mensagem ou faz o que você quiser muda esssa virgula por ponto sei la...

Deu pra entender qualquer coisa posta ai

falou

Alexandre

Link para o comentário
Compartilhar em outros sites

  • 0

como relação as virgulas.

Você pode fazer uma coisa bem simples (boba) biggrin.gif.

No OnKeyDown do Edit:

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key=110) or (Key=188) then begin
     ShowMessage('Virgula Não Pode. HeHeHe!!! :)');
     Edit1.Text := '';
  end;
end;

Abs. wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

voltei a programar meu projeto =D (fomos classificados pra segunda fase =D)

descobri o bug

é q cada vez q você apertava a tecla de vírgula a variável "vírgula" recebia o valor zero novamente, então ela sempre zerava

pra resolver o problema teriamos que declarar a variavel virgula no projeto (não no objeto) e teriamos que faze-la receber o valor "0" em outro lugar (form load por exemplo)

axo q vo tentar outra maneira de fazer isso =P

EDIT

finalmente consegui!

fiz assim:

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
var
virgulas, tamanho, i : integer;
letra : string;
begin
if ( Key in ['.',','] ) then
   begin
        i := 1;
        virgulas := 0;
        tamanho := length(edit2.text);
        if tamanho = 0 then
           begin
                key := #0;
                exit;
           end;
        while i <= tamanho do
              begin
                   letra := (edit2.text[i]);
                   if (letra = ',') or (letra = '.') then
                      begin
                           virgulas := virgulas + 1;
                      end;
                   i := i + 1;
              end;
        if virgulas > 0 then
           begin
                key := #0;
           end
        else
            begin
                 key := #44;
            end
   end
else
    begin
         if not ( Key in ['0','1','2','3','4','5','6','7','8','9',',',#8,#7] ) then begin
            Key := #0;
         end;
    end;
end;

mas... poxa... será q em TODO bendito maskedit q tiver no meu projeto vai ter que ter issoaí?

vocês programadores, que sempre programaram a vida inteira, não sabem de nenhuma maneira mais fácil de deixar o usuário poder entrar apenas números que o delphi aceite como float?

não acredito q vocês nunca fizeram isso =/

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Artur --

Aí cara....

tenta isso....

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

if ((Key in ['0'..'9'] = False) and (Word(Key) <> VK_BACK)) then

Key := #0;

end;

pra mim deu certo !!!

voltei a programar meu projeto =D (fomos classificados pra segunda fase =D)

descobri o bug

é q cada vez q você apertava a tecla de vírgula a variável "vírgula" recebia o valor zero novamente, então ela sempre zerava

pra resolver o problema teriamos que declarar a variavel virgula no projeto (não no objeto) e teriamos que faze-la receber o valor "0" em outro lugar (form load por exemplo)

axo q vo tentar outra maneira de fazer isso =P

EDIT

finalmente consegui!

fiz assim:

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
var
virgulas, tamanho, i : integer;
letra : string;
begin
if ( Key in ['.',','] ) then
   begin
        i := 1;
        virgulas := 0;
        tamanho := length(edit2.text);
        if tamanho = 0 then
           begin
                key := #0;
                exit;
           end;
        while i <= tamanho do
              begin
                   letra := (edit2.text[i]);
                   if (letra = ',') or (letra = '.') then
                      begin
                           virgulas := virgulas + 1;
                      end;
                   i := i + 1;
              end;
        if virgulas > 0 then
           begin
                key := #0;
           end
        else
            begin
                 key := #44;
            end
   end
else
    begin
         if not ( Key in ['0','1','2','3','4','5','6','7','8','9',',',#8,#7] ) then begin
            Key := #0;
         end;
    end;
end;

mas... poxa... será q em TODO bendito maskedit q tiver no meu projeto vai ter que ter issoaí?

vocês programadores, que sempre programaram a vida inteira, não sabem de nenhuma maneira mais fácil de deixar o usuário poder entrar apenas números que o delphi aceite como float?

não acredito q vocês nunca fizeram isso =/

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,7k
×
×
  • Criar Novo...