ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Herança

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Rogazzi
Novato
Novato


Registrado: Quarta-Feira, 10 de Março de 2004
Mensagens: 50

MensagemEnviada: Qui Out 17, 2019 12:19 pm    Assunto: Herança Responder com Citação

Olá Pessoal!!

Alguém pode me ajudar?

Tenho um formPai com eventos no OnExit dos componetes (Para mudar a cor quando recebe e quandosai o foco), porém tenho um evento no OnExit do FormFilho que deveria executar uma função para validação de CPF_CNPJ, mas este evento não é chamado por causa do evento no FormPai.

Como posso resolver isso.

Muito Obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Out 18, 2019 9:19 am    Assunto: Responder com Citação

Bom dia,

Acho que você tem que postar mais informações, como o tipo de componente em questão utilizado nos Forms pai e filho, e o código utilizado nos eventos.


Editado pela última vez por imex em Dom Fev 25, 2024 3:53 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jheckson
Novato
Novato


Registrado: Domingo, 30 de Outubro de 2016
Mensagens: 27

MensagemEnviada: Sex Out 18, 2019 9:28 am    Assunto: Re: Herança Responder com Citação

Rogazzi escreveu:
Olá Pessoal!!

Alguém pode me ajudar?

Tenho um formPai com eventos no OnExit dos componetes (Para mudar a cor quando recebe e quandosai o foco), porém tenho um evento no OnExit do FormFilho que deveria executar uma função para validação de CPF_CNPJ, mas este evento não é chamado por causa do evento no FormPai.

Como posso resolver isso.

Muito Obrigado.


caso você tenha removido no form filho a instrução inherited do evento, não será executado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Rogazzi
Novato
Novato


Registrado: Quarta-Feira, 10 de Março de 2004
Mensagens: 50

MensagemEnviada: Sex Out 18, 2019 10:26 am    Assunto: Responder com Citação

No formPai está assim:

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBCtrls, IniFiles, Data.DB, Vcl.DBGrids;

type
TFormMaster = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure MudaFoco;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
procedure EnterEx(Sender: TObject);
procedure ExitEx(Sender: TObject);
public
{ Public declarations }
end;

var
FormMaster: TFormMaster;
strCorEntrada, strCorSaida: String;
booEndereco: Boolean;

implementation

{$R *.dfm}

procedure ScaleForm(AForm: TForm);
var
intX, intY, intSW, intPorcento: integer;
nEscala: Double;
ArqIni: TIniFile;
strRel: String;
begin
ArqIni := TIniFile.Create('C:\Novo Sicap\Arquivo.ini');
try
strRel := ArqIni.ReadString('Dados', 'Texto', '');
finally
ArqIni.Free;
end;
intSW := StrToInt(strRel);
AForm.Scaled := True;

if (Screen.Width <intSW> 0) then
begin
for intX := 0 to TDBGrid(AForm.Components[intY]).Columns.Count -1
do
TDBGrid(AForm.Components[intY]).Columns[intX].Width:=
Round(TDBGrid(AForm.Components[intY]).Columns[intX].Width *
(intPorcento / 100));
end;
end;
end;
end;

procedure TFormMaster.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FormMaster := Nil;
Action := caFree;
end;

procedure TFormMaster.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then
begin
Key:= #0;
Perform(Wm_NextDlgCtl, 0, 0);
end;
case Key of
'á': Key := 'a';
'é': Key := 'e';
'í': Key := 'i';
'ó': Key := 'o';
'ú': Key := 'u';
'à': Key := 'a';
'è': Key := 'e';
'ì': Key := 'i';
'ò': Key := 'o';
'ù': Key := 'u';
'â': Key := 'a';
'ê': Key := 'e';
'î': Key := 'i';
'ô': Key := 'o';
'û': Key := 'u';
'ä': Key := 'a';
'ë': Key := 'e';
'ï': Key := 'i';
'ö': Key := 'o';
'ü': Key := 'u';
'ã': Key := 'a';
'õ': Key := 'o';
'ñ': Key := 'n';
'Á': Key := 'A';
'É': Key := 'E';
'Í': Key := 'I';
'Ó': Key := 'O';
'Ú': Key := 'U';
'À': Key := 'A';
'È': Key := 'E';
'Ì': Key := 'I';
'Ò': Key := 'O';
'Ù': Key := 'U';
'Â': Key := 'A';
'Ê': Key := 'E';
'Î': Key := 'I';
'Ô': Key := 'O';
'Û': Key := 'U';
'Ä': Key := 'A';
'Ë': Key := 'E';
'Ï': Key := 'I';
'Ö': Key := 'O';
'Ü': Key := 'U';
'Ã': Key := 'A';
'Õ': Key := 'O';
'Ñ': Key := 'N';
'ç': key := 'Ç';
end;
end;

procedure TFormMaster.FormShow(Sender: TObject);
begin
MudaFoco;
end;

procedure TFormMaster.MudaFoco;
var
intI: Integer;
begin
for intI := 0 to ComponentCount -1 do
begin
if (Components[intI] is TEdit) then
begin
(Components[intI] as TEdit).OnExit := ExitEx;
(Components[intI] as TEdit).OnEnter := EnterEx;
end;
if (Components[intI] is TMemo) then
begin
(Components[intI] as TMemo).OnExit := ExitEx;
(Components[intI] as TMemo).OnEnter := EnterEx;
end;
if (Components[intI] is TDBEdit) then
begin
(Components[intI] as TDBEdit).OnExit := ExitEx;
(Components[intI] as TDBEdit).OnEnter := EnterEx;
end;
if (Components[intI] is TDBMemo) then
begin
(Components[intI] as TDBMemo).OnExit := ExitEx;
(Components[intI] as TDBMemo).OnEnter := EnterEx;
end;
if (Components[intI] is TDBComboBox) then
begin
(Components[intI] as TDBComboBox).OnExit := ExitEx;
(Components[intI] as TDBComboBox).OnEnter := EnterEx;
end;
if (Components[intI] is TComboBox) then
begin
(Components[intI] as TComboBox).OnExit := ExitEx;
(Components[intI] as TComboBox).OnEnter := EnterEx;
end;
end;
end;

procedure TFormMaster.EnterEx(Sender: TObject);
begin
strCorEntrada := '$00D2FAFA';
if (Sender is TEdit) then
(Sender as TEdit).Color := StringToColor(strCorEntrada);
if (Sender is TMemo) then
(Sender as TMemo).Color := StringToColor(strCorEntrada);
if (Sender is TDBEdit) then
(Sender as TDBEdit).Color := StringToColor(strCorEntrada);
if (Sender is TDBMemo) then
(Sender as TDBMemo).Color := StringToColor(strCorEntrada);
if (Sender is TComboBox) then
(Sender as TComboBox).Color := StringToColor(strCorEntrada);
if (Sender is TDBComboBox) then
(Sender as TDBComboBox).Color := StringToColor(strCorEntrada);
end;

procedure TFormMaster.ExitEx(Sender: TObject);
begin
strCorSaida := 'clWindow';
if (Sender is TEdit) then
(Sender as TEdit).Color := StringToColor(strCorSaida);
if (Sender is TMemo) then
(Sender as TMemo).Color := StringToColor(strCorSaida);
if (Sender is TDBEdit) then
(Sender as TDBEdit).Color := StringToColor(strCorSaida);
if (Sender is TDBMemo) then
(Sender as TDBMemo).Color := StringToColor(strCorSaida);
if (Sender is TComboBox) then
(Sender as TComboBox).Color := StringToColor(strCorSaida);
if (Sender is TDBComboBox) then
(Sender as TDBComboBox).Color := StringToColor(strCorSaida);
end;
end.

No FormFilho esta assim
TFormFilho = class(TFormPai)

procedure TFormCadCliente.CNPJExit(Sender: TObject);
begin
inherited;
ValidaCNPJ(txtCNPJ.Text)
end;

Porém o evento OnExit no Filho não é chamdo.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Out 18, 2019 11:41 am    Assunto: Responder com Citação

Acredito que o método CNPJExit não está sendo executado porque o MudaFoco troca o método executado no OnExit para EnterEx, substituindo o que estava programado em design.
Que tipo de componente é CNPJ?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Rogazzi
Novato
Novato


Registrado: Quarta-Feira, 10 de Março de 2004
Mensagens: 50

MensagemEnviada: Sex Out 18, 2019 4:04 pm    Assunto: Responder com Citação

O componente do campo CNPJ_CPF é um DBText

Eu imaginei que no form pai tem um processo que faz trocar as cores dos campos nos forms filho. Foi por isso que eu perguntei como posso fazer para simular no evento onExit do formFilho um outro processo.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Out 18, 2019 5:55 pm    Assunto: Responder com Citação

Acho que uma alternativa seria utilizar um If na MudaFoco para atribuir o seu método ao evento somente se não existir outro método atribuído. Exemplo (considerando que os componentes do seu código descendem de TWinControl):

Código:
procedure TFormMaster.MudaFoco;
var
  intI: Integer;
begin
  for intI := 0 to ComponentCount -1 do
    if (Components[intI] is TEdit)       or
       (Components[intI] is TDBEdit)     or
       (Components[intI] is TMemo)       or
       (Components[intI] is TDBMemo)     or
       (Components[intI] is TComboBox)   or
       (Components[intI] is TDBComboBox) then
    begin
      with Components[intI] as TWinControl do
      begin
        if OnExit = nil then
          OnExit := ExitEx;
        if OnEnter = nil then
          OnEnter := EnterEx;
      end;
    end;
end;


E para complementar seria necessário chamar o método manualmente no Exit personalizado:

Código:
procedure TFormCadCliente.CNPJExit(Sender: TObject);
begin
  inherited;

  ValidaCNPJ(txtCNPJ.Text);
  ExitEx(Sender);
end;


Mas como você está utilizando Data Controls (TDBEdit, etc), acredito que seria melhor fazer a validação (no caso do CNPJ) no evento OnValidate do Field e não no OnExit do componente.

Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Rogazzi
Novato
Novato


Registrado: Quarta-Feira, 10 de Março de 2004
Mensagens: 50

MensagemEnviada: Ter Out 29, 2019 2:16 pm    Assunto: Resolvido!! Responder com Citação

Pessola, resolvi da seguinte forma.

Criei uma Unit para Mudar a Cor dos Campos:

unit UMudarCorCampos;

interface

uses
Vcl.DBCtrls, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.Mask, Vcl.Graphics;

const
// Variável para inserir a cor do Foco na entrada do componte
strCorEntrada: String = '$00D2FAFA';
// Variável para inserir a cor do Foco na saída do componte
strCorSaida: String = 'clWindow';

type

TDBEdit = class(Vcl.DBCtrls.TDBEdit)
protected
procedure DoEnter; override;
procedure DoExit; override;
end;

TLabeledEdit = class(Vcl.ExtCtrls.TLabeledEdit)
protected
procedure DoEnter; override;
procedure DoExit; override;
end;

TComboBox = class(Vcl.StdCtrls.TComboBox)
protected
procedure DoEnter; override;
procedure DoExit; override;
end;

TDBComboBox = class(Vcl.DBCtrls.TDBComboBox)
protected
procedure DoEnter; override;
procedure DoExit; override;
end;

TDBLookupComboBox = class(Vcl.DBCtrls.TDBLookupComboBox)
protected
procedure DoEnter; override;
procedure DoExit; override;
end;

TMaskEdit = class(Vcl.Mask.TMaskEdit)
protected
procedure DoEnter; override;
procedure DoExit; override;
end;

implementation

procedure TDBComboBox.DoEnter;
begin
inherited;
Self.Color := StringToColor(strCorEntrada);
end;

procedure TDBComboBox.DoExit;
begin
inherited;
Self.Color := StringToColor(strCorSaida);
end;

procedure TDBEdit.DoEnter;
begin
inherited;
Self.Color := StringToColor(strCorEntrada);
end;

procedure TDBEdit.DoExit;
begin
inherited;
Self.Color := StringToColor(strCorSaida);
end;

procedure TLabeledEdit.DoEnter;
begin
inherited;
Self.Color := StringToColor(strCorEntrada);
end;

procedure TLabeledEdit.DoExit;
begin
inherited;
Self.Color := StringToColor(strCorSaida);
end;

procedure TComboBox.DoEnter;
begin
inherited;
Self.Color := StringToColor(strCorEntrada);
end;

procedure TComboBox.DoExit;
begin
inherited;
Self.Color := StringToColor(strCorSaida);
end;

procedure TDBLookupComboBox.DoEnter;
begin
inherited;
Self.Color := StringToColor(strCorEntrada);
end;

procedure TDBLookupComboBox.DoExit;
begin
inherited;
Self.Color := StringToColor(strCorSaida);
end;

procedure TMaskEdit.DoEnter;
begin
inherited;
Self.Color := StringToColor(strCorEntrada);
end;

procedure TMaskEdit.DoExit;
begin
inherited;
Self.Color := StringToColor(strCorSaida);
end;

end.

Depois é só chamar a Unit no Uses do Form que você quer utilizar.

Vale a dica se aguém precisar.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
wjuniordias
Profissional
Profissional


Registrado: Sexta-Feira, 16 de Março de 2012
Mensagens: 667

MensagemEnviada: Qui Nov 14, 2019 10:11 am    Assunto: Re: Resolvido!! Responder com Citação

Este recurso se chama class interposer, no qual o compilador "une" a classe original com os esses recursos agregados, sendo assim, para garantia de funcionamento, essa unit deve ser a última na declaração da seção "uses".
Abraço.
_________________
"O sábio nunca diz tudo o que pensa, mas pensa sempre tudo o que diz." (Aristóteles)
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB