Sabe quando você tem varios Edits (ou textbox) num form, quer destacar com uma determinada cor quando eles ganharem o foco mas todos eles já tem eventos e você não quer sobrescrever, substituir e nem mecher nos eventos deles? Tambem não quer escrever o codigo pra mudar de cor no proprio evento, porque são varios edits e você quer reaproveitamento de código e o minimo possivel de retrabalho? 
  no C# isso é facil porque você pode concatenar eventos, colocando facilmente dois metodos para um mesmo evento. No javascript tambem dá para você chamar dois ou mais metodos por evento. Mas e no C++, delphi e Lazarus? 
  OBS.: Coloquei delphi e lazarus como duas "linguagens" diferentes porque apesar de serem praticamente iguais, no lazarus, para se trabalhar com variaveis de métodos de objetos e atribuir metodos à variaveis você precisa obrigatoriamente do operador de endereço "@". No delphi tambem era assim antigamente, mas não sei em que versão que isso mudou. 
  Com estas classes abaixo você pode simplesmente criar um objeto, passando a form, a cor quando entra e a cor quando "passa o mouse" como parametros que todos os Edits (ou Textboxes) manterão os eventos originais. 
  A primeira classe é simplesmente um container de eventos (esta é apenas um conteiner de cores no codigo em C#, uma vez que é desnecessario que ela armazene os eventos), a outra classe é uma lista desses containers. 
  A principio o codigo desta classe trabalha somente com   TEdit. Mas usando bem a RTTI, ispecionando por nomes e valores de propriedades, usando os ancestrais em comum, uma dose de if's e criatividade você pode adaptar para que funcione com todos os componentes.
  Num mesmo projeto eu apresento a classe e a maneira de usar. Em breve postarei um componente para delphi feito com esse conceito.
  Como isso é só uma demonstração, eu  não estou criando os metodos Acessores Get e Set para minhas propriedades. Estou escrevendo direto no campo privado. Não faça isso porque é muito feio, viola o encapsulamento e quem faz isso não vai pro céu :) . 

 Primeiro C++ builder:
Cabeçalhos e interfaces das classes  (arquivo .h)
class TEventContainer: public TObject
{
  private:
   
 TNotifyEvent FOnEnter;
   
 TNotifyEvent FOnExit;
   
 TColor FCorOriginal;
  __published:
   
__property TNotifyEvent OnEnter = {read=FOnEnter, write=FOnEnter};
   
__property TNotifyEvent OnExit = {read=FOnExit, write=FOnExit};
   
__property TColor CorOriginal = {read = FCorOriginal, write =
FCorOriginal};

   
};

class TMudaCor: public TObject
{
  private:
    TForm
*FForm;
    TColor
FCorEntra;
   
TStringList *FlistaEvt;
  public:
   
__fastcall virtual TMudaCor(TForm *frm, TColor corentra);
   
__fastcall virtual ~TMudaCor(void);
    void
__fastcall DoEnter(TObject *sender);
    void
__fastcall  DoExit(TObject *sender);
};

class TForm1 : public TForm
{
__published:   // IDE-managed Components
  TEdit *Edit1;
  TEdit *Edit2;
  TEdit *Edit3;
  TButton *Button1;
  TButton *Button2;
  TLabel *Label1;
  void __fastcall Edit1Enter(TObject
*Sender);
  void __fastcall Edit1Exit(TObject
*Sender);
  void __fastcall Edit2Enter(TObject
*Sender);
  void __fastcall Edit2Exit(TObject
*Sender);
  void __fastcall FormCreate(TObject
*Sender);
  void __fastcall FormDestroy(TObject
*Sender);
private:   // User declarations
  TMudaCor *mudacor;
public:     //
User declarations
  __fastcall TForm1(TComponent* Owner);
};

    A implementação (arquivo cpp) 
//--------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//--------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{
}
//--------------------------------------------------------------
void __fastcall TForm1::Edit1Enter(TObject *Sender)
{
  Label1->Caption = "Entrou no edit
1";  
}
//-------------------------------------------------------------
void __fastcall TForm1::Edit1Exit(TObject *Sender)
{
  Label1->Caption = "Saiu do edit
1";  
}
//-------------------------------------------------------------
void __fastcall TForm1::Edit2Enter(TObject *Sender)
{
  Label1->Caption = "Entrou no edit
2";  
}
//-------------------------------------------------------------
void __fastcall TForm1::Edit2Exit(TObject *Sender)
{
  Label1->Caption = "saiu do edit
2";
}
//-------------------------------------------------------------


__fastcall TMudaCor::TMudaCor(TForm *frm, TColor corentra)
{
  int i;
  TEventContainer *evtc;

  FlistaEvt = new TStringList();
  FlistaEvt->Sorted = true;
  TEdit *ed;

  FForm = frm;
  FCorEntra=corentra;

  for (i=0; i<FForm->ComponentCount;i++)
  {

     if (
CompareStr(FForm->Components[i]->ClassName(),
"TEdit")   == 0 )
     {
   
  evtc = new TEventContainer();
   
  ed = (TEdit *)
FForm->Components[i];
   
  evtc->OnEnter =
ed->OnEnter;
   
  evtc->OnExit = ed->OnExit;
   
  evtc->CorOriginal =
ed->Color;

   
 
FlistaEvt->AddObject(ed->Name, evtc);

   
  ed->OnEnter=  DoEnter;
   
  ed->OnExit= DoExit;
     };
  };

  FlistaEvt->Sort();
}

__fastcall TMudaCor::~TMudaCor(void)
{
  int i;
   for (i = 0 ; i <
FlistaEvt->Count ; i++)
   
 if (FlistaEvt->Objects[i] != NULL)
   
 
FlistaEvt->Objects[i]->Free();

  FlistaEvt->Free();

}




void __fastcall  TMudaCor::DoEnter(TObject *Sender)
{
  TEventContainer *evtc;
  int idx;

   if
(CompareStr(Sender->ClassName(), "TEdit") == 0)
   {
   
  ((TEdit *)Sender)->Color =
FCorEntra;
   }

   idx =
FlistaEvt->IndexOf(((TEdit *)Sender)->Name);
   if(idx > -1)
   {
   
  if (FlistaEvt->Objects[idx] != NULL)
   
  {
   
   evtc= (TEventContainer
*)(FlistaEvt->Objects[idx]);
   
  }
   
  if ((evtc != NULL ) && (
evtc->OnEnter != NULL)) {
   
   evtc->OnEnter(Sender);
   
  }
   }
}

void __fastcall  TMudaCor::DoExit(TObject *Sender)
{
  TEventContainer *evtc;
  int idx;

   idx =
FlistaEvt->IndexOf(((TEdit *)Sender)->Name);
   if(idx > -1)
   {
   
  if (FlistaEvt->Objects[idx] != NULL)
   
  {
   
   evtc= (TEventContainer
*)(FlistaEvt->Objects[idx]);
   
  }

   
  if (evtc != NULL )
   
  {
   
    if
(CompareStr(Sender->ClassName(), "TEdit") == 0)
   
    {
   
   
  ((TEdit *)Sender)->Color =
evtc->CorOriginal;
   
    }

   
    if (
evtc->OnExit != NULL)
   
    {
   
   
  evtc->OnExit(Sender);
   
    }
   
  }
   }
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  mudacor = new TMudaCor(this,
clYellow);  
}
//------------------------------------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
 
mudacor->Free();  
}
//------------------------------------------------------------

  O dfm:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 293
  ClientWidth = 426
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
  Left = 24
  Top = 8
  Width = 31
  Height = 13
  Caption = 'Label1'
  end
  object Edit1: TEdit
  Left = 24
  Top = 32
  Width = 121
  Height = 21
  Color = clMoneyGreen
  TabOrder = 0
  Text = 'Edit1'
  OnEnter = Edit1Enter
  OnExit = Edit1Exit
  end
  object Edit2: TEdit
  Left = 24
  Top = 72
  Width = 121
  Height = 21
  Color = clSkyBlue
  TabOrder = 1
  Text = 'Edit2'
  OnEnter = Edit2Enter
  OnExit = Edit2Exit
  end
  object Edit3: TEdit
  Left = 24
  Top = 120
  Width = 121
  Height = 21
  Color = clSilver
  TabOrder = 2
  Text = 'Edit3'
  end
  object Button1: TButton
  Left = 176
  Top = 30
  Width = 75
  Height = 25
  Caption = 'Button1'
  TabOrder = 3
  end
  object Button2: TButton
  Left = 176
  Top = 70
  Width = 75
  Height = 25
  Caption = 'Button2'
  TabOrder = 4
  end
end
em C#:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace MudaCorCSharp
{
  /// <summary>
  /// Summary description for Form1.
  /// </summary>
  ///



  public class Form1 :
System.Windows.Forms.Form
  {
    private
System.Windows.Forms.TextBox textBox1;
    private
System.Windows.Forms.TextBox textBox2;
    private
System.Windows.Forms.TextBox textBox3;
    private
System.Windows.Forms.Button button1;
    private
System.Windows.Forms.Label label1;
    private
System.Windows.Forms.TextBox a3;
    private
System.Windows.Forms.TextBox a2;
    private
System.Windows.Forms.TextBox a1;
    ///
<summary>
    ///
Required designer variable.
    ///
</summary>
    private
System.ComponentModel.Container components = null;

    public
Form1()
    {
   
  //
   
  // Required for Windows Form Designer
support
   
  //
   
  InitializeComponent();

   
  //
   
  // TODO: Add any constructor code after
InitializeComponent call
   
  //
    }

    ///
<summary>
    /// Clean
up any resources being used.
    ///
</summary>
    protected
override void Dispose( bool disposing )
    {
   
  if( disposing )
   
  {
   
    if
(components != null)
   
    {
   
   
  components.Dispose();
   
    }
   
  }
   
  base.Dispose( disposing );
    }

    #region
Windows Form Designer generated code
    ///
<summary>
    ///
Required method for Designer support - do not modify
    /// the
contents of this method with the code editor.
    ///
</summary>
    private
void InitializeComponent()
    {
   
  this.textBox1 = new
System.Windows.Forms.TextBox();
   
  this.textBox2 = new
System.Windows.Forms.TextBox();
   
  this.textBox3 = new
System.Windows.Forms.TextBox();
   
  this.button1 = new
System.Windows.Forms.Button();
   
  this.label1 = new
System.Windows.Forms.Label();
   
  this.a3 = new
System.Windows.Forms.TextBox();
   
  this.a2 = new
System.Windows.Forms.TextBox();
   
  this.a1 = new
System.Windows.Forms.TextBox();
   
  this.SuspendLayout();
   
  //
   
  // textBox1
   
  //
   
  this.textBox1.BackColor =
System.Drawing.Color.Gainsboro;
   
  this.textBox1.Location = new
System.Drawing.Point(16, 72);
   
  this.textBox1.Name = "textBox1";
   
  this.textBox1.TabIndex = 0;
   
  this.textBox1.Text = "textBox1";
   
  this.textBox1.MouseEnter += new
System.EventHandler(this.textBox1_MouseEnter);
   
  this.textBox1.Leave += new
System.EventHandler(this.textBox1_Leave);
   
  this.textBox1.MouseLeave += new
System.EventHandler(this.textBox1_MouseLeave);
   
  this.textBox1.Enter += new
System.EventHandler(this.textBox1_Enter);
   
  //
   
  // textBox2
   
  //
   
  this.textBox2.BackColor =
System.Drawing.Color.MistyRose;
   
  this.textBox2.Location = new
System.Drawing.Point(16, 104);
   
  this.textBox2.Name = "textBox2";
   
  this.textBox2.TabIndex = 1;
   
  this.textBox2.Text = "textBox2";
   
  this.textBox2.MouseEnter += new
System.EventHandler(this.textBox2_MouseEnter);
   
  this.textBox2.Leave += new
System.EventHandler(this.textBox2_Leave);
   
  this.textBox2.MouseLeave += new
System.EventHandler(this.textBox2_MouseLeave);
   
  this.textBox2.Enter += new
System.EventHandler(this.textBox2_Enter);
   
  //
   
  // textBox3
   
  //
   
  this.textBox3.BackColor =
System.Drawing.Color.PeachPuff;
   
  this.textBox3.Location = new
System.Drawing.Point(16, 136);
   
  this.textBox3.Name = "textBox3";
   
  this.textBox3.TabIndex = 2;
   
  this.textBox3.Text = "textBox3";
   
  //
   
  // button1
   
  //
   
  this.button1.Location = new
System.Drawing.Point(144, 24);
   
  this.button1.Name = "button1";
   
  this.button1.TabIndex = 3;
   
  this.button1.Text = "button1";
   
  this.button1.Click += new
System.EventHandler(this.button1_Click);
   
  //
   
  // label1
   
  //
   
  this.label1.Location = new
System.Drawing.Point(16, 16);
   
  this.label1.Name = "label1";
   
  this.label1.TabIndex = 4;
   
  this.label1.Text = "label1";
   
  //
   
  // a3
   
  //
   
  this.a3.BackColor =
System.Drawing.Color.PaleTurquoise;
   
  this.a3.Location = new
System.Drawing.Point(144, 136);
   
  this.a3.Name = "a3";
   
  this.a3.TabIndex = 7;
   
  this.a3.Text = "textBox4";
   
  //
   
  // a2
   
  //
   
  this.a2.BackColor =
System.Drawing.Color.PaleGreen;
   
  this.a2.Location = new
System.Drawing.Point(144, 104);
   
  this.a2.Name = "a2";
   
  this.a2.TabIndex = 6;
   
  this.a2.Text = "textBox5";
   
  //
   
  // a1
   
  //
   
  this.a1.BackColor =
System.Drawing.Color.LightGoldenrodYellow;
   
  this.a1.Location = new
System.Drawing.Point(144, 72);
   
  this.a1.Name = "a1";
   
  this.a1.TabIndex = 5;
   
  this.a1.Text = "textBox6";
   
  //
   
  // Form1
   
  //
   
  this.AutoScaleBaseSize = new
System.Drawing.Size(5, 13);
   
  this.ClientSize = new
System.Drawing.Size(292, 273);
   
  this.Controls.Add(this.a3);
   
  this.Controls.Add(this.a2);
   
  this.Controls.Add(this.a1);
   
  this.Controls.Add(this.label1);
   
  this.Controls.Add(this.button1);
   
  this.Controls.Add(this.textBox3);
   
  this.Controls.Add(this.textBox2);
   
  this.Controls.Add(this.textBox1);
   
  this.Name = "Form1";
   
  this.Text = "Form1";
   
  this.Load += new
System.EventHandler(this.Form1_Load);
   
  this.ResumeLayout(false);

    }
    #endregion

    ///
<summary>
    /// The
main entry point for the application.
    ///
</summary>
   
[STAThread]
    static
void Main()
    {
   
  Application.Run(new Form1());
    }

    private
void textBox1_MouseEnter(object sender, System.EventArgs e)
    {
   
  label1.Text = "Mouse enter 1";
    }

    private
void textBox1_MouseLeave(object sender, System.EventArgs e)
    {
   
  label1.Text = "Mouse leave 1";
    }

    private
void textBox1_Enter(object sender, System.EventArgs e)
    {
   
  label1.Text = " enter 1";
    }

    private
void textBox1_Leave(object sender, System.EventArgs e)
    {
   
  label1.Text = "leave 1";
    }

    private
void textBox2_Enter(object sender, System.EventArgs e)
    {
   
  label1.Text = " enter 2";
    }

    private
void textBox2_Leave(object sender, System.EventArgs e)
    {
   
  label1.Text = "leave 2";
    }

    private
void textBox2_MouseEnter(object sender, System.EventArgs e)
    {
   
  label1.Text = "Mouse enter 2";
    }

    private
void textBox2_MouseLeave(object sender, System.EventArgs e)
    {
   
  label1.Text = "Mouse leave 2";
    }

    private
void button1_Click(object sender, System.EventArgs e)
    {

    }

    private
void Form1_Load(object sender, System.EventArgs e)
    {
   
  TMudaCor mudacor = new TMudaCor(this,
System.Drawing.Color.Yellow, System.Drawing.Color.Orange);
    }
  }


  public class TColorContainer
  {
    private
System.Drawing.Color FCorOriginal;

    public
System.Drawing.Color CorOriginal {get{return FCorOriginal;}
set{FCorOriginal = value;}}
  }


  public class TMudaCor
  {
    private
System.Windows.Forms.Form FForm;
    private
System.Drawing.Color FCorEntra;
    private
System.Drawing.Color FCorMouseEntra;
    //private
System.Collections.SortedList FlistaEvt;
    private
System.Collections.Hashtable FlistaEvt;

    public
TMudaCor(System.Windows.Forms.Form frm, System.Drawing.Color
corMouseEnter, System.Drawing.Color corEnter )
    {
   
  FForm = frm;
   
  //FlistaEvt = new SortedList();
   
  FlistaEvt = new Hashtable();
   
  FCorEntra = corEnter;
   
  FCorMouseEntra = corMouseEnter;
 
   
  for(int i=0; i <
FForm.Controls.Count; i++)
   
  {
   
    if
(FForm.Controls[i] is TextBox)
   
    {
   
   
  TColorContainer evtc = new
TColorContainer();
   
   
  evtc.CorOriginal = (FForm.Controls[i] as
TextBox).BackColor;
   
   
  FlistaEvt.Add(FForm.Controls[i].Name,
evtc);
   
   
  (FForm.Controls[i] as TextBox).Enter +=
new System.EventHandler( this.DoEnter);
   
   
  (FForm.Controls[i] as TextBox).Leave +=
new System.EventHandler(this.DoExit);
   
   
  (FForm.Controls[i] as
TextBox).MouseEnter += new System.EventHandler( this.DoMouseEnter);
   
   
  (FForm.Controls[i] as
TextBox).MouseLeave += new System.EventHandler(this.DoMouseLeave);

   
    }
   
  }
    }


    public
void DoEnter(object sender, System.EventArgs e)
    {
   
  if(sender is TextBox)
   
  {
   
    (sender
as TextBox).BackColor = FCorEntra;
   
  }
    }
    public
void DoExit(object sender, System.EventArgs e)
    {
   
  if(sender is TextBox)
   
  {
   
   
TColorContainer evtc = (TColorContainer) FlistaEvt[(sender as
TextBox).Name];
   
    if(evtc
!= null)
   
    {
   
   
  (sender as TextBox).BackColor =
evtc.CorOriginal;
   
    }
   
  }
    }

    public
void DoMouseEnter(object sender, System.EventArgs e)
    {
   
  if(sender is TextBox)
   
  {
   
    //sair
sem fazer nada se tiver o foco
   
    if
((sender as TextBox).Focused) return;

   
    (sender
as TextBox).BackColor = FCorMouseEntra;
   
  }
    }
    public
void DoMouseLeave(object sender, System.EventArgs e)
    {
   
  if(sender is TextBox)
   
  {
   
    //sair
sem fazer nada se tiver o foco
   
    if
((sender as TextBox).Focused) return;

   
   
TColorContainer evtc = (TColorContainer) FlistaEvt[(sender as
TextBox).Name];
   
    if(evtc
!= null)
   
    {
   
   
  (sender as TextBox).BackColor =
evtc.CorOriginal;
   
    }
   
  }
    }

  }
}
Agora a mesma coisa em delphi: 
o Pas:
unit
Unit1;

interface

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


type



  TEventContainer = class
  private
     
FOnEnter: TNotifyEvent;
     
FOnExit: TNotifyEvent;
     
FCorOriginal: TColor;
  public
    
property OnEnter: TNotifyEvent read FOnEnter write FOnEnter;
    
property OnExit: TNotifyEvent read FOnExit write FOnExit;
    
property CorOriginal: TColor read FCorOriginal write FCorOriginal;
  end;

  TMudaCor = class
  private
   FForm: TForm;
   FCorEntra: TColor;
   FlistaEvt: TStringList;

  public
    
constructor Create(frm: Tform; corentra:TColor); reintroduce;
    
destructor Destroy; override;
    
procedure DoEnter(sender: tobject);
    
procedure DoExit(sender: tobject);
  end;


  { TForm1 }

  TForm1 = class(TForm)
  Button1: TButton;
  Button2: TButton;
  Edit1: TEdit;
  Edit2: TEdit;
  Edit3: TEdit;
  aEdit4: TEdit;
  aEdit5: TEdit;
  aEdit6: TEdit;
  Label1: TLabel;
  Label2: TLabel;
  procedure aEdit6Enter(Sender: TObject);
  procedure aEdit6Exit(Sender: TObject);
  procedure Edit1Enter(Sender: TObject);
  procedure Edit1Exit(Sender: TObject);
  procedure Edit2Enter(Sender: TObject);
  procedure Edit2Exit(Sender: TObject);
  procedure FormCreate(Sender: TObject);
  procedure FormDestroy(Sender: TObject);
  private
  { private declarations }
  mudador: TMudaCor;
  public
  { public declarations }
  end;

  { TMudaCor }





var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Edit1Enter(Sender: TObject);
begin
   Label1.Caption:='entrou no
edit 1';
end;



procedure TForm1.aEdit6Enter(Sender: TObject);
begin
   Label1.Caption:='entrou no
edit 6';
end;

procedure TForm1.aEdit6Exit(Sender: TObject);
begin
   Label1.Caption:='saiu do edit
6';
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  Label1.Caption:='saiu do edit 1';
end;



procedure TForm1.Edit2Enter(Sender: TObject);
begin
  Label1.Caption:='entrou no edit 2';
end;

procedure TForm1.Edit2Exit(Sender: TObject);
begin
  Label1.Caption:='saiu do edit 2';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   mudador := TMudaCor.Create(self, clYellow);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  mudador.free;
end;

{ TMudaCor }

constructor TMudaCor.Create(frm: Tform; corentra:TColor);
var i: integer;
  evtc: TEventContainer;
begin
  inherited create;
  FlistaEvt := TStringList.Create;
  FlistaEvt.Sorted:=true;
  FForm := frm;
  FCorEntra:=corentra;

  for i := 0 to FForm.ComponentCount-1 do
  begin
    if
(FForm.Components[i] is TEdit) then
    begin
       
evtc := TEventContainer.Create;
       
evtc.OnEnter := (FForm.Components[i] as TEdit).OnEnter;
       
evtc.OnExit := (FForm.Components[i] as TEdit).OnExit;
       
evtc.CorOriginal := (FForm.Components[i] as TEdit).Color;

       
FlistaEvt.AddObject((FForm.Components[i] as TEdit).Name, evtc);

       
(FForm.Components[i] as TEdit).OnEnter:=  DoEnter;
       
(FForm.Components[i] as TEdit).OnExit:= DoExit;
    end;
  end;

  FlistaEvt.Sort;

end;

destructor TMudaCor.Destroy;
var i: integer;
begin

   for i := 0 to FlistaEvt.Count
-1 do
     
if FlistaEvt.Objects[i] <> nil then
       
FlistaEvt.Objects[i].Free;

   FlistaEvt.Free;
   inherited Destroy;

end;

procedure TMudaCor.DoEnter(sender: tobject);
var evtc: TEventContainer;
  idx: integer;
begin
   if(sender is TEdit) then
         
(sender as TEdit).Color := FCorEntra;

   idx :=
FlistaEvt.IndexOf((sender as TEdit).Name);
   if(idx > -1) then
   begin
     
if (FlistaEvt.Objects[idx] <> nil) then
     
begin
       
evtc:= (FlistaEvt.Objects[idx] as TEventContainer);
     
end;
     
if ((evtc <> nil) and ( Assigned(evtc.OnEnter))) then
       
evtc.OnEnter(sender);
   end;
end;

procedure TMudaCor.DoExit(sender: tobject);
var evtc: TEventContainer;
  idx: integer;
begin


   idx :=
FlistaEvt.IndexOf((sender as TEdit).Name);
   if(idx > -1) then
   begin
     
if (FlistaEvt.Objects[idx] <> nil) then
     
begin
       
evtc:= (FlistaEvt.Objects[idx] as TEventContainer);
     
end;

     
if Assigned(evtc) then
     
begin
         
if (sender is TEdit) then
           
(sender as TEdit).Color := evtc.CorOriginal;
         
if Assigned(evtc.OnExit)  then
           
evtc.OnExit(sender);
     
end;
   end;
end;


end.
o DFM:
object Form1: TForm1
  Left = 359
  Top = 191
  Width = 350
  Height = 358
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = True
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
  Left = 96
  Top = 16
  Width = 32
  Height = 13
  Caption = 'Label1'
  Color = clBtnFace
  ParentColor = False
  end
  object Label2: TLabel
  Left = 8
  Top = 184
  Width = 249
  Height = 65
  Caption =
    'Repare que o edit 3
n'#227'o tem evento no  onexit'#13#10'onenter, mas mesm' +
    'o assim a
mudan'#231'a de cor'#13#10'ocorre. Os outros edits, alem da mudan' +
    #231'a de
'#13#10'cor ele continua fazendo o evento de antes,'#13#10'que era mud'
+
    'ar o texto do
label1 para entrou, saiu etc'
  Color = clBtnFace
  ParentColor = False
  end
  object Edit1: TEdit
  Left = 24
  Top = 58
  Width = 80
  Height = 21
  Color = clSkyBlue
  TabOrder = 0
  Text = 'Edit1'
  OnEnter = Edit1Enter
  OnExit = Edit1Exit
  end
  object Edit2: TEdit
  Left = 24
  Top = 98
  Width = 80
  Height = 21
  Color = clMoneyGreen
  TabOrder = 1
  Text = 'Edit2'
  OnEnter = Edit2Enter
  OnExit = Edit2Exit
  end
  object Button1: TButton
  Left = 224
  Top = 56
  Width = 75
  Height = 25
  Caption = 'Button1'
  TabOrder = 2
  end
  object Button2: TButton
  Left = 224
  Top = 96
  Width = 75
  Height = 25
  Caption = 'Button2'
  TabOrder = 3
  end
  object Edit3: TEdit
  Left = 24
  Top = 136
  Width = 80
  Height = 21
  Color = clMedGray
  TabOrder = 4
  Text = 'Edit3'
  end
  object aEdit4: TEdit
  Left = 120
  Top = 58
  Width = 80
  Height = 21
  Color = clFuchsia
  TabOrder = 5
  Text = 'Edit1'
  end
  object aEdit5: TEdit
  Left = 120
  Top = 98
  Width = 80
  Height = 21
  Color = clAqua
  TabOrder = 6
  Text = 'Edit2'
  end
  object aEdit6: TEdit
  Left = 120
  Top = 136
  Width = 80
  Height = 21
  Color = clLime
  TabOrder = 7
  Text = 'Edit3'
  OnEnter = aEdit6Enter
  OnExit = aEdit6Exit
  end
end
A mesma coisa em Lazarus: 
o Pas 
unit Unit1; 

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls,
Graphics, Dialogs,
  StdCtrls;

type



  TEventContainer = class
  private
     
FOnEnter: TNotifyEvent;
     
FOnExit: TNotifyEvent;
     
FCorOriginal: TColor;
  public
    
property OnEnter: TNotifyEvent read FOnEnter write FOnEnter;
    
property OnExit: TNotifyEvent read FOnExit write FOnExit;
    
property CorOriginal: TColor read FCorOriginal write FCorOriginal;
  end;

  TMudaCor = class
  private
   FForm: TForm;
   FCorEntra: TColor;
   FlistaEvt: TStringList;

  public
    
constructor Create(frm: Tform; corentra:TColor); reintroduce;
    
destructor Destroy; override;
    
procedure DoEnter(sender: tobject);
    
procedure DoExit(sender: tobject);
  end;


  { TForm1 }

  TForm1 = class(TForm)
  Button1: TButton;
  Button2: TButton;
  Edit1: TEdit;
  Edit2: TEdit;
  Edit3: TEdit;
  aEdit4: TEdit;
  aEdit5: TEdit;
  aEdit6: TEdit;
  Label1: TLabel;
  Label2: TLabel;
  procedure aEdit6Enter(Sender: TObject);
  procedure aEdit6Exit(Sender: TObject);
  procedure Edit1Enter(Sender: TObject);
  procedure Edit1Exit(Sender: TObject);
  procedure Edit2Enter(Sender: TObject);
  procedure Edit2Exit(Sender: TObject);
  procedure FormCreate(Sender: TObject);
  procedure FormDestroy(Sender: TObject);
  private
  { private declarations }
  mudador: TMudaCor;
  public
  { public declarations }
  end;

  { TMudaCor }

var
  Form1: TForm1;

implementation



{ TForm1 }

procedure TForm1.Edit1Enter(Sender: TObject);
begin
   Label1.Caption:='entrou no
edit 1';
end;



procedure TForm1.aEdit6Enter(Sender: TObject);
begin
   Label1.Caption:='entrou no
edit 6';
end;

procedure TForm1.aEdit6Exit(Sender: TObject);
begin
   Label1.Caption:='saiu do edit
6';
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  Label1.Caption:='saiu do edit 1';
end;



procedure TForm1.Edit2Enter(Sender: TObject);
begin
  Label1.Caption:='entrou no edit 2';
end;

procedure TForm1.Edit2Exit(Sender: TObject);
begin
  Label1.Caption:='saiu do edit 2';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   mudador := TMudaCor.Create(self, clYellow);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  mudador.free;
end;

{ TMudaCor }

constructor TMudaCor.Create(frm: Tform; corentra: TColor);
var i: integer;
  evtc: TEventContainer;
begin
  inherited create;
  FlistaEvt := TStringList.Create;
  FlistaEvt.Sorted:=true;
  FForm := frm;
  FCorEntra:=corentra;

  for i := 0 to FForm.ComponentCount-1 do
  begin
    if
(FForm.Components[i] is TEdit) then
    begin
       
evtc := TEventContainer.Create;
       
evtc.OnEnter := (FForm.Components[i] as TEdit).OnEnter;
       
evtc.OnExit := (FForm.Components[i] as TEdit).OnExit;
       
evtc.CorOriginal:=  (FForm.Components[i] as TEdit).Color;
       
FlistaEvt.AddObject((FForm.Components[i] as TEdit).Name, evtc);

       
(FForm.Components[i] as TEdit).OnEnter:=@DoEnter;
       
(FForm.Components[i] as TEdit).OnExit:=@DoExit;
    end;
  end;

  FlistaEvt.Sort;

end;

destructor TMudaCor.Destroy;
var i: integer;
begin

   for i := 0 to FlistaEvt.Count
-1 do
     
if FlistaEvt.Objects[i] <> nil then
       
FlistaEvt.Objects[i].Free;

   FlistaEvt.Free;
   inherited Destroy;

end;

procedure TMudaCor.DoEnter(sender: tobject);
var evtc: TEventContainer;
  idx: integer;
begin
   if(sender is TEdit) then
         
(sender as TEdit).Color := FCorEntra;

   idx :=
FlistaEvt.IndexOf((sender as TEdit).Name);
   if(idx > -1) then
   begin
     
if (FlistaEvt.Objects[idx] <> nil) then
     
begin
       
evtc:= (FlistaEvt.Objects[idx] as TEventContainer);
     
end;
     
if ((evtc <> nil) and (evtc.OnEnter <>
nil)) then
       
evtc.OnEnter(sender);
   end;
end;

procedure TMudaCor.DoExit(sender: tobject);
var evtc: TEventContainer;
  idx: integer;
begin

   idx :=
FlistaEvt.IndexOf((sender as TEdit).Name);
   if(idx > -1) then
   begin
     
if (FlistaEvt.Objects[idx] <> nil) then
     
begin
       
evtc:= (FlistaEvt.Objects[idx] as TEventContainer);
     
end;
     
if (evtc <> nil) then
     
begin
         
if (sender is TEdit) then
           
(sender as TEdit).Color := evtc.CorOriginal;
         
if (evtc.OnExit <> nil)   then
           
evtc.OnExit(sender);
     
end;
   end;
end;

initialization
  {$I unit1.lrs}

end.
  o LFM 

object
Form1: TForm1
  Left = 359
  Height = 331
  Top = 191
  Width = 342
  Caption = 'Form1'
  ClientHeight = 331
  ClientWidth = 342
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  ParentFont = False
  LCLVersion = '0.9.26'
  object Label1: TLabel
  Left = 96
  Height = 14
  Top = 16
  Width = 32
  Caption = 'Label1'
  ParentColor = False
  end
  object Label2: TLabel
  Left = 8
  Height = 66
  Top = 184
  Width = 259
  Caption = 'Repare que o edit 3
não tem evento no  onexit'#13#10'onenter, mas mesmo
assim a mudança de cor'#13#10'ocorre. Os outros edits, alem
da mudança de '#13#10'cor ele continua fazendo o evento de
antes,'#13#10'que era mudar o texto do label1 para entrou, saiu etc'
  ParentColor = False
  end
  object Edit1: TEdit
  Left = 24
  Height = 23
  Top = 58
  Width = 80
  Color = clSilver
  OnEnter = Edit1Enter
  OnExit = Edit1Exit
  TabOrder = 0
  Text = 'Edit1'
  end
  object Edit2: TEdit
  Left = 24
  Height = 23
  Top = 98
  Width = 80
  Color = clSkyBlue
  OnEnter = Edit2Enter
  OnExit = Edit2Exit
  TabOrder = 1
  Text = 'Edit2'
  end
  object Button1: TButton
  Left = 224
  Height = 25
  Top = 56
  Width = 75
  Caption = 'Button1'
  TabOrder = 2
  end
  object Button2: TButton
  Left = 224
  Height = 25
  Top = 96
  Width = 75
  Caption = 'Button2'
  TabOrder = 3
  end
  object Edit3: TEdit
  Left = 24
  Height = 23
  Top = 136
  Width = 80
  Color = clMoneyGreen
  TabOrder = 4
  Text = 'Edit3'
  end
  object aEdit4: TEdit
  Left = 120
  Height = 23
  Top = 58
  Width = 80
  Color = clFuchsia
  TabOrder = 5
  Text = 'Edit1'
  end
  object aEdit5: TEdit
  Left = 120
  Height = 23
  Top = 98
  Width = 80
  Color = clAqua
  TabOrder = 6
  Text = 'Edit2'
  end
  object aEdit6: TEdit
  Left = 120
  Height = 23
  Top = 136
  Width = 80
  Color = clLime
  OnEnter = aEdit6Enter
  OnExit = aEdit6Exit
  TabOrder = 7
  Text = 'Edit3'
  end
end
Espero que esse artigo seja util para quem precisar implementar algo assim sem mecher no codigo já existente, ou para quem deseja estudar as semelhanças e diferenças entre as varias linguagens de programação. baixe o conjunto de exemplos no meu sky drive: clicando aqui