bueno amigo enecumene, independintemente de si lo haces con Frames o Paneles, creo que debes aclarar un poco mas el tema de donde y por que se crea este evento y como funciona...
Si buscas en la ayuda, verás que el evento OnClick está definido como una propiedad (Property) dentro de la mayoria de objetos visuales (¿o todos?)
Código Delphi
[-]
Property OnClick:TNotifyEvent;
entonces Onclick es una variable (puntero) que referencia a un procedimiento... Pero atención no es cualquier procedimiento..!!! es uno especial definido como un tipo asi:
Código Delphi
[-]
type TNotifyEvent = procedure (Sender: TObject) of object;
Esto quiere decir que el tipo TNotifyevent es un tipo de procedimiento que debe estar definido dentro de una clase (De ahi el
of Object)
Entonces... tu puedes definir tu procedimiento dentro de cualquier clase que tengas en esta u otra unidad... lo mas comun es hacerlo dentro del Tform
Código Delphi
[-]
TForm1 =class(Tform)
public
procedure MyOnClick (Sender: TObject);
end;
TMyPanelPersonalizado = class(Tpanel)
Public
procedure MyOnClick (Sender: TObject);
end;
TunaOtraClaseDePanel=class(TPanel)
public
end;
La implementación, la debes hacer (Obviamente en la seccion
implementation)
De la siguiente Manera:
Código Delphi
[-]
Procedure TForm1.MyOnClick(Sender:TObject);
Begin
end;
Procedure TMyPanelPersonalizado.MyOnClick(Sender:TObject);
Begin
end;
ahora, puedes comenzar a asignarle tus eventos Onclick al objeto que quiereas..!!!
Aunque aqui tengo una duda y por favor me corrigen....creo que no puedes asignarselo a la misma clase donde fue definida... es decir, en el caso de
Código Delphi
[-]
TMyPanelPersonalizado = class(Tpanel)
Public
procedure MyOnClick (Sender: TObject);
end;
No podrias hacer esto
Código Delphi
[-]
Constructor TMyPanelPersonalizado.Create;
Begin
...
OnClick:=MyOnClick;
end;
Pero si puedes hacer esto:
Código Delphi
[-]
procedure TForm1.FormCreate(Sender: TObject);
Begin
Label1.OnClick:=MyOnclick; Panel1.OnClick:=MyOnClick;
with TMiPanelpersonalizado.Create(...) do
begin
Parent := Self; Align := alClient;
Onclick := MyClick; end;end;
En tu caso definiste el evento en el Tpanel1 y se lo asignaste a tu imagen en el evento OnCreate del Panel....
como todos los objetos referncian al mismo evento onclick, entonces los puedes diferenciar mmediante el sender...
El sender, en este y todos los objetos es la instancia que dispara el evento... y puedes difernciar tus objetos asi:
Código Delphi
[-]
Procedure TForm1.MyOnClick(Sender:TObject);
Begin
if Sender is tLabel then
(Sender as Tlabel).Captio:='Hola';
if Sender is TMyPanelPersonalizado then
(sender as TPanelPersonalizado).Caption:='Otra cosa....'
if Sender.Name='TLabel1' then
showMessage('Pinchaste el Label1');
end;
Saludos....