Pues debería funcionar. A vista rápida no veo error. Prueba este código, verás que funciona apropiadadamente:
Unidad donde está la clase
Código Delphi
[-]
unit UMiClase;
interface
type
TCambiaCadenaEvent = procedure(Cadena: string) of object;
TMiClase = class
private
FCadena: string;
FOnCambiaCadenaEvent: TCambiaCadenaEvent;
procedure SetCadena(Value: string);
procedure SetOnCambiaCadenaEvent(Value: TCambiaCadenaEvent);
public
constructor Create;
destructor Destroy; override;
property Cadena: string read FCadena write SetCadena;
property OnCambiaCadenaEvent: TCambiaCadenaEvent read FOnCambiaCadenaEvent write SetOnCambiaCadenaEvent;
end;
implementation
constructor TMiClase.Create;
begin
inherited Create;
FOnCambiaCadenaEvent := nil;
end;
destructor TMiClase.Destroy;
begin
FOnCambiaCadenaEvent := nil;
inherited Destroy;
end;
procedure TMiClase.SetCadena(Value: string);
begin
if FCadena <> Value
then begin
if Assigned(FOnCambiaCadenaEvent)
then FOnCambiaCadenaEvent(Value);
end;
end;
procedure TMiClase.SetOnCambiaCadenaEvent(Value: TCambiaCadenaEvent);
begin
FOnCambiaCadenaEvent := Value;
end;
end.
Unidad del form:
Código Delphi
[-]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, UMiClase, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
private
FMiClase: TMiClase;
procedure MiRutina(Value: string);
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FMiClase := TMiClase.Create;
FMiClase.OnCambiaCadenaEvent := MiRutina;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FMiClase.Free;
Action := CaFree;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FMiClase.Cadena := Edit1.Text;
end;
procedure TForm1.MiRutina(Value: string);
begin
Label1.Caption := 'Hey mira... a cambiado el texto, ahora es: ' + Value;
end;
end.
Saludos,