Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: Events einer Komponenete in einer NEUEN ererbten Kompone

  Alt 10. Mai 2007, 12:23
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!
  Mit Zitat antworten Zitat