Hai gfjs,
pauschal kann man nicht sagen wo das inherited stehen muss/darf. In deinem Fall sollte es nach deinem Code stehen. Dann sind die "unerwünschten" Zeichen im OnKeyPress der Komponente schon raus gefiltert.
Hier mal ein Beispiel für die
falsche Position in
TMyClass2. In TMyClass1 ist es richtig.
Delphi-Quellcode:
TMyClass1 = class(TObject)
private
fList : TObjectList;
public
constructor Create;
destructor Destroy; override;
function AddItem (aValue : TObject) : integer;
end;
TMyClass2 = class(TMyClass1)
public
constructor Create;
destructor Destroy; override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
MyClass2 : TMyClass2;
begin
MyClass2 := TMyClass2.Create;
end;
{ TMyClass1 }
function TMyClass1.AddItem(aValue: TObject) : integer;
begin
fList.Add(aValue)
end;
constructor TMyClass1.Create;
begin
inherited;
fList := TObjectList.Create; // Hier wird eine Instanz von fList erzeugt
end;
destructor TMyClass1.Destroy;
begin
fList.Free; // Hier wird fList wieder freigegeben.
inherited;
end;
{ TMyClass2 }
constructor TMyClass2.Create;
begin
fList.Add(nil); // Hier kommt ein Fehler weil fList noch nicht erzeugt wurde.
inherited;
end;
destructor TMyClass2.Destroy;
var
ndx: Integer;
begin
inherited;
for ndx := fList.Count - 1 downto 0 do // und hier weil fList nicht mehr existier
begin
fList.Delete(ndx);
end;
end;
In der TMyClass1 wird eine Object vom Typ TObjectList erzeugt. Wenn ich im Construction von TMyClass2 vor dem inherited, welches in diesem Fall ja den Constructon von TMyClass1 aufruft, versuche auf fList zuzugreifen kommt es zu einer Schutzverletzung da von fList ja noch keine Instanz erzeugt wurde. Analog dazu knallt es beim freigeben von TMyClass2 da ich
nachdem aufruf des Destructors von TMyClass1 noch einmal versuche auf fList zuzugreifen. Diese ist zu diesem Zeitpunkt aber schon zerstört worden.
Ich hoffe das hilft Dir etwas?
Stephan B.