• 0
Sign in to follow this  
rochajl

Procedure - Como Chamar?

Question

Achei a seguinte procedure:

procedure TfrmVLENTR.ValidaKey(Const Sender: TObject; var key: char);

begin

if not(key in ['0'..'9','.',',',#8,#13]) then

key := #0;

if key in [',','.'] then

key := DecimalSeparator;

if key = DecimalSeparator then

if pos(key,TMaskEdit(Sender).Text) <> 0 then

key := #0;

end;

na dia onde a encontrei, foi colocado para usá-la no evento onchange. Gostaria de saber qual procedimente de fazer para colocar esta procedure no meu código, onde devo declara-la, e como devo chama-la (estou usando o componente TMaskEdit).

Se alguém puder ajudar, fico grato.

Até mais.

Share this post


Link to post
Share on other sites

8 answers to this question

Recommended Posts

  • 0
Guest - Cadu -

Caro colega, essa procedure desse ser chamada no KeyPress do seu TMaskEdit, pois somente nesse envento você poderá capturar o Key e passar na sua procedura.

Espero ter ajudado.

Share this post


Link to post
Share on other sites
  • 0
Guest - rochajl -

Tudo bem, eu sei que é neste evento, o que eu não estou conseguindo e chama-la.

Como devo colocar.

ValidaKey();

ValidaKey(Self);

ValidaKey(Sender);

ValidaKey

já tentei de várias maneiras e não consegui.

Quem puder me ajudar, agradeço.

Até mais.

Share this post


Link to post
Share on other sites
  • 0

Meu amigo, você tem sua procedure ->

TfrmVLENTR = Class(TForm)
  procedure ValidaKey(Const Sender: TObject; var key: char);
  .
  .
implementation


procedure TfrmVLENTR.ValidaKey(Const Sender: TObject; var key: char);
begin
if not(key in ['0'..'9','.',',',#8,#13]) then
key := #0;
if key in [',','.'] then
key := DecimalSeparator;
if key = DecimalSeparator then
if pos(key,TMaskEdit(Sender).Text) <> 0 then
key := #0;
end;

Agora basta você clicar na sua Edit, ir até o object inspector, clicar na paleta Events, e no evento KeyPress deverá estar listado esse procedimento no combobox, então selecione-o e pressione Enter. Está feito.

Share this post


Link to post
Share on other sites
  • 0

Complementando o que o Thales colocou, ficaria assim:

procedure TfrmVLENTR.MaskEdit1KeyPress(Sender: TObject; var Key: Char);
begin
  ValidaKey(MaskEdit1,Key);
end;

Abs. Progr'amador.

Share this post


Link to post
Share on other sites
  • 0

Nesse caso o Prog'amador criou um procedimento para o evento OnKeyPress e dentro dele chamou o seu procedimento, e como eu citei eu já coloquei o seu próprio procedimento no evento OnKeyPress diretamente;

Share this post


Link to post
Share on other sites
  • 0
Guest - rochajl -

Obrigado pela dica, funcionou corretamente.

O que acontece agora, é que se eu digito ',' ou '.' é mostrado corretamente no TEdit, mas ele grava inteiro na tabela (Ex.: digito 2,35 ou 2.35 e é salvo 235,00). Meu campo na tabela é do tipo DECIMAL (7,2). Minha intenção é que o usuário digitasse usando a vírgula. O que pode estar acontecendo.

Se puderem me ajudar, agradeço.

Share this post


Link to post
Share on other sites
  • 0

existe duas formas:

ou voce usa o componente de procedures de acordo com o compente de conexão de banco ou pode usar uma query normal pra chamar a procedure ou criala, e ao invés de por open poe ExecSQL

ps: caso tenha que passar algum paramentro no ExecSQL, é so passar false

Share this post


Link to post
Share on other sites
  • 0
O que acontece agora, é que se eu digito ',' ou '.' é mostrado corretamente no TEdit, mas ele grava inteiro na tabela (Ex.: digito 2,35 ou 2.35 e é salvo 235,00). Meu campo na tabela é do tipo DECIMAL (7,2). Minha intenção é que o usuário digitasse usando a vírgula.
rochajl, meio estranho, mas como é que você está fazendo a atribuição do texto digitado para o campo na tabela?

Uma opção é diretamente como texto: TabXCampoN.AsString := MaskEdit1.Text;

Outra é convertendo para float: TabXCampoN.AsFloat := StrToFloatDef(MaskEdit1.Text, 0); (seria o mais apropriado)

[]s

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this