Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - TStrings/TStringlist als Property??
neuling82 - Do 21.08.03 09:55
Titel: TStrings/TStringlist als Property??
Hey Leute, ich möchte in meiner Kompo eine Property schaffen, welche mehrere Strings fassen kann! bisher habe ich das so gelöst: (Pseudocode)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| private FempfangsMSN: Tstrings; FempfangsSMSC: Tstrings;
published property Empfangs_MSN: TStrings read FempfangsMSN write FempfangsMSN; property Empfangs_SMSC: TStrings read FempfangsSMSC write FempfangsSMSC;
constructor FEmpfangsSMSC:=TStringlist.create; FempfangsMSN:=TStringlist.create; |
Ich kann das Feld im Objektinspektor öffnen, etwas der Liste hinzufügen, diese schließen, jedoch wenn ich das Feld das nächste mal öffne will bekomme ich eie Fehlermeldung bei Adresse FFFFFFFD
Wenn ich später im Objekt einen Stringlisteneditor haben möchte bei der Property Empfangs_SMSC, muss die Property und deren Variablen dann vom Type TStrings oder vom Typ TStringlist sein? Muss ich dann sowohl die Property als auch die dazugehörige variable im Constructor erzeugen und wieder freigeben im Destructor? oder nur die Variable?
maximus - Do 21.08.03 12:46
Hallo,
Zitat: |
TStrings oder vom Typ TStringlist |
ich würde sagen TStringlist, weil TStrings eine abstrakte klasse ist.
Zitat: |
Muss ich dann sowohl die Property als auch die dazugehörige variable im Constructor erzeugen und wieder freigeben im Destructor? oder nur die Variable? |
Nur die dazugehörige variable! Da die property nur ein 'redirect' auf das entsprechende variablen-feld ist...und klar in constructor erzeugen, im decstructor killen :D
Motzi - Do 21.08.03 15:02
TStrings ist zwar eine abstrakte Klasse, aber wenn du die Variable mit TStringList.Create instanzierst passt das!
Aber was viel wichiger ist! FempfangsMSN und FempfangsMSC sind Instanzen einer Klasse, also nur Pointer. Mit "write FempfangsMSN" überschreibst du also den alten Pointer! Stattdessen solltest du eine Set-Methode einrichten und die übergebene StringListe per Assign() deiner StringListe zuweisen.
neuling82 - Do 21.08.03 15:06
das hört sich ja gut an, aber könntest du mir evtl mal ein kleines Bsp. Posten?? Währe sehr dankbar
Motzi - Do 21.08.03 18:19
Titel: Re: TStrings/TStringlist als Property??
Biddeschön:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| private FempfangsMSN: TStrings; FempfangsSMSC: TStrings; procedure SetEmpfangs_MSN(Value: TStrings); procedure SetEmpfangs_SMSC(Value: TStrings); published property Empfangs_MSN: TStrings read FempfangsMSN write SetEmpfangs_MSN; property Empfangs_SMSC: TStrings read FempfangsSMSC write SetEmpfangs_SMSC;
constructor FEmpfangsSMSC:=TStringlist.create; FempfangsMSN:=TStringlist.create;
procedure SetEmpfangs_MSN(Value: TStrings); begin FempfangsMSN.Assign(Value); end;
procedure SetEmpfangs_SMSC(Value: TStrings); begin FempfangsSMSC.Assign(Value); end; |
Tino - Fr 22.08.03 09:18
Hier die entsprechende Antwort:
AHUser hat folgendes geschrieben: |
Du brauchst eine write Methode (SetEmpfangs_MSN).
Der Object Inspector hält seine eigene StringListe. Nach beendigung des Stringlisten-Editors weist er dieser der Eigenschaft zu in der Annahme, dass diese Eigenschaft eine Write-Methode hat, die dann die StringListe des OI in die der Instanz kopiert.
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure SetEmpfangs_MSN(Value: TStrings); begin if Value <> FempfangMSN then FempfangMSN.Assign(Value); end; | |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!