FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Evento con valores de retorno...
Hola de nuevo a todos. Quisiera saber cómo puedo lanzar un evento proporcionando al que lo capture un determinado valor. Es decir, supongamos que el evento se lanza cuando una propiedad de una determinada clase creada por mi mismo tome un cierto valor. Al lanzarse el evento, me gustaria proporcinar dicho valor de forma automática a quien decida capturarlo. Todo esto es un estilo a los eventos del ratón que proporcionan los valores X, Y de la posición, el botón pulsado y si el estado del Shift. Gracias de antemano. Un saludo a todos.
__________________
craven |
#2
|
|||
|
|||
A ver si esto te vale:
Defines el tipo de evento que necesitas (ejemplo, todo parecido con la realidad es algo, no me acuerdo) TMiEventoDeLaMuerte = procedure (Sender: TObject; const ValorQueTeDoy Integer; var ValorQueTeDejoModificar Integer); Defines la propiedad en tu objeto para que los demás enganchen el evento (como pasa con el onclik) TMiObjetoTerrible = (partes omitidas para proteger a Sadam) private FOnCambioEnorme: TMiEventoDeLaMuerte; public property OnCambioEnorme: TMiEventoDeLaMuerte read FOnCambioEnorme write FOnCambioEnorme; end; Y solo queda que en el método que hace de set de tu propiedad haga algo parecido a : procedure TMiObjetoTerrible.SetMiPropiedadMutante(Value: Integer); var NuevoValor: Integer; begin NuevoValor := Value; if Assigned(OnCambioEnorme) then OnCambioEnorme(Self, Value, NuevoValor); FMiPropiedadMutante := NuevoValor; // por ejemplo. Esto lo que hace es dejar al que recibe el evento que pueda cambiar el valor (un poner que dicen por ahí) end; |
#3
|
|||
|
|||
Ante todo, gracias... Pero, si creo un objeto del tipo TMiObjetoTerrible, ¿cómo capturo el evento? Gracias.
__________________
craven |
#4
|
|||
|
|||
El componente TMyObjetoTerrible no tiene que interceptar el evento, sino solamente lanzarlo cuando lo estime conveniente.
En el ejemplo que te ofrece Bacterion se lanza al cambiar la propiedad, es decir, dentro del método SetMiPropiedadMutante, y si te fijas primero se comprueba que FOnCambioEnorme (el evento en sí) esté asignado por el usuario, si es nil no se dispara tal evento.
__________________
Guía de Estilo |
#5
|
|||
|
|||
No quiero que sea el componente quien intercepte el evento, sino el padre de dicho componente... ¿Cómo lo hago?
__________________
craven |
#6
|
||||
|
||||
Código:
interface type TMiEventoDeLaMuerte = procedure (Sender: TObject; const ValorQueTeDoy Integer; var ValorQueTeDejoModificar Integer) of object; TMiObjetoTerrible = class private FOnCambioEnorme: TMiEventoDeLaMuerte; public property OnCambioEnorme: TMiEventoDeLaMuerte read FOnCambioEnorme write FOnCambioEnorme; end; TPadre = class(TComponent) private FMiObjetoTerrible : TMiObjetoTerrible; procedure MiObjetoTerribleEvento(Sender: TObject; const ValorQueTeDoy : Integer; var ValorQueTeDejoModificar : Integer); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; implementation constructor TPadre.Create(AOwner: TComponent); begin inherited; FMiObjetoTerrible := TMiObjetoTerrible.Create; FMiObjetoTerrible.OnCambioEnorme := MiObjetoTerribleEvento; end; destructor TPadre.Destroy; begin FMiObjetoTerrible.Free; inherited; end; procedure TPadre.MiObjetoTerribleEvento(Sender: TObject; const ValorQueTeDoy: Integer; var ValorQueTeDejoModificar: Integer); begin // Aquí accedo al evento!! end;
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. Última edición por delphi.com.ar fecha: 10-06-2003 a las 19:42:59. |
|
|
|