![]() |
TStringList in eigene Komponente
hi,
ich möchte als eine property vom typ TStringList erstellen
Delphi-Quellcode:
wenn ich days einen wert zuweise, erhalte ich eine schutzverletzung
private
FDays : TStringList; function FDaysChange : TStringList; published property Days : TStringList read FDaysChange write FDays; end; constructor TShedeuleJE.Create(AOwner: TComponent); begin inherited; FDays := TStringList.Create; :( |
Re: TStringList in eigene Komponente
du kannst nicht fdays verwenden :shock:
im create bereich |
Re: TStringList in eigene Komponente
gut, dann sag bitte was ich machen muss / kann / darf / soll :)
ich kenn' mich noch nicht so gut in komponenten entwicklung aus |
Re: TStringList in eigene Komponente
frage sind days die tage mo-so?
|
Re: TStringList in eigene Komponente
genau, soll aber eine StringListe sein, also strings :)
edit: ich will mich nicht nur tage bei der komponente benutzen |
Re: TStringList in eigene Komponente
Hallo!
Mal Ausschnittsweise, das hier funktioniert bei mir:
Delphi-Quellcode:
MfG,
type ttest = class(TObject)
fvar : TStringList; private public constructor create; destructor free; end; {...} constructor ttest.create; begin inherited; fvar := TStringList.Create; end; procedure TForm1.Button1Click(Sender: TObject); VAR test : ttest; begin test := ttest.create; test.fvar.Add('Hallo'); test.Free; end; Peter |
Re: TStringList in eigene Komponente
ich möchte aber fdays als property :)
|
Re: TStringList in eigene Komponente
Schon klar, aber mein Beispiel zeigt, dass Dein Create-Bereich in Ordnung ist. Kiar war da anderer Meinung. Oder ich habe ihn falsch verstanden.
Du solltest evtl. mal den Sourcecode posten, der zu dem Fehler führt. Oder habe ich den verpasst? |
Re: TStringList in eigene Komponente
steht alles im ersten beitrag, mehr braucht man eigendlich nicht wiessen, ausser du willst noch die uses mit dem namen der kompontene ;)
|
Re: TStringList in eigene Komponente
Moin Snoop,
so wie Deine Kompo aussieht, darfst Du Days keinen Wert zuweisen, da Du damit den Zugriff auf die TStringList in FDays unmöglich machst. Der Pointer auf diese StringListe wird überschrieben, und somit kann dessen Free Methode nicht mehr aufgerufen werden um die belegten Resourcen freizugeben. Für den Lesezugriff hingegen brauchst Du keine Methode, da kannst Du auch direkt FDays nehmen. Übrigens ist es üblich, wenn auch nicht zwingend vorgeschrieben, dass die Lesemethode einer Eigenschaft mit Get, und die Schreibmethode mit Set beginnt. F als Prefix ist den internen, privaten, Datenfeldern der Kompo vorbehalten. |
Re: TStringList in eigene Komponente
außerdem hab ich mal gelesen das man TSTRINGS für die Instanz nehmen soll nicht TStringlist...fragt mich bitte nicht warum genau das so ist....(hat soweit ich mich entsinne was mit COM zu tun).
|
Re: TStringList in eigene Komponente
Moin Ghostwalker,
TStrings stellt eine abstrakte Klasse dar, da sie abstrakte Methoden enthält. Dies sind Methoden, von denen nur der Kopf deklariert wurde, die in der Klasse aber nicht implementiert wurden. Abstrakte Klassen sollte man deshalb nur als Basis für eigene Ableitungen verwenden, in denen man die abstrakten Methoden "mit Leben" füllt. Man sollte i.d.R. aber niemals Instanzen von einer abstrakten Klasse bilden, da ein Zugriff auf eine abstrakte Methode zwangsläufig in einer Access Violation mündet. Ein anderer Anwendungsfall wäre der Typ eines Parameters, so dass man alle von, z.B., TStrings abgeleiteten Klassen als Parameter übergeben kann. Dann kann man z.B. Memo.Lines aber auch eine TStringList als Parameter übergeben. Soll nun also eine Instanz der Stringliste gebildet werden darf man nicht TStrings verwenden. |
Re: TStringList in eigene Komponente
Zitat:
schaue dir doch mal den Source vom TMonthCalendar an. Dort siehst Du wie Borland das gemacht hat. Dann brauchst Du keine TStringList dafür. |
Re: TStringList in eigene Komponente
warum nicht so:
Delphi-Quellcode:
und schon hast du eine eigenschaft treffen im OI
TTage = (Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag);
deinecomponente = class(TComponent) private Ftag : TTage; published property Treffen : TTage read Ftag write Ftag; raik |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 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-2025 by Thomas Breitkreuz