Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi tstrings als property (https://www.delphipraxis.net/97622-tstrings-als-property.html)

Andreas L. 13. Aug 2007 19:20


tstrings als property
 
Hi,
Delphi-Quellcode:
type
  Tblabla = class(TComponent)
  private
    ...
    fComment: TStrings;
    ...
    procedure SetComment(Value: TStrings);
  published
    property Comment: TStrings read fComment write SetComment;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

...

procedure TMozillaCookies.SetComment(Value: TStrings);
begin

 fComment.Assign(Value);

end;
Sollte doch ohne Probleme gehen, oder? Wenn ich aber im OI den TStrings-Editor öffnen will, kommt folgendes:

Zitat:

---------------------------
Fehler
---------------------------
nil kann nicht zu TRichEditStrings zugewiesen werden.
---------------------------
OK Details >>
---------------------------
Jemand eine Idee?

mirage228 13. Aug 2007 19:21

Re: tstrings als property
 
Delphi-Quellcode:
procedure TMozillaCookies.SetComment(Value: TStrings);
begin
  if Value <> nil then
    fComment.Assign(Value);
// eventuell:
// else fComment.Clear;
end;
mfG
mirage228

Andreas L. 13. Aug 2007 19:25

Re: tstrings als property
 
Danke für deine Antwort aber der Fehler kommt immer noch. Noch eine Idee :?:

mkinzler 13. Aug 2007 19:28

Re: tstrings als property
 
Der Fehler kommt auch eher beim Auslesen der Eigenschaft.

Hawkeye219 13. Aug 2007 19:33

Re: tstrings als property
 
Hallo,
Zitat:

Zitat von mkinzler
Der Fehler kommt auch eher beim Auslesen der Eigenschaft.

vielleicht, weil die Stringliste nicht im Constructor der Komponente erzeugt wurde?

Gruß Hawkeye

mirage228 13. Aug 2007 19:35

Re: tstrings als property
 
Zitat:

Zitat von Hawkeye219
vielleicht, weil die Stringliste nicht im Constructor der Komponente erzeugt wurde?

Hm, dann hätte ich bei der Fehlermeldung aber eher eine Access-Violation erwartet... aber wer weiß :gruebel:

mfG
mirage228

Andreas L. 13. Aug 2007 19:36

Re: tstrings als property
 
Zitat:

Zitat von mkinzler
Der Fehler kommt auch eher beim Auslesen der Eigenschaft.

Mitn Getter kommt die selbe Meldung:

Delphi-Quellcode:
function TMozillaCookies.GetComment:TStrings;
begin

 Result := fComment;

end;

Andreas L. 13. Aug 2007 19:37

Re: tstrings als property
 
Zitat:

Zitat von Hawkeye219
Hallo,
Zitat:

Zitat von mkinzler
Der Fehler kommt auch eher beim Auslesen der Eigenschaft.

vielleicht, weil die Stringliste nicht im Constructor der Komponente erzeugt wurde?

Gruß Hawkeye

TStrings sollte nicht instanziiert werden und ne StringList verwende ich nicht.

mirage228 13. Aug 2007 19:38

Re: tstrings als property
 
Zitat:

Zitat von Andreas L.
TStrings sollte nicht instanziiert werden und ne StringList verwende ich nicht.

Also machst du gar nichts mit FComments? Du musst schon eine Instanz erzeugen...

Andreas L. 13. Aug 2007 19:40

Re: tstrings als property
 
Zitat:

Zitat von mirage228
Zitat:

Zitat von Andreas L.
TStrings sollte nicht instanziiert werden und ne StringList verwende ich nicht.

Also machst du gar nichts mit FComments? Du musst schon eine Instanz erzeugen...

Folgendes löst eine "Abstrakten Fehler" aus:

Delphi-Quellcode:
 fComment := TStrings.create;
 //fComment.create; ebenfalls

mkinzler 13. Aug 2007 19:42

Re: tstrings als property
 
Zitat:

Folgendes löst eine "Abstrakten Fehler" aus:

Delphi-Quellcode: markieren
fComment := TStrings.create;
//fComment.create; ebenfalls
Muß auch
Delphi-Quellcode:
fComment := TStringList.create;
heißen.

mirage228 13. Aug 2007 19:43

Re: tstrings als property
 
Zitat:

Zitat von mkinzler
Muß auch
Delphi-Quellcode:
fComment := TStringList.create;
heißen.

Zitat:

Zitat von Andreas L.
ne StringList verwende ich nicht.

Stellt sich dann die Frage ... was sonst?

mfG
mirage228

markusj 13. Aug 2007 19:44

Re: tstrings als property
 
Weil TStrings eine abstrakte Klasse ist, sprich, sie definiert nur ein Grundgerüst, welches dann z.B. bei einer TStringList verwendet wird, und so verschiedenen Ansammlungen von Listen eine gemeinsame (und kompatible) Basis schafft.

Du wirst vermutlich *argh* roter Kasten, siehe mkinzler

mfG
Markus

Andreas L. 13. Aug 2007 19:44

Re: tstrings als property
 
Es klappt! Wusste nicht das ich TStrings als TStingList erstellen muss. Danke an alle! :???: :thumb:

mkinzler 13. Aug 2007 19:46

Re: tstrings als property
 
TStrings ist eine abstrakte Basisklasse. TStringList implementiert.

Martin K 13. Aug 2007 19:50

Re: tstrings als property
 
Wenn du fComment im Konstruktor erstellst, bitte nicht vergessen, im Destruktor wieder freizugeben.
Aber VOR inherited!
(im Konstruktor NACH inherited)

Nur so als kleiner Hinweis, falls du es nicht schon so gemacht hast...

Andreas L. 13. Aug 2007 20:06

Re: tstrings als property
 
Ok, jetzt kann ich Comment ganz normal im OI verwenden. Möchte ich aber jetzt den "Comment" in ein memo haben meldet mir der Compiler
Zitat:

[Pascal Fehler] Main.pas(36): E2003 Undefinierter Bezeichner: 'Comment'
.

Mein Code:
Delphi-Quellcode:
   memo1.Assign(mozillacookies1.Comment);
Hää?? Comment ist doch im published-Abschnitt meiner Komponente deklariert... :gruebel:

Martin K 13. Aug 2007 20:11

Re: tstrings als property
 
Muss es nicht Memo1.Lines.... heißen?

Andreas L. 13. Aug 2007 20:13

Re: tstrings als property
 
Zitat:

Zitat von Martin K
Muss es nicht Memo1.Lines.... heißen?

Ja, hab ich mittlerweile auch gemerkt. Der Fehler kommt aber trotzdem...

Andreas L. 13. Aug 2007 22:06

Re: tstrings als property
 
Hat sich erledigt. Es gab noch eine gleichnamige Unit in einen anderen Suchpfad.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 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