Zitat von
Coder1990:
1. Alle drei Procedures in der Protected section werden mit "Deklaration unterscheidet sich von vorheriger Deklaration" bemängelt. Was ist hier falsch?
Das steht doch in der Fehlermeldung. Die Deklarationen sind unterschiedlich.
zu 2: ich habe hier leider gerade keinen Rechner mit Mausrad und kann das leider nicht testen.
Zitat von
Coder1990:
3. Verständnisfrage: ...
Wenn ich jetzt noch zusätzlich in der Form drin eine Eventhandler procedure deklariere, wie sieht dann der Abarbeitungsblock aus?
Das kommt darauf an, wo du deinen Eventhandler aufrufst.
So und jetzt nochmal zum 1. Punkt:
Das ist gar nicht so leicht zu beantworten, weil ich keine Gedanken lesen kann.
Wenn die überschriebenen Methoden wirklich so sein sollen wie du sie in deinem ersten Post deklariert hat, dann musst du sie hart überschreiben.
Delphi-Quellcode:
TMp3Grid = class(TStringGrid)
private
FBeforeEdit:string;
protected
procedure DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); reintroduce;
procedure SetEditText(Sender: TObject; ACol, ARow: Integer;const Value: string); reintroduce;
procedure SelectCell(Sender: TObject; ACol, ARow: Integer;var CanSelect: Boolean); reintroduce;
und in den Methoden kannst du dann immer noch ein inherited verwenden, aber eben nur mit den Parametern der übergeordneten Methode...
Delphi-Quellcode:
procedure TMp3Grid.DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
inherited DragOver(Source, X, Y, State, Accept);
end;
procedure TMp3Grid.SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
if inherited SelectCell(ACol, ARow) then
begin
end;
end;
procedure TMp3Grid.SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: string);
begin
inherited SetEditText(ACol, ARow, Value);
end;
Oder aber du willst die Methoden nur überschreiben und ihren Aufbau unverändert lassen, dann musst du sie mit override überschreiben. Aber auch gefälligst den gleichen Aufbau beibehalten.
Delphi-Quellcode:
TMp3Grid = class(TStringGrid)
private
FBeforeEdit:string;
protected
procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); override;
procedure SetEditText(ACol, ARow: Integer;const Value: string); override;
function SelectCell(ACol, ARow: Longint): Boolean; override;
und in den Methoden kannst du dann einfach inherited verwenden, um die übergeordneten Methode aufzurufen...
Delphi-Quellcode:
procedure TMp3Grid.DragOver(Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
inherited;
end;
function TMp3Grid.SelectCell(ACol, ARow: Integer): Boolean;
begin
Result:=inherited SelectCell(ACol, ARow);
end;
procedure TMp3Grid.SetEditText(ACol, ARow: Integer; const Value: string);
begin
inherited;
end;
Und noch ein paar Gedanken...
Um in einem Projekt eine Komponente mehrfach einzusetzen ist es nicht unbedingt nötig eine eigene, abgeleitete Klasse zu erstellen. Dies würde auch problemlos über einen Frame gehen. Dort die Komponente drauf und schon sind alle Methoden in eine eigene
Unit ausgelagert und man kann visuell seine speziellen Erweiterungen einmal schreiben und kann diese in seinem Projekt auch mehrfach einsetzen. Dann gibt es auch keine Probleme mit neukompilieren, installieren und in anderen Delphi-Varianten, die keine eigenen Komponenten in die
IDE integrieren können.