Autor Beitrag
neuling82
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Do 21.08.03 09:55 
Hey Leute, ich möchte in meiner Kompo eine Property schaffen, welche mehrere Strings fassen kann! bisher habe ich das so gelöst: (Pseudocode)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
private
FempfangsMSN: Tstrings;
FempfangsSMSC: Tstrings;

published
    { Published-Deklarationen }
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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

_________________
mfg.
mâximôv
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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.

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
neuling82 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Do 21.08.03 18:19 
Biddeschön:
ausblenden 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
    { Published-Deklarationen }
  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;

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Do 21.08.03 18:37 
@ neuling82
öhm, warum muß motzi das gleiche Bespiel posten, was du von AHUser hier hier bekommen hast? :roll:
wenn das wieder nicht funktioneiert, zeig m,al deinen kompletten Contructor.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure SetEmpfangs_MSN(Value: TStrings);
begin
  if Value <> FempfangMSN then
    FempfangMSN.Assign(Value);
end;