GARANTIR DESCONTO

Fórum MaskEdit. #356910

09/04/2008

0

Boa tarde,

Tenho uma MaskEdit1 !AAA\-AAA\-AAA\-AAAA;0; = ___-___-___-____

Alguem sabe um modo pra quando eu digitar o ultimo numero, automaticamente da um Enter, zera o campo e vai para primeira linha!?

O programa funcionar quando digitar um caracter por vez, mas quando insiro os 13 caracteres (tipo um leitor optico) de uma vez só ele nao retorna pra o inicio do Maskedit1.

Obrigado
Rogerio


Rogerioduarte

Rogerioduarte

Responder

Posts

09/04/2008

Du_nirvana

Olá amigo, talvez ajude, coloque no evento onChange do seu msakedit o seguinte:

IF Length(MaskEdit1.Text) = 13 THEN
BEGIN
Edit1.Text := MaskEdit1.Text;
MaskEdit1.Text := ´´;
Edit1.SetFocus;
END;


Responder

Gostei + 0

09/04/2008

Rogerioduarte

O que acontece é o seguinte...

Eu vou digitando numero por numero e quando chega no 13º caracter o meu evento de onChange dispara um comando pra dar um Submit no conteudo da MaskEdit.

Ate ai tudo bem, tranquilo....

o q acontece é q eu dou um MaskEdit1.Clear e se eu der um CTRL+V com um conteudo, ele BUGA minha MaskEdit.

por exemplo: A MaskEdit fica limpa porem se eu digitar o numero um a um de novo a mascara nao funciona e nenhum caracter saí.

Na logica, ele conta 13 caracteres e limpa minha MaskEdit pois eu mandei dar um clear, a pergunta é:

POr que quando dou um CTRL+V ele cola o codigo, limpa como mandei e digito os numeros um a um e os numeros nao saem

ps.: o Bug acontece só com CTRL+V.

Vlw
Rogerio


Responder

Gostei + 0

09/04/2008

Du_nirvana

Olá, não consegui reproduzir o erro aqui, se você puder colocar um trecho do seu código talvez ajudaria...


Responder

Gostei + 0

09/04/2008

Rogerioduarte

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask;

type
  TForm1 = class(TForm)
    MaskEdit1: TMaskEdit;
    procedure MaskEdit1Change(Sender: TObject);
  private
    { Private declarations }
       procedure makeFocus;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.makeFocus;
var x: string;
begin
  x := MaskEdit1.Text;
  MaskEdit1.Clear;

end;

function TrimChar(texto: string; delchar: char): string;
var
S: string;
begin
S := texto;
while Pos(delchar,S) > 0 do
Delete(S,Pos(delchar,S),1);
Result := S;
end;

procedure TForm1.MaskEdit1Change(Sender: TObject);

    var temp:string;

begin
      temp := TrimChar(MaskEdit1.Text,#45);
      temp := TrimChar(MaskEdit1.Text,32);

        //showmessage(MaskEdit1.Text);

      if(Length(temp)=13) then
        begin

        makeFocus;
      end;
end;





Responder

Gostei + 0

15/04/2008

Du_nirvana

Olá amigo, desculpe a demora, andei bastante ocupado e não deu pra entrar no forum antes, bom vamos lá, usei seu exemplo mas não tive problemas, a mascara continuo funcionando corretamente mesmo apos o ctrl+v, porém de fato quando o foco retornava para o maskedit ficava selecionado o ultimo caracter, dá uma olhada no codigo que você vai ver como corrigir isso, se seu problema ainda persistir posta ai pra pensarmos alguma outra coisa, flw , abrços...

procedure TForm1.makeFocus;
begin
Edit1.Text := MaskEdit1.Text;
MaskEdit1.Clear;
MaskEdit1.SelStart := 0; //<------ aqui !

end;

function TForm1.TrimChar(texto: string; delchar: char): string;
var
S: string;
begin
S := texto;
while Pos(delchar,S) > 0 do
Delete(S,Pos(delchar,S),1);
Result := S;
end;

procedure TForm1.MaskEdit1Change(Sender: TObject);

var temp:string;

begin
temp := TrimChar(MaskEdit1.Text,#45);
temp := TrimChar(MaskEdit1.Text,32);

//showmessage(MaskEdit1.Text);

if(Length(temp)=13) then
begin

makeFocus;
end;
end;


Responder

Gostei + 0

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

Aceitar