validar os dados introduzidos na Inputquery
Seria possível validar os dados introduzidos na Inputquery, por exemplo se eu deixar o campo em branco e teclar enter me retornar um showmessage.
Grato.
Grato.
David Sobral
Curtidas 0
Respostas
Joel Rodrigues
25/03/2013
Sim, amigo. Você associa o valor digitado na InputQuery a uma variável. Depois, pode fazer o que bem entender com ela.
Abraço.
Abraço.
GOSTEI 0
David Sobral
25/03/2013
Joel consegui efetuar as validações e aproveitando eu consigo usar onkeypress no botão para validar números, pois estou colocando o seguinte código:
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.
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.
GOSTEI 0
Danillo Camargo
25/03/2013
Joel consegui efetuar as validações e aproveitando eu consigo usar onkeypress no botão para validar números, pois estou colocando o seguinte código:
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.
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,
GOSTEI 0
David Sobral
25/03/2013
Danillo
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
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
GOSTEI 0
Marco Salles
25/03/2013
Bom dia David Sampaio ..
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
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
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
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
GOSTEI 0