validar os dados introduzidos na Inputquery

Delphi

25/03/2013

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.
David Sobral

David Sobral

Curtidas 0

Respostas

Joel Rodrigues

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.
GOSTEI 0
David Sobral

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.
GOSTEI 0
Danillo Camargo

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.


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

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
GOSTEI 0
Marco Salles

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


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
POSTAR