![]() |
Re: [RTTI] setzen von klasseneigenschaften
Kleines Beispiel:
Delphi-Quellcode:
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:
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;
Delphi-Quellcode:
Gruß Hawkeye
procedure TMyObject.SetProp2 (Value: TBitmap);
begin FProp2.Assign(Value); end; |
Re: [RTTI] setzen von klasseneigenschaften
Zitat:
Gruß Frank |
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:
das ganze soll nur ein beispiel sein um memo1.lines nach memo2.lines zu kopieren...später ist natürlich alles variabel...
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; Hoffe jemand kann mir helfen... Gruß Frank |
Re: [RTTI] setzen von klasseneigenschaften
Hallo Frank,
versuche es einmal so:
Delphi-Quellcode:
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.
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; Beim dritten Parameter ist der Adreßoperator falsch, memo1.lines ist bereits eine Referenz auf ein TStrings-Objekt. Gruß Hawkeye |
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. |
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