Hi,
in Deinem Konstruktor kannst Du die Zeilen mit dem Test <> nil entfernen. Der Unterschied zwischen Free und Destroy besteht gerade darin, dass Free erst einen Test auf <> nil vornimmt und nur dann den eigentlichen Destruktor (Destroy) aufruft, wenn eine Referenz <> nil übergeben wurde. Du prüfst also hier etwas, dass Du gleich danach erneut prüfst.
Was Dein eigentliches Problem angeht, so kannst Du einfach das OnClick-Ereignis des Labels setzen. Dabei gibt es zwei Möglichkeiten, wenn Du eine statische Ereignisbehandlung hast (also das OnClick statisch ist), kannst Du einfach dem Label.OnClick das TMyPanel.OnClick zuweisen. Wird Letzteres aber von außen verändert, müsstest Du dafür sorgen, dass Du dann auch für das Label entsprechend den Methodenzeiger umsetzt (der würde sonst noch auf die alte Behandlung zeigen).
Alternativ legst Du einfach einen neue Methode an, deren Signatur einem TNotifyEvent entspricht (also eine Prozedur, Argument Sender vom Typ TObject). In dieser Methode kannst Du dann einfach die Ereignis-Behandlung des TMyPanel aufrufen. Diese Methode wiederum kannst Du dann dem Label zuweisen
Delphi-Quellcode:
procedure TMyPanel.MyLabelOnClick(Sender: TObject);
begin
if assigned(self.OnClick) then
begin
self.OnClick(self);
end;
end;
constructor TMyPanel.Create(AOwner: TComponent);
begin
inherited create(AOwner) ;
L1 := TLabel.Create(self);
L1.Parent := self ;
L1.Visible := TRUE ;
L1.OnClick := self.MyLabelOnClick;
....
Gruß Der Unwissende
Ps nach rotem Kasten
Ich hatte Dich jetzt so verstanden, dass Du hier wirklich das gleiche Ereignis auslösen möchtest, wie beim Click auf das restliche Panel? Ansonsten treffen es die anderen Beiträge wohl besser!