Curiosida e dúvida com inputbox

23/11/2012

0

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,

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

Gilmar Moraes

Responder

Posts

24/11/2012

Marco Salles

Hummm

e este código funciona ???

Acho que vc so pode fazer isto tratando o InpuTbox
Responder

24/11/2012

Gilmar Moraes

Hummm

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

24/11/2012

Gilmar Moraes

Hummm

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

24/11/2012

Gilmar Moraes

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

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

24/11/2012

Marco Salles

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

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
Responder

21/04/2013

Murilo Braga

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

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" =/
Responder

21/04/2013

Marco Salles

Qual delphi vc utiliza ??
Responder

21/04/2013

Murilo Braga

Qual delphi vc utiliza ??


Utilizo o Delphi 2010
Responder

22/04/2013

Marco Salles

Qual delphi vc utiliza ??


Utilizo o Delphi 2010


tente declarar a uses

SysUtils

[]sds
Responder

26/04/2013

Murilo Braga

Qual delphi vc utiliza ??


Utilizo o Delphi 2010


tente declarar a uses

SysUtils

[]sds


Já está declarada lá ;s
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar