Einzelnen Beitrag anzeigen

omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Event Zuweisung und Modifikation in eigenen Komponenten

  Alt 23. Jul 2008, 01:01
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.
  Mit Zitat antworten Zitat