Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
Delphi 10.2 Tokyo Professional
|
AW: Komponente zur Laufzeit um Eigenschaft erweitern, Fehler bei Programmende
4. Okt 2019, 17:35
Ich hab mal was zusammengebaut:
Delphi-Quellcode:
TDollyAreaSeries = class(TAreaSeries)
private
FSeriesGroup: TSeriesGroup;
public
property SeriesGroup: TSeriesGroup read FSeriesGroup write FSeriesGroup;
constructor Create(AOwner: TComponent; ASeriesGroup: TSeriesGroup); reintroduce;
end;
TDollyLineSeries = class(TLineSeries)
private
FSeriesGroup: TSeriesGroup;
public
property SeriesGroup: TSeriesGroup read FSeriesGroup write FSeriesGroup;
constructor Create(AOwner: TComponent; ASeriesGroup: TSeriesGroup); reintroduce;
end;
// etc. für jede Series Art die du brauchst...
constructor TDollyAreaSeries.Create(AOwner: TComponent; ASeriesGroup: TSeriesGroup);
begin
inherited Create(AOwner);
FSeriesGroup := ASeriesGroup;
end;
// Genauso für die anderen Ableitungen...
...
// Der Übergabeparameter SeriesType von CreateSeries ist irgendwie komisch..
// Du übergibst eine Instanz um dann zu gucken was die Instanz für eine Klasse hat und dann noch eine Instanz zu erstellen?
// Und der Vergleich ist auch seltsam - klappt das so überhaupt?
// Ich würde eher sowas vorschlagen:
type
TDollySeriesType = (stArea, stLine, stBar);
procedure CreateSeries(const SeriesType: TDollySeriesType; const SeriesGroup: TSeriesGroup; const Name: string; const Color: Integer);
var
CustomSeries: TCustomSeries;
begin
if Assigned(FormMain.Chart1.FindComponent(Name)) then
Exit;
CustomSeries := nil;
case SeriesType of
stArea: CustomSeries := TDollyAreaSeries.Create(FormMain.Chart1, SeriesGroup);
stLine: CustomSeries := TDollyLineSeries.Create(FormMain.Chart1, SeriesGroup);
stBar: CustomSeries := TDollyBarSeries.Create(FormMain.Chart1, SeriesGroup);
end;
if CustomSeries = nil then
Exit;
CustomSeries.Name := Name;
CustomSeries.ParentChart := FormMain.Chart1;
CustomSeries.Dark3D := True;
CustomSeries.Color := Color;
CustomSeries.ColorEachLine := True;
CustomSeries.ClickableLine := False;
CustomSeries.ClickTolerance := 5;
CustomSeries.DrawStyle := dsCurve;
CustomSeries.LinePen.Width := 2;
if SeriesType <> stBar then
begin
CustomSeries.Pointer.Visible := True;
CustomSeries.Pointer.Style := psCircle;
CustomSeries.Pointer.Size := 5;
CustomSeries.Pointer.InflateMargins := True;
CustomSeries.Pointer.Frame.Visible := True;
CustomSeries.Pointer.Shadow.Visible := False;
CustomSeries.Marks.Visible := True;
CustomSeries.Marks.Arrow.Style := psSolid;
CustomSeries.Marks.UseSeriesTransparency := False;
CustomSeries.AreaLinesPen.Visible := False;
end;
CustomSeries.Transparency := 60;
CustomSeries.OnGetMarkText := FormMain.GetMarkText;
CustomSeries.OnClickPointer := FormMain.ClickPointer;
end;
Michael "Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
|
|
Zitat
|