Curiosida e dúvida com inputbox
bom galera, pegando carona do código daki do fórum fiz um inputbox receber somente numeros, e aí que fica a dúvida o campo deve recer numeros com virgulas pois se trata de valores e não consigo tratar este problema,
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 ??
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
Curtidas 0
Respostas
Marco Salles
23/11/2012
Hummm
e este código funciona ???
Acho que vc so pode fazer isto tratando o InpuTbox
e este código funciona ???
Acho que vc so pode fazer isto tratando o InpuTbox
GOSTEI 0
Gilmar Moraes
23/11/2012
Hummm
e este código funciona ???
Acho que vc so pode fazer isto tratando o InpuTbox
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..
GOSTEI 0
Gilmar Moraes
23/11/2012
Hummm
e este código funciona ???
Acho que vc so pode fazer isto tratando o InpuTbox
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..
GOSTEI 0
Gilmar Moraes
23/11/2012
Algum usuário de outro fórum estava com o mesmo problema e um dos administradores passou uma idéia qye deu para adptar no meu sistema, e ficou assim..
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..
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..
GOSTEI 0
Marco Salles
23/11/2012
Amigo Gigatel , vc pode pode sim utilizar o evento OnKeyPress no edit do Formulário do ImputBox
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
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
[]sds e um abraõ amigo
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
GOSTEI 0
Murilo Braga
23/11/2012
Amigo Gigatel , vc pode pode sim utilizar o evento OnKeyPress no edit do Formulário do ImputBox
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
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
[]sds e um abraõ amigo
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" =/
GOSTEI 0
Marco Salles
23/11/2012
Qual delphi vc utiliza ??
GOSTEI 0
Murilo Braga
23/11/2012
Qual delphi vc utiliza ??
Utilizo o Delphi 2010
GOSTEI 0
Marco Salles
23/11/2012
Qual delphi vc utiliza ??
Utilizo o Delphi 2010
tente declarar a uses
SysUtils
[]sds
GOSTEI 0
Murilo Braga
23/11/2012
Qual delphi vc utiliza ??
Utilizo o Delphi 2010
tente declarar a uses
SysUtils
[]sds
Já está declarada lá ;s
GOSTEI 0