Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Controlar eventos de una clase propia (https://www.clubdelphi.com/foros/showthread.php?t=14243)

keglevich 14-09-2004 17:06:20

Controlar eventos de una clase propia
 
Ante todo saludos a todos y gracias por leer mi duda.
Ésta es la siguiente, a ver si me explico bien:
Tengo una clase en cuyo estado tengo una variable de tipo TImage, por ejemplo:

miclase:Class
private
nombre:String;
imagen:TImage;
(...)

De esta clase instanciaré un número indeterminado de objetos, los destruiré y demás en tiempo de ejecución. Mi problema es que necesito tratar los eventos propios de la clase TImage, hablando con mas propiedad, necesito mover la imagen por la pantalla con el ratón y para ello usaré los eventos onmousemove,up,down.
Al crear el objeto, creo tambien la imagen de la siguiente manera:
(...)
Img:=TImage.Create(self);
Img.Parent:=self;
Img.Picture.Bitmap.PixelFormat:=pf24bit;
img.Picture.LoadFromFile(imagen.bmp');
Img.Transparent:=true;
img.Stretch:=true;
img.Top:=350;
img.Left:=300;
img.Visible:=true;

¿Cómo hago para tratar los eventos de la variable TImage contenida en mi clase? ¿Tengo que crear métodos para esta clase que traten especificamente estos eventos?¿Se puede hacer?...estoy un poco perdido, la verdad...


"minolles" de gracias....

:confused:

Neftali [Germán.Estévez] 14-09-2004 18:08:34

Crea un procedimiento con los mismos parámetros del evento y cuando creas un objeto le asignas al evento esa rutina.


Código Delphi [-]
(...) 
Img:=TImage.Create(self);
Img.Parent:=self;
Img.Picture.Bitmap.PixelFormat:=pf24bit;
img.Picture.LoadFromFile(imagen.bmp');
Img.Transparent:=true;
img.Stretch:=true;
img.Top:=350;
img.Left:=300;
img.Visible:=true;
// Capturar evento de Doble click
img.OnDblClick := _MyImagenClick;

y el procedimiento lo habrás definido en la parte privada de ésta forma, por ejemplo:

Código Delphi [-]
procedure _MyImagenClick(Sender: TObject);

Para saber los parámetros del procedimiento ten en cuenta que deben ser los mismos del evento que quieres "capturar".
Puedes asignar a varios eventos/componentes el mismo procedimiento.

keglevich 15-09-2004 13:02:27

MUCHAS GRACIAS.....y pequeña duda añadida
 
¡¡Neftali macho, muchas gracias por tu inestimable ayuda!!
Ahora a raiz de esto me ha salido otra duda...
Cuando hago el

imagen:=TImage.create(self);

al estar dentro de una clase mia, me dice que no es de tipo TComponent bla bla bla.
Si hago que herede de ella, miclase(TComponent) , en el constructor, que tendrá esta pinta:

constructor miclase.create(n:String);
begin
nombre:=n;
im:=TImage.Create(self);
(...)

peta con un acces violation...pensé que tenía que llamar al constructor de la clase padre con inherited create(self) ...pero me sigue petando...
¿qué estoy haciendo mal, muy mal...rematadamente mal?

"cienes de minolles" de gracias...

Lepe 15-09-2004 13:26:36

Simplemente pasa del tema. Dile que nadie se encargará de destruir el objeto pasandole el parámetro nil y asegurate de destruirlo tu a mano.

Código Delphi [-]
// en el  constructor de tu clase
img := Timage.Create(nil);


destructor Miclase( ...);
begin

  try 
  (....)
  finally
    Freeandnil(img);
  end;
end;

keglevich 15-09-2004 13:58:21

Ok
 
¡¡¡Muchas gracias Lepe, funciona perfectamente!!!! :D


La franja horaria es GMT +2. Ahora son las 10:34:17.

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