Einzelnen Beitrag anzeigen

Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#16

AW: Komponente zur Laufzeit um Eigenschaft erweitern, Fehler bei Programmende

  Alt 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."
  Mit Zitat antworten Zitat