Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-06-2003
craven craven is offline
Miembro
 
Registrado: may 2003
Posts: 78
Poder: 21
craven Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 09-06-2003
Bacterion Bacterion is offline
Miembro
 
Registrado: may 2003
Posts: 91
Poder: 21
Bacterion Va por buen camino
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;
Responder Con Cita
  #3  
Antiguo 09-06-2003
craven craven is offline
Miembro
 
Registrado: may 2003
Posts: 78
Poder: 21
craven Va por buen camino
Ante todo, gracias... Pero, si creo un objeto del tipo TMiObjetoTerrible, ¿cómo capturo el evento? Gracias.
__________________
craven
Responder Con Cita
  #4  
Antiguo 10-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 21
andres1569 Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 10-06-2003
craven craven is offline
Miembro
 
Registrado: may 2003
Posts: 78
Poder: 21
craven Va por buen camino
No quiero que sea el componente quien intercepte el evento, sino el padre de dicho componente... ¿Cómo lo hago?
__________________
craven
Responder Con Cita
  #6  
Antiguo 10-06-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:46:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi