validar os dados introduzidos na Inputquery
25/03/2013
0
Grato.
David Sobral
Posts
25/03/2013
Joel Rodrigues
Abraço.
25/03/2013
David Sobral
if not (Key in ['0'..'9',',',Chr(8), Chr(13)]) then
begin
ShowMessage('Somente números são válidos');
key:= #0;
end;
E não está dando certo.
26/03/2013
Danillo Camargo
if not (Key in ['0'..'9',',',Chr(8), Chr(13)]) then
begin
ShowMessage('Somente números são válidos');
key:= #0;
end;
E não está dando certo.
Boa noite David. Tudo bem?
Utilize a função "CharInSet" ao invés do "in". A partir do Delphi 2009 foi implementado suporte a unicode e a utilização do "in" pode resultar em "warnings" na sua aplicação.
uses SysUtils; if not CharInSet(Key, ['0'..'9']) then begin key:= #0; ShowMessage('Somente números são válidos'); end;
Para mais informações sobre a implementação unicode e os "warnings":
[url]
http://www.andreanolanusse.com/pt/delphi-unicode-entendo-os-avisos-warning-do-compilar-sua-aplicacao/#respond
[/url]
Qualquer dúvida estou à disposição,
Atenciosamente,
26/03/2013
David Sobral
Coloquei o código conforme você informou no onkeypress e o erro permanece, salientando que estou utilizando o onkeypress do button e estou utilizando o inputquery.
Segue o código:
var
I: Byte;
num: string;
converte_num, maior: Integer;
begin
maior:= 0;
for I := 1 to 5 do
begin
if InputQuery('Informe o ' + IntToStr(I)+ 'º valor','',num) then
while num = '' do
begin
ShowMessage('O valor tem que ser informado');
InputQuery('Informe o ' + IntToStr(I)+ 'º valor','',num);
end;
converte_num:= StrToInt(num);
if maior < converte_num then
maior:= converte_num;
num:= '';
end;
ShowMessage('O maior valor é ' + IntToStr(maior));
end;
Atenciosamente,
David
26/03/2013
Marco Salles
Pelo que estou entendendo vc quer validar na própria caixa de edição do InputBox que pe uma Janela do próprio Delphi
Vc consegue isto com algum sacrifício extra
vamos ver se vc consegue entender
Declare a constante abaixo da secção Uses do seu Form
Const
InputBoxMsg = WM_USER + 123;
na secção Private do seu form declare dois métodos
procedure InputBoxSet(var Msg: TMessage); message InputBoxMsg;
procedure SoNumeros(Sender: TObject; var Key: Char);
De Cntrl+C para o Delphi implementar o Cabeçalho desses dois métodos e escreva
procedure TSEUFORM.InputBoxSet(var Msg: TMessage); var i: integer; begin for i:=0 to pred(Screen.Forms[0].ControlCount) do begin if Screen.Forms[0].Controls[i] is TEdit then begin Tedit(Screen.Forms[0].Controls[i]).OnKeyPress:=SoNumeros; end; end; end;
procedure TSEUFORM.SoNumeros(Sender: TObject; var Key: Char); begin if not (CharInSet(Key,['0'..'9',FormatSettings.DecimalSeparator,#8])) then key:=#0; if (pos(FormatSettings.DecimalSeparator,Tedit(sender).Text) > 0)and (not (CharInSet(Key,['0'..'9',#8]))) then Key:=#0; end;
Agora seu ImputBox estará preparado para Aceitar Numeros do tipo Currency
Para Utiliza-lo é necessário enviar a mensagem Assincrona para ser processada com retardo
Faça assim
PostMessage(Handle, InputBoxMsg, 0, 0); nomevar := inputbox('Desconto dado em porcentagem','Digite um valor','');
Olha so , este exemplo eu tirei daqui
https://www.devmedia.com.br/forum/curiosida-e-duvida-com-inputbox/429607
mas vc pode adaptar sem nenhuma dificuldade a sua necessidade particular pois ele abre um horizonte
de qualquer modo caso dúvida retorne
[]sds
Clique aqui para fazer login e interagir na Comunidade :)