Hallo,
ich versuche mich gerade das erste Mal daran, eine eigene Komponente zu entwickeln. Und zwar möchte ich TStringGrid so weiterentwickeln, dass ich für den Text in den Zellen solche Eigenschaften wie TextAlignment oder Abstand des Textes innerhalb der Zelle (hab ich HorzCellMargin genannt) angeben kann.
Ich habe bis jetzt folgenden Quelltext:
Delphi-Quellcode:
unit SDStringGrid;
interface
uses
SysUtils, Classes, Controls, Grids, types, Dialogs;
type
TSDGridDrawState =
set of (gdSelected, gdFocused, gdFixed, gdRowSelected,
gdHotTrack, gdPressed);
TSDStringGrid =
class(TStringGrid)
private
{ Private-Deklarationen }
FHorzCellMargin : integer;
procedure SetHorzCellMargin(Value: integer);
protected
{ Protected-Deklarationen }
procedure DrawCell(ACol, ARow: Longint; ARect: TRect;
AState: TSDGridDrawState);
override;
public
{ Public-Deklarationen }
published
{ Published-Deklarationen }
property HorzCellMargin : integer
read FHorzCellMargin
Write SetHorzCellMargin
default 2;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('
Samples', [TSDStringGrid]);
end;
procedure TSDStringGrid.DrawCell(ACol, ARow: Longint; ARect: TRect;
AState: TSDGridDrawState);
begin
if DefaultDrawing
then
Canvas.TextRect(ARect, ARect.Left+HorzCellMargin, ARect.Top+2, Cells[ACol, ARow]);
//inherited DrawCell(ACol, ARow, ARect, AState);
end;
procedure TSDStringGrid.SetHorzCellMargin(Value: Integer);
begin
if FHorzCellMargin <> Value
then
begin
if Value < 2
then
Value := 2;
FHorzCellMargin := Value;
end;
end;
end.
Die DrawCell-Prozedur aus TStringGrid möchte ich also mit einer eigenen Methode überschreiben, deshalb habe ich die Prozedur mit "override;" deklariert. Und genau hier liegt das Problem. Beim Compilieren bekomme ich die Fehlermeldung "Deklaration von 'DrawCell' unterscheidet sich von vorheriger Deklaration".
Lasse ich override weg, kann ich die Komponente zwar kompilieren, aber natürlich wird dann DrawCell des TStringGrids nicht mit meiner eigenen Methode überschrieben.
Wer kann helfen? Ich finde einfach den Syntaxfehler nicht.
Danke
Steffen
Edit: Hab den Titel des Threads korrigiert.