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;