DbEdit Evento OnExit nao funciona
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???
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
Curtidas 0
Respostas
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 ?????
Ao compilar o delphi marca com ´[b:73e1ddf5d7]bolinhas azuis´ [/b:73e1ddf5d7]as instruções que estão dentro do OnExit ?????
GOSTEI 0
Janbaceiredo
27/03/2008
Sim aparece... Quando eu marco elas para dar o F9 fica vermelha o point de verificacao...
GOSTEI 0
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
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_
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.
flw.
GOSTEI 0
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.
Por exemplo o ActiveControl := nil ou o SelectNext ou o Focused de Outro componente.
GOSTEI 0
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.
Estou usando um tela de cliente com varios DBEdit coloquei no envento OnExit a rotina de verificacao de CNPJ e CPF.
GOSTEI 0
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.
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
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.
O problema é que o programa nao entra dentro do evento de nenhum OnExit do DBEdit.
GOSTEI 0
Pestana_
27/03/2008
você fez como o nosso colega Marco Salles hávia postado e não resolveu?
flw.
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
27/03/2008
poste o seu codigo ai. Para que possamos verificar se tem algo diferente ou errado.
Flw!!
Flw!!
GOSTEI 0
Martins
27/03/2008
vc está usando algum código para simular o TAB?
Seu componente é nativo do Delphi?
Seu componente é nativo do Delphi?
GOSTEI 0
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
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
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
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....
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
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
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
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
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
Vou verificar amanha e posto o resultado, estou indo para casa agora.
Mesmo assim valeu pela dica....
Ate´amanha
GOSTEI 0
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....
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
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
O problema esta na forma como essa rotina era chamada:
Erro de amador..... :oops:
Mais valeu pela ajuda.
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
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
O problema esta na forma como essa rotina era chamada:
Erro de amador..... :oops:
Mais valeu pela ajuda.
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;
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;
Valew camarada, tudo em ordem, isso acontece.
GOSTEI 0