PDA

Ver la Versión Completa : Aun tengo dudas....


craven
10-06-2003, 19:16:52
Hola amigos. Agradezco vuestra ayuda, pero aún hay algo que no funciona en todo esto... A ver. Imaginad el siguiente código:

type
TMiEvento = procedure (Sender: TObject; var value : Integer) ;

TMiClase = class
private
valor : Integer ;
event : TMiEvento ;

procedure SetValor (vlr : Integer) ;
public
property OnMyEvent: TMiEvento read event write event ;
property Asignar: Integer read valor write SetValor ;
end ;

TForm1 = class(TForm)

Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure mioOnEvento (Sender: TObject; var value : Integer) ;
end ;

var
Form1: TForm1;
mio : TMiClase ;

implementation

procedure TMiClase.SetValor (vlr : Integer) ;
begin
valor := vlr ;
if assigned (event) then event(self,vlr) ;
end ;

procedure TForm1.Button1Click(Sender: TObject);
begin
mio.Asignar := 4 ;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
mio := TMiClase.Create ;
mio.OnMyEvent := mioOnEvento ;
end;


¿Cómo capturo desde el Form1 el evento que lanza MICLASE? Si lo hago como sigue, no funciona...

procedure TForm1.mioOnEvento (Sender: TObject; var value : Integer) ;
begin
ShowMessage('El valor es = ' + intToStr(value)) ;
end ;

Gracias de antemano. Un saludo a todos.

roman
10-06-2003, 19:30:58
Posteado originalmente por craven
¿Cómo capturo desde el Form1 el evento que lanza MICLASE? Si lo hago como sigue, no funciona...


¿Y cómo es que no funciona? ¿Te manda un error? ¿No da el valor esperado? ¿Qué es lo que pasa?

Lo más recomendable en estos casos es poner un "breakpoint" donde asignas el valor e ir rastreando el código con F7. Siendo un código bastante corto no deberías tener problemas para encontrar dónde está el error.

De cualquier forma no podemos adivinar el por qué falla. ¿Qué tal si nos das una ayudadita?

// Saludos

Bacterion
10-06-2003, 19:34:40
Primero, que
TMiEvento = procedure (Sender: TObject; var value : Integer) of object;

(fijate en el of bject). Con of Object defines que es un puntero a método de objeto y no a un procedimiento normal (que no cuelga de un objeto).

Por lo demás, he copiado tu código y en el click del botón me sale un ventanuco diciendome el valor asignado.

craven
11-06-2003, 16:42:20
Gracias a ambos. Lo que pasaba era exactamente que faltaba 'of object' al final de la declaración del evento. Un saludo.