Einzelnen Beitrag anzeigen

Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#8

Re: [RTTI] setzen von klasseneigenschaften

  Alt 12. Jul 2006, 14:14
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
  Mit Zitat antworten Zitat