Zitat von
dataspider:
Also erst mal ein Beispiel, wie man eine Bitmap z.B. per
RTTI lädt:
Delphi-Quellcode:
...
procedure TForm1.LoadBitmapPerRTTI(AObject: TObject);
Var
ATmpObj: TObject;
ABitMap: TBitMap;
begin
ATmpObj := nil;
ABitMap := nil;
if IsPublishedProp(AObject, 'Picture') then
ATmpObj := GetObjectProp(AObject, 'Picture');
if Assigned(ATmpObj) and (ATmpObj is TPicture) then
ABitMap := TPicture(ATmpObj).Bitmap;
ABitMap.LoadFromFile('d:\buffer\uts1.bmp');
end;
du machst letztendlich auch nur reine Pointeraktionen. Holst den pointer castest den nach TPicture und weist das bitmap zu...beim setzen ist das nicht so einfach...da das Quellobjekt nicht das zielobjekt ist (bei mir).
//edit: soll das Loadfromfile nicht saveToFile heisen? weil so wäre die ganze Procedure sinnlos, da immer aus der datei gelesen würde.
aber da man eh prüfen muss, von welchem typ das ziel ist, kann man doch auch folgendes machen, oder:
Delphi-Quellcode:
...
if Assigned(ATmpObj) then
begin
if (ATmpObj is TPicture) then
TPicture(ATmpObj).Bitmap.assign(ABitMap) else
if (ATmpObj is TBitmap) then
TBitmap(ATmpObj).assign(ABitMap) else
if (ATmpObj is TStrings) then
TStrings(ATmpObj).assign(AStringlist) else
...
end;
...
das geht aber nicht bei t-collections...weil der grundtyp kapselt nicht die jeweiligen objecteigenschaften, daher komme ich mit assign nicht weiter.
Zitat von
dataspider:
Das Setzen von Eigenschaften wie z.B. ein Propertie vom Typ TStrings
auf eine selbsterstellte Stringliste halte ich für gefährlich.
Man sollte so etwas wirklich am konkreten Beispiel diskutieren. Da gerade die Methode Assign sehr unterschiedlich bis gar nicht implementiert ist, muss m an dann entscheiden, ob man diese benutzt oder in einer abgeleiteten Kalsse neu implementiert.
Frank
bei typen wie tstrings dürfte sich nicht viel ändern, da ich zum editieren nur ein memo habe hat man da z.B. keine sondereigenschaften wie z.B. in TRichedit.
Gruß Frank