Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Class Ereignisse vererben

  Alt 28. Jan 2005, 10:07
Zitat von Hansa:
ich habe eine Klasse, die wird weitervererbt (mehrfach). Nun ist in einer stark abgeleiteten Klasse das OnKeyDown-Ereignis ganz anders, als bei den Vorfahren. Es geht nur darum, dieses eine Ereignis auszuschalten. Alles ist als virtual deklariert.
Man kann Events, die einmal Public gemacht wurden in abgeleiteten Klassen nicht mehr unsichtbar machen.
Du kannst aber in der abgeleiteten Klasse verhindern, dass das Event ausgelöst wird.
Dazu muss in der Basisklasse eine virtuelle Funktion existieren, über die das Event ausgelöst wird:
Delphi-Quellcode:
TBaseClass = class(TPersistent)
   private
     FOnKeyDown : TKeyEvent;
   protected
      procedure DoOnKeyDown(var Key: Word; Shift: TShiftState);virtual;
end;

procedure TBaseClass.DoOnKeyDown(var Key: Word; Shift: TShiftState);
begin
   if assigned(FOnKeyDown) then
      FOnKeyDown(self, Key, Shift);
end;
In der abgeleiteten Klasse kannst du DoOnKeyDown überschreiben und so verhindern, dass das Event
ausgelöst wird.
Delphi-Quellcode:
procedure TAbgeleitetClass.DoOnKeyDown(var Key: Word; Shift: TShiftState);
begin
   // einfach nichts tun (und v.a. nicht inherited aufrufen)
end;
Andreas
  Mit Zitat antworten Zitat