Also, ich versuche, eine Komponente, die den Job beim Einstellen der Einstellungen einer Excel, libreoffice, etc ... Zellen machen wird. Zuerst wollte ich nur den Wert einstellen, aber jetzt muss ich die Hintergrundfarbe der Zelle ändern, den Namen der Schriftart ändern, einen Stil festlegen, eine Formel setzen usw. ... Also entschied ich mich für einen Typ, der alle enthält Dinge, die ich will und so ändern, ich habe dies:Benutzerdefinierte Eigenschaft nur Trigger lesen Anweisung
type
TMyCell = class
private
FBgColor: TColor;
FValue: String;
FFormula: String;
FFormat: String;
FFont: TFont;
public
constructor Create;
destructor Destroy;
property Value: String read FValue write FValue;
property Formula: String read FFormula write FFormula;
property Format: String read FFormat write FFormat;
property BgColor: TColor read FBgColor write FBgColor;
property Font: TFont read FFont write FFont;
end;
{ TMyCell }
constructor TMyCell.Create;
begin
FFont := TFont.Create;
end;
destructor TMyCell.Destroy;
begin
FFont.Free;
end;
und meine Komponente sieht wie folgt aus:
type
TMyPlan = class(TComponent)
private
FExcel: Variant;
procedure SetMyCell(Row, Column: Integer; Value: TMyCell);
function GetMyCell(Row, Column: Integer): TMyCell;
public
constructor Create(AOwner: TComponent);
destructor Destroy;
property Cell[Row, Column: Integer]: TMyCell read GetMyCell write SetMyCell;
end;
{ TMyPlan }
constructor TMyPlan.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FExcel := CreateOleObject('Excel.Application');
FExcel.Workbooks.Add(1);
end;
destructor TMyPlan.Destroy;
begin
FExcel := Unassigned;
inherited;
end;
function TMyPlan.GetMyCell(Row, Column: Integer): TMyCell;
begin
Result := TMyCell.Create;
Result.Value := FExcel.Cells[Row, Column];;
end;
procedure TMyPlan.SetMyCell(Row, Column: Integer; Value: TMyCell);
begin
FExcel.Cells[Row, Column] := Value.Value;
end;
Nur damit Sie wissen, habe ich einige Komponenten bereits getan hat, und ich bin Ich lerne immer noch, wie man sie richtig macht, also mag das eine nicht anständige Struktur haben, jedenfalls ist dies das erste Mal, dass ich versuche, so etwas zu tun, eine Eigenschaft, die Eingabeparameter mit Subproperti hat es, und es scheint nicht zu funktionieren, als ob ich es würde.
Zurück zum Thema, ist es egal, wie ich mein Eigentum nennen
Set: MyPlan.Cell [1, 1] .Wert: = '1';
Erhalten: ShowMessage (MyPlan.Cell [1, 1] .Value);
In beiden Fällen wird nur die GetMyCell-Funktion ausgelöst. Warum ist das?
Sie sollten hinzufügen 'override' Anweisung zu' Create' und 'Destroy' –
I tihnk es ist ein Fehler, einen Referenztyp für' TMyCell' zu verwenden. –
@Dalija Prasnikar die Komponente haben eigentlich keinen Konstruktor oder Destruktor, ich habe sie nur zu Leuten hinzugefügt, die vielleicht denken, ich habe die FExcel-Variante nicht initialisiert, aber ich weiß, dass, wenn ich sie verwenden muss, Override notwendig ist –