Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Clase que contiene una Timage (https://www.clubdelphi.com/foros/showthread.php?t=63714)

astwin 27-02-2009 09:17:30

Clase que contiene una Timage
 
Hola, tengo un pequeño problema. Tengo una clase, la cual posee un objeto del tipo Timagen. Cuando un objeto de la clase que me e definido le asigno como parent un panel a la imagen para que se muestre en el. El problema reside en cuando pulso con el raton encima de la imagen, y es que el sender resulta ser el Timage y quiero poder acceder al objeto el cual contiene esta Timage.

Código Delphi [-]
// Mi clase que contiene un objeto Timage
type TgraphBlock=class(Tpersistent)
  public
    image: Timage;
    dato:integer;
end;
//...

// Funcion que le asigno al evento onMouseDown del Timagen
procedure TgraphBlock.ImageMouseDown(Sender: TObject; Button:TMouseButton;  Shift: TShiftState; X, Y: Integer);

begin
  if Button = mbLeft then
    with Sender as TImage do
    begin
      // Cómo podría acceder ahora al dato si tengo una referencia al Timage, no al objeto del tipo TgraphBlock

    end;
 
end;

Si pudieran ayudarme les estaria muy agradecido

Neftali [Germán.Estévez] 27-02-2009 09:30:32

Cuando creas el TImage asígnale como owner tu objetoTGraphBlock

Código Delphi [-]
  ...
  image := TImage.Create(Self);

Cuando quieras acceder al objeto contenedor, basta con que accedas a esa propiedad.

Código Delphi [-]
var
  gb:TGrapkBlock;
begin
...
with Sender as TImage do begin
  // Cómo podría acceder ahora al dato si tengo una referencia 
  // al Timage, no al objeto del tipo TgraphBlock
  if (TImage(Sender) is TgraphBlock) then
    gb := TGraphBlock(TImage(Sender).Owner;
    ...
  end;
end;

astwin 27-02-2009 09:47:46

No puedo realizar eso, ya lo he intentado.

Código Delphi [-]
  image:=TImage.Create(self); // Propietario seria el TgraphBlock 
  image.parent:=Panel1; // pertenece al panel

Me da un error "[DCC Error] BloquesGraficos.pas(248): E2010 Incompatible types: 'TComponent' and 'TgraphBlock'"

Neftali [Germán.Estévez] 27-02-2009 10:43:52

¿Puedes hacer este cambio?

Código Delphi [-]
type TgraphBlock=class(TComponent)

astwin 27-02-2009 10:56:22

Pues en principio creo q no, ya que la tengo declarada como que hereda de Tpersistent

Código Delphi [-]
type TgraphBlock=class(Tpersistent)

¿alguna sugerencia mas?

Por cierto, muchas gracias por toda la ayuda y por tu interes.

astwin 27-02-2009 11:47:30

Ya esta resuelto. Como el metodo TgraphBlock.ImageMouseDown se lo asigno al evento onMouseDown de la imagen, dentro de este metodo self se refiere al objeto del tipo TgrahBlock, y sender hace referencia a la imagen.


La franja horaria es GMT +2. Ahora son las 19:14:04.

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