Delphi-PRAXiS
Seite 2 von 2     12   

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 [RTTI] setzen von klasseneigenschaften (https://www.delphipraxis.net/73087-%5Brtti%5D-setzen-von-klasseneigenschaften.html)

Hawkeye219 12. Jul 2006 14:01

Re: [RTTI] setzen von klasseneigenschaften
 
Kleines Beispiel:

Delphi-Quellcode:
type
  TMyObject = class
  private
    FProp1 : Integer;
    FProp2 : TBitmap;
    procedure SetProp2 (Value: TBitmap);
  published
    property Prop1: Integer read FProp1 write FProp1;
    property Prop2: TBitmap read FProp2 write SetProp2;
  end;
Bei Prop1 wird der Wert direkt gelesen und geschrieben. Bei Prop2 wird direkt gelesen und mit der Routine SetProp2 geschrieben. Diese Setter-Routine wird beim Zugriff über 'SetOrdProp' bzw. 'SetObjectProp' automatisch aufgerufen, sie sollte dann die Daten kopieren:

Delphi-Quellcode:
procedure TMyObject.SetProp2 (Value: TBitmap);
begin
  FProp2.Assign(Value);
end;
Gruß Hawkeye

_frank_ 12. Jul 2006 14:12

Re: [RTTI] setzen von klasseneigenschaften
 
Zitat:

Zitat von Hawkeye219
Bei Prop1 wird der Wert direkt gelesen und geschrieben. Bei Prop2 wird direkt gelesen und mit der Routine SetProp2 geschrieben. Diese Setter-Routine wird beim Zugriff über 'SetOrdProp' bzw. 'SetObjectProp' automatisch aufgerufen, sie sollte dann die Daten kopieren.

ahja, dachte die RTTI-Funktionen arbeiten auf niedrigerer Ebene...gut, werde mal versuchen es einzubauen...danke dir erstmal

Gruß Frank

_frank_ 19. Jul 2006 15:08

Re: [RTTI] setzen von klasseneigenschaften
 
Hallo,
also ich hab mal das versucht umzusetzen, jedoch bekomme ich bei meinen Versuchen immer eine AV...

hier mal mein code:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var ti:PTypeinfo;
    pi:PPropinfo;
begin
  ti:=Typeinfo(TMemo);
  pi:=GetPropInfo(ti,'Lines');
  setOrdProp(memo2.lines,pi,integer(@memo1.lines));
end;
das ganze soll nur ein beispiel sein um memo1.lines nach memo2.lines zu kopieren...später ist natürlich alles variabel...

Hoffe jemand kann mir helfen...

Gruß Frank

Hawkeye219 19. Jul 2006 16:17

Re: [RTTI] setzen von klasseneigenschaften
 
Hallo Frank,

versuche es einmal so:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var ti:PTypeinfo;
    pi:PPropinfo;
begin
  ti:=Typeinfo(TMemo);
  pi:=GetPropInfo(ti,'Lines');
  setOrdProp(memo2,pi,integer(memo1.lines)); // <-- geändert
end;
Die Property-Informationen zu Lines hast du ja schon in der Variablen pi vorliegen, der erste Parameter von SetOrdProp muß also eine Referenz auf das Control sein.
Beim dritten Parameter ist der Adreßoperator falsch, memo1.lines ist bereits eine Referenz auf ein TStrings-Objekt.

Gruß Hawkeye

_frank_ 19. Jul 2006 16:22

Re: [RTTI] setzen von klasseneigenschaften
 
danke so funktioniert es...
das mit dem @ war mein 2. Versuch...hatte es auch erst ohne probiert, weils ja schon ein Pointer ist, aber der eigentliche Fehler war das Property als ersten Parameter direkt anzugeben...

Dank dir... (hab dich auch schon in die credits des DFMedit aufgenommen)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 Uhr.
Seite 2 von 2     12   

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