Ver Mensaje Individual
  #5  
Antiguo 30-01-2009
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
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

  // Mi tipo de evento
  TCambiaCadenaEvent = procedure(Cadena: string) of object;

  TMiClase = class
    private
      FCadena: string;
      // nuestro campo de tipo evento
      FOnCambiaCadenaEvent: TCambiaCadenaEvent;

      // métodos privados
      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

{ TMiClase }

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
    { Private declarations }
    FMiClase: TMiClase;
    procedure MiRutina(Value: string);
  public
    { Public declarations }
  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
  // esta es la respuesta al evento
  Label1.Caption := 'Hey mira... a cambiado el texto, ahora es: ' + Value;
end;

end.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita