Carcleo 4 Denunciar post Postado Março 1, 2008 Ola Pessoal: Tenho no meu código uma parte que tem: procedure TfrmPrincipal.ImprimirClick(Sender: TObject); var Dia: Integer; Texto: String; begin Texto := ''; if InputQuery('Digite o Dia para recebimento','Impressão para Recebimento em casa',Texto) then begin try Dia := StrToInt(Texto); except ShowMessage('Dia inválido!'); Exit; end; end else begin Exit; end; Application.CreateForm(TfrmRelatorio,frmRelatorio); if not frmRelatorio.QryClientes.Locate('MelhorDia', Dia, []) then begin frmRelatorio.Close; ShowMessage('Registro não encontrado!'); Exit; end else begin frmRelatorio.QryClientes.Filter := 'MelhorDia = ' + inttostr(Dia); frmRelatorio.QryClientes.Filtered := true; frmRelatorio.QuickRepListagem.PreviewModal; frmRelatorio.Free; end; end; Nele tem uma inputquery, e eu preciso validar se a pessoa digitou nela letras ou numeros. Caso não tenha digitado numeros, imprimir na tela uma mensagem dizendo "Só aceita numeros". Outra coisa, é limitar o campo da inputquery a apenas 3 digitos "___"; Desde já meus agradecimentos. Carlos Rocha Compartilhar este post Link para o post Compartilhar em outros sites
Rodrigo Miss 1 Denunciar post Postado Março 1, 2008 No exemplo abaixo, em tempo de projeto vai dar uma violação, mais faça o exemplo abaixo, compile, e rode o projeto fora do delphi .... var Texto: String; begin Texto:= ''; if InputQuery('Digite o Dia para recebimento','Impressão para Recebimento em casa',Texto) then begin Try StrToInt(Texto); Except raise Exception.Create('Permitido somente números!'); End; if Length(Texto) > 3 then begin raise Exception.Create('Permitido somente 3 caracteres!'); end; end; Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Março 1, 2008 Entendi. Só que no caso de 3 digitos, eu quero fazer tipo uma mascara não permitindo um quarto digito. Obs.: não são 3 digitos e sim até 3 digitos Na verdade, eu queria usar a função abaixc para validar se foi ou não digitados numeros. Porem, não estou sabendo como usar-la no meu código(no caso, numa inputquery). function ExisteInt(Texto:String): Boolean; {Testa se em uma string existe um numero inteiro valido ou não} var i:integer; begin try i := StrToInt(Texto); Result := True; except Result := False; end; end; Compartilhar este post Link para o post Compartilhar em outros sites
Rodrigo Miss 1 Denunciar post Postado Março 1, 2008 Mais ta certo sua função .... mais você poderia fazer assim tbm .. function IsNumeric(const S: String): Boolean; var x: SmallInt; begin Result:= True; For x:= 1 to Length(S) do begin if not(S[x] in['0'..'9']) then begin Result:= False; Break; end; end; end; var Texto: String; begin if InputQuery('Digite o Dia para recebimento','Impressão para Recebimento em casa',Texto) then begin if not(IsNumeric(Texto)) then begin ShowMessage('Permitido somente numeros'); Exit; end; end; qto a montar uma mascara no InputQuery ... não tem como não ... se quiser isso mesmo, entao poderia criar um formulario normal, nele você colocaria um MaskEdit, e configurar o tamanho do form para um tamanho equivalente a de um inputquery .... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Março 1, 2008 Cara, tamos quase la só falta uma coisa: Preciso testar se se o dia digitado no campo texto da inputquery é menor que 1 ou mAior que 31 caso afirmativo dizer que o dia tem que ser entre 1 e 31; Tentei assim mas não deu certo: if ((Dia < 1) or (Dia > 31)) then begin ShowMessage('Dia tem quer de 1 até 31!'); exit; end;Ta +pra php né?Brincadeira. Compartilhar este post Link para o post Compartilhar em outros sites
Rodrigo Miss 1 Denunciar post Postado Março 1, 2008 a sintaxe esta correta! Precisa ver se a variavel Dia esta recebendo o valor corretamente ... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Março 1, 2008 Eis meu código completo. Por favor me ajude a encontrar o quee esta erraedo. obs: Esta dando para todo numero que digito que o valor é menor que 1 e maior que 31. Mesmo os que não são. unit principal; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ZConnection, StdCtrls, Buttons, ExtCtrls, DB, ZAbstractRODataset, ZAbstractDataset, ZDataset, jpeg; type TfrmPrincipal = class(TForm) funerplan: TZConnection; Fundo: TImage; cadastrar: TBitBtn; pesquizar: TBitBtn; sair: TBitBtn; sobre: TBitBtn; Imprimir: TBitBtn; procedure cadastrarClick(Sender: TObject); procedure sobreClick(Sender: TObject); procedure pesquizarClick(Sender: TObject); procedure sairClick(Sender: TObject); procedure ImprimirClick(Sender: TObject); function ExisteInt(Texto:String): Boolean; private { Private declarations } public { Public declarations } end; var frmPrincipal: TfrmPrincipal; implementation uses cadastrar, pesquizas, relatorio, sobre; {$R *.dfm} procedure TfrmPrincipal.cadastrarClick(Sender: TObject); begin if frmCadastrar = NIL then //cria o form se ele não foi criado ainda Application.CreateForm(tfrmCadastrar,frmCadastrar); frmCadastrar.Show; end; procedure TfrmPrincipal.sobreClick(Sender: TObject); begin if frmSobre = NIL then //cria o form se ele não foi criado ainda Application.CreateForm(tfrmSobre,frmSobre); frmSobre.Show; end; procedure TfrmPrincipal.pesquizarClick(Sender: TObject); begin if frmPesquizas = NIL then //cria o form se ele não foi criado ainda Application.CreateForm(tfrmPesquizas,frmPesquizas); frmPesquizas.Show; end; procedure TfrmPrincipal.sairClick(Sender: TObject); begin Close; end; function IsNumeric(const S: String): Boolean; var x: SmallInt; begin Result:= True; For x:= 1 to Length(S) do begin if not(S[x] in['0'..'9']) then begin Result:= False; Break; end; end; end; procedure TfrmPrincipal.ImprimirClick(Sender: TObject); var Dia: Integer; Texto: String; begin Texto := ''; Dia := 0; if InputQuery('Digite o Dia para recebimento','Impressão para Recebimento em casa',Texto) then begin if not(IsNumeric(Texto)) then begin ShowMessage('Permitido somente numeros'); Exit; end; if Length(Texto) > 3 then begin ShowMessage('Permitido até 3 caracteres'); Exit; end; if ((Dia < 1) or (Dia > 31)) then begin ShowMessage('Dia tem quer de 1 até 31!'); exit; end; try Dia := StrToInt(Texto); except ShowMessage('Dia inválido!'); Exit; end; end else begin Exit; end; Application.CreateForm(TfrmRelatorio,frmRelatorio); if not frmRelatorio.QryClientes.Locate('MelhorDia', Dia, []) then begin frmRelatorio.Close; ShowMessage('Registro não encontrado!'); Exit; end else begin frmRelatorio.QryClientes.Filter := 'MelhorDia = ' + inttostr(Dia); frmRelatorio.QryClientes.Filtered := true; frmRelatorio.QuickRepListagem.PreviewModal; frmRelatorio.Free; end; end; end. Compartilhar este post Link para o post Compartilhar em outros sites
Rodrigo Miss 1 Denunciar post Postado Março 1, 2008 Mais ai q ta o erro meu camarada... você ta atribuindo o valor para Dia depois q faz a validação se ele foi ou não informado corretamente ... Faça assim: if (StrToInt(Texto) < 1) or (StrToInt(Texto) > 31) then begin ShowMessage('Dia tem quer de 1 até 31!'); exit; end;E esqueça a variavel DIA... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Março 1, 2008 Ok. Agora deu certo. Terminei meu projeto. Bom, é claro que ao decorrer dos textes(para aprendizado), vão surgindo novas validações. Espero poder contar novamente com os amigos. Mas, sobre o meu código, para quem tiver um pouquinho de curiosidade, ficou assim. Vale a pena dar uma olhado. Muito Obrigado. unit principal; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ZConnection, StdCtrls, Buttons, ExtCtrls, DB, ZAbstractRODataset, ZAbstractDataset, ZDataset, jpeg; type TfrmPrincipal = class(TForm) funerplan: TZConnection; Fundo: TImage; cadastrar: TBitBtn; pesquizar: TBitBtn; sair: TBitBtn; sobre: TBitBtn; Imprimir: TBitBtn; procedure cadastrarClick(Sender: TObject); procedure sobreClick(Sender: TObject); procedure pesquizarClick(Sender: TObject); procedure sairClick(Sender: TObject); procedure ImprimirClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var frmPrincipal: TfrmPrincipal; implementation uses cadastrar, pesquizas, relatorio, sobre, Math; {$R *.dfm} procedure TfrmPrincipal.cadastrarClick(Sender: TObject); begin if frmCadastrar = NIL then //cria o form se ele não foi criado ainda Application.CreateForm(tfrmCadastrar,frmCadastrar); frmCadastrar.Show; end; procedure TfrmPrincipal.sobreClick(Sender: TObject); begin if frmSobre = NIL then //cria o form se ele não foi criado ainda Application.CreateForm(tfrmSobre,frmSobre); frmSobre.Show; end; procedure TfrmPrincipal.pesquizarClick(Sender: TObject); begin if frmPesquizas = NIL then //cria o form se ele não foi criado ainda Application.CreateForm(tfrmPesquizas,frmPesquizas); frmPesquizas.Show; end; procedure TfrmPrincipal.sairClick(Sender: TObject); begin Close; end; function IsNumeric(const S: String): Boolean; var x: SmallInt; begin Result:= True; For x:= 1 to Length(S) do begin if not(S[x] in['0'..'9']) then begin Result:= False; Break; end; end; end; procedure TfrmPrincipal.ImprimirClick(Sender: TObject); var Dia : Integer; Texto: String; begin Texto := ''; if InputQuery('Digite o Dia para recebimento','Impressão para Recebimento em casa',Texto) then begin If Texto = '' then begin ShowMessage('Qual o dia para o relatório? Você não preencheu!'); Exit; end; if not(IsNumeric(Texto)) then begin ShowMessage('Aqui, somente números são permitidos'); Exit; end; if Length(Texto) > 2 then begin ShowMessage('Permitido até 2 caracteres'); Exit; end; if (StrToInt(Texto) < 1) or (StrToInt(Texto) > 31) then begin ShowMessage('Dia entre 1 à 31!'); exit; end; try Dia := StrToInt(Texto); except ShowMessage('Dia inválido!'); Exit; end; end else begin Exit; end; Application.CreateForm(TfrmRelatorio,frmRelatorio); if not frmRelatorio.QryClientes.Locate('MelhorDia', Dia, []) then begin frmRelatorio.Close; ShowMessage('Registro não encontrado!'); Exit; end else begin frmRelatorio.QryClientes.Filter := 'MelhorDia = ' + inttostr(Dia); frmRelatorio.QryClientes.Filtered := true; frmRelatorio.QuickRepListagem.PreviewModal; frmRelatorio.Free; end; end; end. Compartilhar este post Link para o post Compartilhar em outros sites