validar os dados introduzidos na Inputquery

25/03/2013

3

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.
Responder

Posts

25/03/2013

Joel Rodrigues

Sim, amigo. Você associa o valor digitado na InputQuery a uma variável. Depois, pode fazer o que bem entender com ela.
Abraço.
Responder

25/03/2013

David Sobral

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.
Responder
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.


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,
Responder

26/03/2013

David Sobral

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
Responder

26/03/2013

Marco Salles

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


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

http://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
Responder