AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Komponente zur Laufzeit um Eigenschaft erweitern, Fehler bei Programmende
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente zur Laufzeit um Eigenschaft erweitern, Fehler bei Programmende

Ein Thema von DieDolly · begonnen am 3. Okt 2019 · letzter Beitrag vom 4. Okt 2019
Antwort Antwort
Seite 1 von 2  1 2      
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

Komponente zur Laufzeit um Eigenschaft erweitern, Fehler bei Programmende

  Alt 3. Okt 2019, 23:11
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;
.......
  Mit Zitat antworten Zitat
Alt 3. Okt 2019, 23:49     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#2

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

  Alt 4. Okt 2019, 00:11
Ich glaube du hast mich falsch verstanden.
Das was du als nicht zu TChart gehörig ansiehst habe ich hinzugefügt.

Zitat:
es ist nichts davon zu erkennen, dass die Klasse FMXTee.Chart.TChart um eine Eigenschaft erweitert wird.
?
Delphi-Quellcode:
TCustomSeriesClass = class(TCustomSeries)
 public
  SeriesGroup: TSeriesGroup;
 end;
Zitat:
Die Methode CreateSeries() erweckt den Anschein, dass sie zu der Klasse TCustomSeriesClass gehören könnte, was eben nicht der Fall ist.
Um sowas kümmer ich mich später. Das ist gerade nicht wichtig.

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.
  Mit Zitat antworten Zitat
Alt 4. Okt 2019, 00:54     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 4. Okt 2019, 05:14
Hallo,
sicher, dass die AV wegen Deiner Ableitung kommt?
Clear mal die Series vor dem Programmende.

Zitat:
gut möglich beim Hinzufügen eines Graphen
Nein, es knallt ja beim Programmende ...
Heiko

Geändert von hoika ( 4. Okt 2019 um 07:31 Uhr)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#4

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

  Alt 4. Okt 2019, 08:41
Ich glaube du hast mich falsch verstanden.
Das was du als nicht zu TChart gehörig ansiehst habe ich hinzugefügt.

Zitat:
es ist nichts davon zu erkennen, dass die Klasse FMXTee.Chart.TChart um eine Eigenschaft erweitert wird.
?
Delphi-Quellcode:
TCustomSeriesClass = class(TCustomSeries)
 public
  SeriesGroup: TSeriesGroup;
 end;
nein, Du hast eine neue Ableitung von TCustomSeries erstellt und dort ein neues "Feld" dazu gemacht. Die anderen von TCustomSeries abgeleiteten KLassen kennen deswegen aber noch lange nicht diese EIgenschaft, eben weil die weiterhin von TCustomSeries abgeleitet sind und nicht von TCustomSeriesClass.

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.
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
675 Beiträge
 
Delphi 10.4 Sydney
 
#5

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

  Alt 4. Okt 2019, 09:08
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.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch
Online

Registriert seit: 11. Aug 2012
Ort: Essen
1.605 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

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

  Alt 4. Okt 2019, 09:17
Wird denn das neue Feld SeriesGroup auch irgendwo initialisiert? Ich sehe nur Code, der es verwendet.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi
Online

Registriert seit: 17. Jul 2005
880 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 4. Okt 2019, 09:31
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 ...
The angels have the phone box.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

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

  Alt 4. Okt 2019, 09:56
Hallo,
Zitat:
initialisiert?
CustomSeries := TCustomSeriesClass(TAreaSeries.Create(FormMain.Chart1));

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);
Heiko
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#9

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

  Alt 4. Okt 2019, 13:26
Hallo,
Zitat:
initialisiert?
CustomSeries := TCustomSeriesClass(TAreaSeries.Create(FormMain.Chart1));

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);
Wenn man nur TCustomSeriesClass.Create nimmt stzatt TAreaSeries, dann bekommt man nicht den Chart den man erstellen möchte.

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 ...
Die Series haben viele Properties. Aber eine fehlt mir und genau die möchte ich hinzufügen.

So?
Delphi-Quellcode:
 TCustomSeriesClass = class helper for TCustomSeries
 public
  class var SeriesGroup: TSeriesGroup;
 end;
Und überall dann nur noch die Chart-eigene Klasse TCustomSeries verwenden?

Geändert von DieDolly ( 4. Okt 2019 um 13:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi
Online

Registriert seit: 17. Jul 2005
880 Beiträge
 
Delphi 11 Alexandria
 
#10

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

  Alt 4. Okt 2019, 13:58
Class var ist da vermutlich falsch, eher so
Delphi-Quellcode:
TCustomSeriesClass = class helper for TCustomSeries
 public
   SeriesGroup: TSeriesGroup;
 end;
Und ja, falls ich das Konzept richtig verstanden habe, dann erhalten dadurch überall in deinem Projekt alle Objekte vom Typ TCustomSeries die Eigenschaft SeriesGroup.
The angels have the phone box.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz