Hasta, incluso funciona si se define dentro de la propia clase la rutina:
Código Delphi
[-]unit UMiClase;
interface
uses Dialogs;
type
TCambiaCadenaEvent = procedure(Cadena: string) of object;
TMiClase = class
private
FCadena: string;
FOnCambiaCadenaEvent: TCambiaCadenaEvent;
procedure SetCadena(Value: string);
procedure SetOnCambiaCadenaEvent(Value: TCambiaCadenaEvent);
procedure CambiaCadenaRespuesta(Cadena: string);
public
constructor Create;
destructor Destroy; override;
property Cadena: string read FCadena write SetCadena;
property OnCambiaCadenaEvent: TCambiaCadenaEvent read FOnCambiaCadenaEvent write SetOnCambiaCadenaEvent;
end;
implementation
procedure TMiClase.CambiaCadenaRespuesta(Cadena: string);
begin
ShowMessage(Cadena);
end;
constructor TMiClase.Create;
begin
inherited Create;
FOnCambiaCadenaEvent := CambiaCadenaRespuesta;
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.
Y ahora en el create del form no hacemos la asignación:
Código Delphi
[-]
procedure TForm1.FormCreate(Sender: TObject);
begin
FMiClase := TMiClase.Create;
end;
Y si no le comentamos la acción notarás que realiza la rutina que defines en tu form.
Saludos,