Curiosida e dúvida com inputbox
23/11/2012
0
procedure TFFinalizaPedido.SpeedButton5Click(Sender: TObject); var nomevar : String; N, C : Integer; begin if CheckBox1.Checked then begin nomevar := inputbox('Desconto dado em porcentagem','Digite um valor',''); val (nomevar , N, C); if c = 0 then begin Showmessage('Funcionando! vc te numeros'); end
a outra dúvida é quando executa o inputbox as telas anteriores desaparecem no momento de sua execussão, isso deixa a tela mais limpa, teria como rerproduzir este mesmo efeito com form comuns ?.. tipo.tenho cadastro de clientes, chamo uma busca esta busca esta em outro form, no momento da busca somente ela aparece e o cadastro de clientes só reapareceria depois de fechar a busca, será que tem como fazer algo assim ??
Gilmar Moraes
Posts
24/11/2012
Marco Salles
e este código funciona ???
Acho que vc so pode fazer isto tratando o InpuTbox
24/11/2012
Gilmar Moraes
e este código funciona ???
Acho que vc so pode fazer isto tratando o InpuTbox
Bom, do jeito que está agora ele recebe somente numeros, tipo 1, 20 ,100 más não 1,20 0,50 a virgula não dá certo pensei adptar este codigo..
if not (Key in['0'..'9',Chr(8),Chr(13),',','.']) then Key:= #0;
más o codigo acima só funciona o eveno onkeypress.o que dificulta um pouco a coisa..
24/11/2012
Gilmar Moraes
e este código funciona ???
Acho que vc so pode fazer isto tratando o InpuTbox
Bom, do jeito que está agora ele recebe somente numeros, tipo 1, 20 ,100 más não 1,20 0,50 a virgula não dá certo pensei adptar este codigo..
if not (Key in['0'..'9',Chr(8),Chr(13),',','.']) then Key:= #0;
más o codigo acima só funciona o eveno onkeypress.o que dificulta um pouco a coisa..
pera.. ficou estranho.. numeros do tipo 1 e 20 e 100. numeros inteiros..
24/11/2012
Gilmar Moraes
if InputQuery('Desconto dado em porcentagem','Digite um valor',nomevar)then begin Try StrToFloat(nomevar); Except raise Exception.Create('Permitido somente números!'); end; if StrToInt(nomevar) > 100 then begin Showmessage('Valor não permitido para esta operção! inserir valores abaixo de 100.'); end else Begin RecPorcent := StrToFloat(Edit5.Text)* StrToFloat(nomevar)/100;
Só ficou a dúvida mesmo do efeito que o inputbox faz nos form´s que faz desaparecer dando uma cara mais limpa no sistema..más está fincionando..
vlw..
24/11/2012
Marco Salles
Para isto vai ter que utilizar Mensagens do Windows
Funciona assim
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 TForm3.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 ImputBpx 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','');
[]sds e um abraõ amigo
21/04/2013
Murilo Braga
Para isto vai ter que utilizar Mensagens do Windows
Funciona assim
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 TForm3.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 ImputBpx 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','');
[]sds e um abraõ amigo
Então amigo, fiquei bem interessado pelo código que você citou, só que o delphi não ta reconhecendo "FormatSettings.DecimalSeparator" =/
22/04/2013
Marco Salles
Utilizo o Delphi 2010
tente declarar a uses
SysUtils
[]sds
26/04/2013
Murilo Braga
Utilizo o Delphi 2010
tente declarar a uses
SysUtils
[]sds
Já está declarada lá ;s
Clique aqui para fazer login e interagir na Comunidade :)