Ver Mensaje Individual
  #4  
Antiguo 30-01-2009
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Reputación: 16
noob Va por buen camino
Hola Delphius, he seguido tus indicaciones pero creo que algo me falla.

Tengo esto:

Unit1.pas (mi formulario)

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    MiClase: cMiClase;
    procedure MiRutina(Cadena: string);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  MiClase := cMiClase.Create;
  MiClase.OnCambiaCadenaEvent := MiRutina;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  MiClase.Cadena := 'Hola, mira como cambio';
end;

procedure TForm1.MiRutina(Cadena: string);
begin
  Edit1.Text := Cadena;
end;

end.

MiUnit.pas

Código Delphi [-]
unit MiUnit;

interface

type

  TCambiaCadenaEvent = procedure (Cadena: string) of object;

  cMiClase = class
               private
                 FCadena: string;
                 FOnCambiaCadenaEvent: TCambiaCadenaEvent;
                 procedure SetCadena(Value: string);
                 procedure SetOnCambiaCadenaEvent(Value: TCambiaCadenaEvent);
                 procedure EventoCambiarCadena(Cadena: string);
               public
                 constructor Create;
                 property Cadena: string read FCadena
                                         write SetCadena;
                 property OnCambiaCadenaEvent: TCambiaCadenaEvent read FOnCambiaCadenaEvent
                                                                  write SetOnCambiaCadenaEvent;
             end;

implementation

uses Dialogs;

constructor cMiClase.Create;
begin
  FOnCambiaCadenaEvent := EventoCambiarCadena;
end;

procedure cMiClase.SetCadena(Value: string);
begin
  if Value <> FCadena then
    begin
      FCadena := Value;
      if Assigned(FOnCambiaCadenaEvent) then // comprobamos que haya Rta
        FOnCambiaCadenaEvent(Value); // disparamos evento
    end;
end;

procedure cMiClase.SetOnCambiaCadenaEvent(Value: TCambiaCadenaEvent);
begin
  FOnCambiaCadenaEvent := Value;
end;

procedure cMiClase.EventoCambiarCadena(Cadena: string);
begin
  ShowMessage(Cadena); // o lo que quieras que haga.
end;

end.

Saludos.

Última edición por noob fecha: 30-01-2009 a las 18:36:17.
Responder Con Cita