![]() |
Verknüpfung zu einer StringList in meiner Komponente
Ich möchte in meine Komponente (Diagramm) eine Verknüpfung zu einer StringList einbauen. in die StringList kommen die Werte, die das Diagramm darstellen soll.
Bis jetzt hab ich eine StringList in der Komponente, aber nicht als Property, da man erst zur Laufzeit Werte eingeben können muss. Sie ist im Bereich Public deklariert. Das funktioniert aber nicht ganz und jetzt möchte ich, dass die StringList von außen kmmt, d.h. die Komponente bekommt nurnoch gesagt, aus welcher StringList sie sich die Werte zum neuzeichnen holen muss. Aber wie teil ich der Komponente mit, dass sie nur quasi einen Pointer, !aber! vom Typ TStringList oder TStrings (<- Wo ist da der Unterschied?) bereitstellen muss?? Danke schonmal! |
Re: Verknüpfung zu einer StringList in meiner Komponente
Zitat:
Delphi-Quellcode:
Vielleicht hast du statt assign zu nutzen, einfach nur
type
TForm1 = class(TForm) private FStringList: TStringlist; procedure SetStringList(const Value: TStringlist); { Private declarations } public { Public declarations } property StringList : TStringlist read FStringList write SetStringList; end; var Form1: TForm1; implementation {$R *.dfm} { TForm1 } { TForm1 } procedure TForm1.SetStringList(const Value: TStringlist); begin FStringList.assign (Value) ; end;
Delphi-Quellcode:
in der SetStringList Methode stehen. Das Problem hatt ich dann auch schon :wink:
FStringList := Value ;
Gruß, Tom |
Re: Verknüpfung zu einer StringList in meiner Komponente
Delphi-Quellcode:
ok, ein wenig zu langsam. In dem Code von Jelly fehlt aber das erzeugen und freigeben der der Stringlist . außerdem sollte die Stringlist-property vom Typ Tstrings sein, da du sonst keine Stringlisten aus einer Listbox oder einem Memo direkt zuweisen kannst. (inkompatible Typen tstrings und tstringlist)
//am bsp eines Tobjects, bei compos etc. mußt du den constructor noch mit override überschreiben
Ttest = class(TObject) private Fstringlist: Tstrings; procedure Setstringlist(const Value: Tstrings); protected public property stringlist:Tstrings read Fstringlist write Setstringlist; constructor Create; destructor Destroy; override; published end; ... constructor Ttest.Create; begin inherited; Fstringlist:=TStringList.Create; end; destructor Ttest.Destroy; begin Fstringlist.free; inherited; end; procedure Ttest.Setstringlist(const Value: Tstrings); begin //hier darf nicht fstringlist=Value stehen, da du dann nur den Zeiger umbiegst Fstringlist.Assign(Value); Mach_was_weil_neue_stringlist; end; Mfg Frank |
Re: Verknüpfung zu einer StringList in meiner Komponente
Zitat:
@Keldorn: Zu dem anderem mit TStrings und TStringList... Also ich hab mal gelesen man sollte immer TStringList nehmen, und mit der Zuweisung aus einer Listbox o.ä hatte ich noch nie... Ausserdem finde ich deinen Code etwas irreführend an einer Stelle: Im Public deklarierst du stringlist als TStrings:
Delphi-Quellcode:
Und im Constructor erzeugst du dann aber mit TStringList.
property stringlist:Tstrings read Fstringlist write Setstringlist;
Delphi-Quellcode:
Das geht zwar, aber zur Laufzeit hast du dann natürlich TStringlist als Klasse.
Fstringlist:=TStringList.Create;
Gruß, Tom |
Re: Verknüpfung zu einer StringList in meiner Komponente
Du hast doch eine Pro-Version, gugg dir mal die Sourcen zu memo/Listbox an. Die lines sind immer als Tstrings deklariert, aber eigentlich sind es TListboxstrings und Tmemostrings. Wenn du das nicht so machen würdest, würde listbox.lines:=memo1.lines nie funktionieren.
Tstrings ist auch nur eine klasse mit abstrakten Methoden, wenn du Strings:=Tstrings.create schreibst, wirst du öfters abstrakte Fehler erhalten, weil in tstrings noch nix da ist. in der Hilfe gibts auch extra kapitel zum Thema stringlisten verwenden, die gehen dort immer so vor Variable als Tstrings und erzeugen als Tstringlist. mfg Frank |
Re: Verknüpfung zu einer StringList in meiner Komponente
Super!!! Jetzt geht's!!! Ich hab nicht Assign verwendet, sondern eben nur ":="
Danke! Geht jetzt! |
Re: Verknüpfung zu einer StringList in meiner Komponente
@Keldorn,
was du sagst ist mir teils auch bekannt. Nur wenn du deine Klasse mit TStringList.create erzeugst, was machts für einen Sinn, sie weiter oben nur als TStrings zu deklarieren. Das leuchtet mir irgendwie nicht ein. Gruß, Tom |
Re: Verknüpfung zu einer StringList in meiner Komponente
@Jelly, weil du dann immer alle von Tstrings abgeleitete Objekte übergeben kannst. Weiß nicht wie ich das erklären soll, Tstrings ist halt "universeller", würdest du schon eine "spezialisierte" Tstringlist nehmen, könntest du immer nur Tstringslists oder von Tstringlist abgeleitete Objekte nehmen, das würde dich ungemein einschränken.
Mfg Frank |
Re: Verknüpfung zu einer StringList in meiner Komponente
Ah ja, jetzt geht bei mir ein Licht auf ... Saß die ganze Zeit auf dem Schlauch :wall:
Nutze Selbiges selbst oft bei Veerbung. Warum ich das jetzt in diesem Beispiel nicht geblickt hab, keine Ahnung :| Gruß, Tom |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 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