DbEdit Evento OnExit nao funciona

Delphi

27/03/2008

Alguem ja teve o problema no envento OnExit do componente DbEdit???
O programa nao executa a rotina que estao dentro do evento.
Ja coloquei um break para analisar mais o programa passa direto sem entrar no onexit quando o compoente perde o foco.
Alguem saberia o porque???


Janbaceiredo

Janbaceiredo

Curtidas 0

Respostas

Marco Salles

Marco Salles

27/03/2008

Responda :

Ao compilar o delphi marca com ´[b:73e1ddf5d7]bolinhas azuis´ [/b:73e1ddf5d7]as instruções que estão dentro do OnExit ?????


GOSTEI 0
Janbaceiredo

Janbaceiredo

27/03/2008

Sim aparece... Quando eu marco elas para dar o F9 fica vermelha o point de verificacao...


GOSTEI 0
Marco Salles

Marco Salles

27/03/2008

Sim aparece... Quando eu marco elas para dar o F9 fica vermelha o point de verificacao...


Fica vermelho é uma coisa ... Marcar com as bolinhas Azuiz é Outra coisa

Quando compila ele marca com[u:724645c634][b:724645c634] bolinhas azuis [/b:724645c634][/u:724645c634]..


GOSTEI 0
Ara.es

Ara.es

27/03/2008

Como fez para testar o evento?? alguns botoes nao recebem foco, portanto nao irao tirar o foco do Edit, com isso o evento onExit nao será disparado... veja se pode ser isso.


GOSTEI 0
Pestana_

Pestana_

27/03/2008

completando o que o [i:7e1fb4895d]ara.es[/i:7e1fb4895d] disse. Os botões são TSpeedButton, TToolButton e ao executar o evento OnClick de um botão atravês de teclas de atalhos!

flw.


GOSTEI 0
Marco Salles

Marco Salles

27/03/2008

completando o que o ara.es e o pestana disse se for este o problema , voce deve [b:779369eab3]forçar a perda [/b:779369eab3]do foco no DbEdit , atraves de Codigos
Por exemplo o ActiveControl := nil ou o SelectNext ou o Focused de Outro componente.


GOSTEI 0
Janbaceiredo

Janbaceiredo

27/03/2008

Bom, quando aperto F9 o codigo do DBEdit fica com pequenas bolinhas azuis ao lado do codigo. Acredito que seja essas bolinhas que vc esta querendo saber, é isso????

Estou usando um tela de cliente com varios DBEdit coloquei no envento OnExit a rotina de verificacao de CNPJ e CPF.


GOSTEI 0
Pestana_

Pestana_

27/03/2008

De uma olhada no artigo: [color=blue:176552ef62]cuidado ao usar o evento onExit I e II do dtDelphi28. [/color:176552ef62]

link para baixar o arquivo: [[color=blue:176552ef62][b:176552ef62] http://www.delphix.org/index.php?q=node/156[/b:176552ef62][/color:176552ef62] ]

espero ter ajudado.
flw.

flw.


GOSTEI 0
Janbaceiredo

Janbaceiredo

27/03/2008

Nao funcionou a dica do link enviado.
O problema é que o programa nao entra dentro do evento de nenhum OnExit do DBEdit.


GOSTEI 0
Pestana_

Pestana_

27/03/2008

você fez como o nosso colega Marco Salles hávia postado e não resolveu?

voce deve forçar a perda do foco no DbEdit , atraves de Codigos Por exemplo o ActiveControl := nil ou o SelectNext ou o Focused de Outro componente.


flw.


GOSTEI 0
Ara.es

Ara.es

27/03/2008

poste o seu codigo ai. Para que possamos verificar se tem algo diferente ou errado.

Flw!!


GOSTEI 0
Martins

Martins

27/03/2008

vc está usando algum código para simular o TAB?

Seu componente é nativo do Delphi?


GOSTEI 0
Janbaceiredo

Janbaceiredo

27/03/2008

Estou usando esse codigo no OnExit do DBEdit
procedure Tfrm_Clientes.DBE_CPFCNPJExit(Sender: TObject);
begin
inherited;
If VerificaCPF_CNPJ(DBE_CPFCNPJ.Text) = False Then
Begin
MsgDialogPadrao.Caption:= ´Informação´;
MsgDialogPadrao.Text:= ´Atenção,´ + #13 + ´CNPJ Inválido´;
MsgDialogPadrao.ShowModal;
End;
end;

E esse para substituir o <TAB> por <ENTER>:
inherited;
If Key = 13 Then
Begin
SelectNext(ActiveControl, True, True);
Key:= 0;
End;

Ja refiz toda a janela, porem o erro permanece.
Ja force o componente perder o foco mais tb nao funcionou por ele esta perdendo o foco mais nao esta entrando dentro do evento OnExit


GOSTEI 0
Martins

Martins

27/03/2008

Estou usando esse codigo no OnExit do DBEdit procedure Tfrm_Clientes.DBE_CPFCNPJExit(Sender: TObject); begin inherited; If VerificaCPF_CNPJ(DBE_CPFCNPJ.Text) = False Then Begin MsgDialogPadrao.Caption:= ´Informação´; MsgDialogPadrao.Text:= ´Atenção,´ + #13 + ´CNPJ Inválido´; MsgDialogPadrao.ShowModal; End; end; E esse para substituir o <TAB> por <ENTER>: inherited; If Key = 13 Then Begin SelectNext(ActiveControl, True, True); Key:= 0; End; Ja refiz toda a janela, porem o erro permanece. Ja force o componente perder o foco mais tb nao funcionou por ele esta perdendo o foco mais nao esta entrando dentro do evento OnExit


Percebi q esse seu componente é herança de um outro Form, talvez um form padrão (modelo) não sei, vc está usando herança no seu projeto todo?

Já testou seu código em um componente DBEdit sem herança para ver se o erro permanece?

Infelizmente estou viajando e aqui não tenho como ver isso no Delphi.

Boa sorte.


GOSTEI 0
Janbaceiredo

Janbaceiredo

27/03/2008

Correto...
Estou usando um Form (Pai) com todas as funcoes de acesso ao banco de dados e demais desing. Dessa forma eu crio via herança um form (Filho) e ADICIONO o componente DBEdit.

Em outros formularios esta funcionando, apenas nesse que nao. Ja refiz essa tela novamente e nada....


GOSTEI 0
Martins

Martins

27/03/2008

Correto... Estou usando um Form (Pai) com todas as funcoes de acesso ao banco de dados e demais desing. Dessa forma eu crio via herança um form (Filho) e ADICIONO o componente DBEdit. Em outros formularios esta funcionando, apenas nesse que nao. Ja refiz essa tela novamente e nada....


Certo, já tentou assim:

procedure Tfrm_Clientes.DBE_CPFCNPJExit(Sender: TObject); 
begin 
  If VerificaCPF_CNPJ(DBE_CPFCNPJ.Text) = False Then 
  Begin 
      MsgDialogPadrao.Caption:= ´Informação´; 
      MsgDialogPadrao.Text:= ´Atenção,´ + #13 + ´CNPJ Inválido´; 
      MsgDialogPadrao.ShowModal; 
  End; 
end; 


Sem o [b:e8533b2d00]inherited[/b:e8533b2d00] como se o componente DBEdit não tivesse sido um componente herdado?


GOSTEI 0
Janbaceiredo

Janbaceiredo

27/03/2008

Já tentei isso tb, mais nao adianta.... Parece que o Dephi na hora de compilar do source nao enchegar o evento OnExit do componente. Ele cria porem nao executa a instrucao....


GOSTEI 0
Martins

Martins

27/03/2008

Já tentei isso tb, mais nao adianta.... Parece que o Dephi na hora de compilar do source nao enchegar o evento OnExit do componente. Ele cria porem nao executa a instrucao....


Então verifica se ele lê o OnEnter do próximo componente e faz o tratamento lá.


GOSTEI 0
Janbaceiredo

Janbaceiredo

27/03/2008

HUmm.. isso eu nao tentei ainda.
Vou verificar amanha e posto o resultado, estou indo para casa agora.
Mesmo assim valeu pela dica....
Ate´amanha


GOSTEI 0
Janbaceiredo

Janbaceiredo

27/03/2008

Colega...

Funcionou colocando no evento OnEnter.
Porem mudando de campo pelo mouse, o evento nao é disparado.
Por esse motivo o evento OnExit seria muito mais interessante e ideal....


GOSTEI 0
Janbaceiredo

Janbaceiredo

27/03/2008

Colega encontrei o erro....
O erro era gerado por uma chamada que fazia no FORM Pai.
No FORM Pai tem uma rotina a qual muda a cor de fundo do DBEdit do form durante a sua ediçao.
Segue abaixo o codigo
procedure Tfrm_Padrao1.MudancaDeFoco(Sender: TObject);
var
  I: integer;
begin
For I:=0 To Self.ComponentCount-1 Do
  Begin
    If Self.Components[I] Is TDBEdit Then
      If TDBEdit(Self.Components[I]).Focused Then
        Begin
          TDBEdit(Self.Components[I]).Color := clYellow;
          TDBEdit(Self.Components[I]).Font.Style:= [fsBold];
        End
      Else
        Begin
          TDBEdit(Self.Components[I]).Color := clWhite;
          TDBEdit(Self.Components[I]).Font.Style:= [];
        End;
  End;  
end;



O problema esta na forma como essa rotina era chamada:
procedure Tfrm_Padrao1.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  StatusActive:= 1;

  MudancaDeFundo(0);

    for I := 0 to ComponentCount - 1 do
    if Components[I] is TDBEdit then
      (Components[I] as TDBEdit).OnExit := MudancaDeFoco;

end;


Erro de amador..... :oops:

Mais valeu pela ajuda.


GOSTEI 0
Martins

Martins

27/03/2008

Colega encontrei o erro.... O erro era gerado por uma chamada que fazia no FORM Pai. No FORM Pai tem uma rotina a qual muda a cor de fundo do DBEdit do form durante a sua ediçao. Segue abaixo o codigo
procedure Tfrm_Padrao1.MudancaDeFoco(Sender: TObject);
var
  I: integer;
begin
For I:=0 To Self.ComponentCount-1 Do
  Begin
    If Self.Components[I] Is TDBEdit Then
      If TDBEdit(Self.Components[I]).Focused Then
        Begin
          TDBEdit(Self.Components[I]).Color := clYellow;
          TDBEdit(Self.Components[I]).Font.Style:= [fsBold];
        End
      Else
        Begin
          TDBEdit(Self.Components[I]).Color := clWhite;
          TDBEdit(Self.Components[I]).Font.Style:= [];
        End;
  End;  
end;

O problema esta na forma como essa rotina era chamada:
procedure Tfrm_Padrao1.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  StatusActive:= 1;

  MudancaDeFundo(0);

    for I := 0 to ComponentCount - 1 do
    if Components[I] is TDBEdit then
      (Components[I] as TDBEdit).OnExit := MudancaDeFoco;

end;
Erro de amador..... :oops: Mais valeu pela ajuda.


Valew camarada, tudo em ordem, isso acontece.


GOSTEI 0
POSTAR