AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStringList(en) in DMF serialisieren

Ein Thema von stahli · begonnen am 30. Sep 2016 · letzter Beitrag vom 1. Okt 2016
Antwort Antwort
einbeliebigername

Registriert seit: 24. Aug 2004
140 Beiträge
 
Delphi XE8 Professional
 
#1

AW: TStringList(en) in DMF serialisieren

  Alt 1. Okt 2016, 12:45
Hallo,

Vielen Dank!!!

Wie hast Du das heraus gefunden?
Ist das irgendwo dokumentiert? Oder ist das eher ein Bug?
Erst mal fand ich das komisch, dass das nicht geht, da ich sowas schon öfters gemach habe. Da du so ein schönes Beispiel angehangen hattest, dachte ich mir Kopf noch nicht wach aber für klickibunti reicht es. Fehler ließ sich auch schnell reproduzieren. Beim Blick auf den Sourcecode fiel mir erst mal noch nichts auf. Also musste ein funktionierendes Beispiel her. TMemo.Lines ist so ein Beispiel. Im TCustomMemo fiel mir sofort der Setter auf und da war der Kopf wach. Es ist doch quasi ein Gesetz:

Alle Properties deren Typ von TPersistent aber nicht von TComponent erbt, werden per Setter und Assign gesetzt!

Habe das auch schon mal anders gemacht und hab dann später über mich selbst geflucht. Und dann fehlte nur noch eine Begründung, wieso man das bei diesem Beispiel auch nicht anders machen darf. Da half ein Haltepunkt im Setter. Angehalten wurde nur nach dem Ok im Propertyeditor und Value zeigt tatsächlich auf ein anderes Objekt. Und meine Vermutung, dass dort als Objekt eine TMemo.Lines übergeben wird, kommt daher das es nur zwei sinnvolle Wege gibt wie man mit Rtti so ein Proberty setzen kann.

1. Mit Rtti holt man sich die Objektreferenz aus dem Property, Castet diese nach TPersistent und ruf Assign auf. Dann würde aber der Setter nicht getriggert.
2. Man baut ein Objekt welches von TStrings erbt und schmeißt per Rtti die Referenz in den Setter. Und das wird im XE5 und XE8 (und vermutlich auch im XE10.2) so gemacht. TMemo war auch fast richtig. Der Typ von Value beim Ok im Propertyeditor ist tatsächlich TRichEditStrings.

Also aufgepasst bei published Properties mit Typen welche von TStrings erben.


einbeliebigername.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.356 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TStringList(en) in DMF serialisieren

  Alt 1. Okt 2016, 13:30
Ok vielen Dank!
Dann muss man sich das halt merken oder beim nächsten Mal diesen Thread finden.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.401 Beiträge
 
Delphi 12 Athens
 
#3

AW: TStringList(en) in DMF serialisieren

  Alt 1. Okt 2016, 23:48
Der DFM-Reader/Writer hat halt nur die Strings von "TStrings" serialisiert.
Strings.Objects wird ebenfalls nicht automatisch serialisiert ... wie auch.

Und da der TStrings-PropertyEditor "nur" eine TStringList für die Bearbeitung verwendet, kann und darf er seine Editor-Instanz auch garnicht rein geben.

PS: Ein TMemo hat ein TMemoStrings im Lines, da funktioniert dann garnichts mehr, wenn TMemo diese durch eine TStringList austauschen würde.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:19 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