![]() |
Komponente zur Laufzeit um Eigenschaft erweitern, Fehler bei Programmende
Ich versuche gerade ein TChart während der Laufzeit um eine Eigenschaft zu erweitern.
Das klappt auch und ich kann die Eigenschaft auch beschreiben. Aber beim Programmende gibt es eine wenig aussagekräftige AV. Was mache ich falsch? SeriesGroup ist ein einfacher Enum.
Delphi-Quellcode:
TCustomSeriesClass = class(TCustomSeries)
public SeriesGroup: TSeriesGroup; end; procedure CreateSeries(const SeriesType: TCustomSeriesClass; const SeriesGroup: TSeriesGroup; const Name: string; const Color: Integer); var CustomSeries: TCustomSeriesClass; begin CustomSeries := TCustomSeriesClass(TAreaSeries.Create(FormMain.Chart1)); CustomSeries.Name := Name; CustomSeries.SeriesGroup := SeriesGroup; ....... |
AW: Komponente zur Laufzeit um Eigenschaft erweitern, Fehler bei Programmende
Ich glaube du hast mich falsch verstanden.
Das was du als nicht zu TChart gehörig ansiehst habe ich hinzugefügt. Zitat:
Delphi-Quellcode:
TCustomSeriesClass = class(TCustomSeries)
public SeriesGroup: TSeriesGroup; end; Zitat:
Es funktioniert und ich kann TCustomSeries um die Eigenschaft SeriesGroup erweitern! Der Code lässt sich kompilieren und ausführen. Aber beim Programmende bekomme ich eine AV. |
AW: Komponente zur Laufzeit um Eigenschaft erweitern, Fehler bei Programmende
Hallo,
sicher, dass die AV wegen Deiner Ableitung kommt? Clear mal die Series vor dem Programmende. Zitat:
|
AW: Komponente zur Laufzeit um Eigenschaft erweitern, Fehler bei Programmende
Zitat:
Anschließend machst Du nen Hardcast - und stellst fest, dass das ziemlich lange gut geht. Insofern hast Du eigentlich Pech, dass dir die Anwendung nicht gleich um die Ohren fliegt bei der Zuweisung. |
AW: Komponente zur Laufzeit um Eigenschaft erweitern, Fehler bei Programmende
Was der Lemmy sagen will ist, dass auch wenn Du diese Klasse definiert hast, TChart die nicht kennt und trotzdem nur eine TAriaSeries erstellt oder so. Aber eben nicht deine neu definierte abgeleitete Klasse. Und dann einen Typecast drauf zu machen, ändert die Klasse nicht, der Speicher für deine zusätzliche Variable "SeriesGroup" wurde ja nicht erzeugt und beim TypeCast dann aber beschrieben. Das heisst, du kritzelst in einem Bereich des Speichers rum, der nicht zur Komponente gehört und das knallt dann irgendwann mal.
|
AW: Komponente zur Laufzeit um Eigenschaft erweitern, Fehler bei Programmende
Wird denn das neue Feld SeriesGroup auch irgendwo initialisiert? Ich sehe nur Code, der es verwendet.
|
AW: Komponente zur Laufzeit um Eigenschaft erweitern, Fehler bei Programmende
Ich selbst habe damit noch nicht gearbeitet, aber wäre das nicht ein Fall für eine Helferklasse bzw. class helper, anstatt eine neue Klasse abzuleiten?
Wenn ich das Konzept der class helper richtig verstanden habe, ist das genau für das da, was du anscheinend erreichen willst ... |
AW: Komponente zur Laufzeit um Eigenschaft erweitern, Fehler bei Programmende
Hallo,
Zitat:
Oha, jetzt sehe ich da ja den harten Type Cast. Das geht glaube ich so nicht ... Müsste es nicht so heißen? CustomSeries := TCustomSeriesClass.Create(FormMain.Chart1); |
AW: Komponente zur Laufzeit um Eigenschaft erweitern, Fehler bei Programmende
Zitat:
Zitat:
So?
Delphi-Quellcode:
Und überall dann nur noch die Chart-eigene Klasse TCustomSeries verwenden?
TCustomSeriesClass = class helper for TCustomSeries
public class var SeriesGroup: TSeriesGroup; end; |
AW: Komponente zur Laufzeit um Eigenschaft erweitern, Fehler bei Programmende
Class var ist da vermutlich falsch, eher so
Delphi-Quellcode:
Und ja, falls ich das Konzept richtig verstanden habe, dann erhalten dadurch überall in deinem Projekt alle Objekte vom Typ TCustomSeries die Eigenschaft SeriesGroup.
TCustomSeriesClass = class helper for TCustomSeries
public SeriesGroup: TSeriesGroup; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz