Problema com função para mudar a cor do TEdits e TBBEdits

20/03/2013

0

Bom dia,

Estou usando a seguinte procedure para mudar a cor dos edits.

class procedure TEventos.CorOnEnter(Sender: TObject);
begin
  if Sender.ClassType = TEdit then
    (Sender as TEdit).Color := clYellow;
  if Sender.ClassType = TDBEdit then
    (Sender as TDBEdit).Color := clYellow;
end;

class procedure TEventos.CorOnExit(Sender: TObject);
begin
  if Sender.ClassType = TEdit then
    (Sender as TEdit).Color := clWindow;
  if Sender.ClassType = TDBEdit then
    (Sender as TDBEdit).Color := clwindow;
end;


E aqui eu chamo ela nos meus formulários.

var 
  I: Integer; 
begin 
  for I := 0 to ComponentCount - 1 do 
  if Components[I].ClassType = TEdit then 
  begin 
    (Components[I] as TEdit).OnEnter := TEventos.CorOnEnter; 
    (Components[I] as TEdit).OnExit  := TEventos.CorOnExit; 
  end; 


Só que eu utilizo o evento OnChange e OnExit de diversos edits no meu sistema e o evento OnChange ele é ativado assim que abre o formulário e o evento OnExit parou de funcionar.
Nícolas Braz

Nícolas Braz

Responder

Posts

20/03/2013

Joel Rodrigues

O que parou de funcionar?
O evento onde você muda a cor ou o evento padrão que você trata individualmente para cada edit?
Responder

20/03/2013

Nícolas Braz

O que parou de funcionar?
O evento onde você muda a cor ou o evento padrão que você trata individualmente para cada edit?


O evento que eu trato individualmente.
Responder

20/03/2013

Joel Rodrigues

Cara, ao meu ver está ocorrendo o seguinte. Quando você associa um determinado método a um evento, você automaticamente "desliga" a função que ala já existia. Ou seja, sua função pra mudar a cor está sobrepondo o evento original.
Responder

20/03/2013

Joel Rodrigues

Ah, não estou lembrado agora se o Delphi permite múltiplos event handlers.
Por exemplo, em C# nós fazemos += para associar uma função a um evento, e não =. Ou seja, adicionamos uma função para tratar aquele evento, mas não limitamos somente a uma.
Responder

20/03/2013

Nícolas Braz

Cara, ao meu ver está ocorrendo o seguinte. Quando você associa um determinado método a um evento, você automaticamente "desliga" a função que ala já existia. Ou seja, sua função pra mudar a cor está sobrepondo o evento original.


Eu também pensei nisso! Só que agora não sei o que fazer ...
Responder

20/03/2013

Evandro Sanz

Não sei se é isso que procura mas vale tentar!

A procedure “Change Exit” faz com que o componente que acabou de perder o foco volte a ter suas propriedades de coriniciais.

1
2
3
4
5
6
7
8
9
10
11

procedure TFrmPadrao.ChangeExit(Sender: TObject);
begin
if Sender is TDBEdit then
TDBEdit(Sender).Color := clWindow
else if Sender is TDBLookupComboBox then
TDBLookupComboBox(Sender).Color := clWindow
else if Sender is TDBComboBox then
TDBComboBox(Sender).Color := clWindow
else if Sender is TDBMemo then
TDBMemo(Sender).Color := clWindow;
end;


Isso se encontra em um artigo aqui da devmedia segue link!

https://www.devmedia.com.br/criando-form-padrao-heranca-aplicacao-completa-delphi-firebird-e-tcxscheduler
/23109#ixzz2O5XuvHQf


Abraço!
Responder

20/03/2013

Joel Rodrigues

Então, Sanz, mudar a cor ele consegue. O problema é que ele precisa associar um método "ChangeExit", no seu caso, ao evento. Quando ele faz isso, ele perde o código do evento padrão, pois este é sobreposto pela nova função.
E como eu disse, não sei se o Delphi aceita múltiplos event handlers.
Responder

20/03/2013

Nícolas Braz

Então, Sanz, mudar a cor ele consegue. O problema é que ele precisa associar um método "ChangeExit", no seu caso, ao evento. Quando ele faz isso, ele perde o código do evento padrão, pois este é sobreposto pela nova função.
E como eu disse, não sei se o Delphi aceita múltiplos event handlers.


Exatamente! Existe algum outro método para se usar? Eu uso o evento OnExit e OnChange para calcular os valores de edits.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar