Ver Mensaje Individual
  #5  
Antiguo 18-09-2004
keglevich keglevich is offline
Registrado
 
Registrado: oct 2003
Posts: 9
Reputación: 0
keglevich Va por buen camino
Question Concretando el problema

Ante todo muchas gracias por vuestro consejo y esfuerzo.
Voy a intentar concretar el tema...
No se si lo que quiero hacer se puede hacer si crearte tu propio componente y tus propios eventos. Sospecho que si, así que intentaré explicarme con mas claridad metiendo mas código de por medio
No pondré las clases que uso porque son un poco coñazo y largas, así que extrapolaré algo que mas o menos sea equiavlente pero resumido:

Código:
unit unit1;

TDibujo = class

private
 nombre:String;
 x,y:single;
 radio:single;
 imagen:TImage;
 procedure _Onclick(Sender:TObject);

constructor    Create(nombre:String;cx,cy,radio:single;im:String;padre:TWinControl);
 (...)

end;


implementation
 
 constructor  
  TDibujo.create(nombre:String;cx,cy,rad:single;im:String;padre:TWinControl);

   begin
    x:=cx;
    y:=cy;
    radio:rad;
     imagen:=TImage.Create(nil);
     imagen.Parent:=padre;
     imagen.Picture.Bitmap.PixelFormat:=pf24bit;
     imagen.OnClick:=_imagenclick;
     if radio<10 then
      imagen.Picture.LoadFromFile('pequeño.bmp')
     else
      imagen.Picture.LoadFromFile('grande.bmp');

   end;

(...)

 procedure _OnClick(Sender:TObject);
  begin
   ?¿?¿?¿?
  end;

IDEA - OBJETIVO

En el form de la unit2 habrán:

-boton CREAR: que cada vez que se pulse, creará un objeto de tipo TDIbujo. La imagen se presentará en el form según las coordenadas que se le asignaron al objeto al crearlo ( por ejemplo de forma aleatoria ). Claro,¿no? :P

- 4 Componentes tipo TEdit, vacios, en la parte inferior del form, con sus TLabels: "nombre, coordenada X, coordenada Y, Radio".

Así tendré tantas imágenes en el form como objetos creados de TDibujo.
Estas imágenes que representan a los objetos de TDibujo, se pueden mover con el ratón, es decir, pinchando sobre una y arrastrandola donde quieras. Las coordenadas de donde sueltes la imagen, deben actualizarse en el objeto. ESTO LO TENGO RESUELTO GRACIAS A NEFTALI .

EL PROBLEMA
Tambien quiero que cuando hagas un click sobre cualquier imagen, en los TEdit aparezca los datos del objeto que representa esa imagen. Se entiende ¿no?. Hago click sobre una imagen, y aparece su nombre, coordenadas, y radio en los TEdit del formulario.

LA SOLUCIÓN CUTRE
Si declaro/implemento la clase TDibujo en la unit2 podría implementar así:

Código:
 procedure TDibujo._OnClick(Sender:TObject);
  begin
   TEditNombre.text:=nombre;
   TEditcX.text:=FloatToStr(x);
   TEditcY.text:=FloatToStr(y);
   TEditRadio:=FloatToStr(radio);
  end;
Lo puedo hacer así ya que los componentes TEdit están en el mismo formulario que la (definición de la) clase y son visibles a ella(a la clase), pudiendo así acceder sin problemas.
Pero esta solución me parece muy poco elegante, aparte de otras cosas.

EL PROBLEMA (AMPLIACIÓN)

Como la clase está en la unit1, y en la unit2 empiezo así:
Código:
 unit unit2

  uses unit1;
NO PUEDO ACCEDER A LOS COMPONENTES DE LA unit2 DESDE LA unit1, es decir:

Código:
 procedure TDibujo. _OnClick(Sender:TObject);
  begin
   unit2.TEditNombre.text:=nombre;
   (...)
...me dice que no sabe quien sea unit2, porque no la usa, y no puede usarla porque crearia un "circular unit reference".
Cuando hago un click sobre la imagen, capturo el evento, pero tengo que codificarlo en la unit1, y por lo tanto no puedo acceder a los componentes de la unit2 para mostrar los datos del objeto....arf arf.
Espero que ahora se entienda bien mi problema :P.

La idea de jachguate de crearme mi propio componente y mis propios eventos, me parece buena....pero mis conocimientos no llegan a tanto... Y por ahora no tengo demasiado tiempo para aprenderlo, aunque lo haré en un futuro ya que ya veo que es bastante útil.

Creo que no se me olvida nada....de todos modos ¡¡¡MUCHAS GRACIAS POR VUESTRA AYUDA!!!

Editado por jachguate. razon: sacar de la etiqueta code lo que no debia estar alli:

Última edición por jachguate fecha: 18-09-2004 a las 01:11:18.
Responder Con Cita