AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

[RTTI] setzen von klasseneigenschaften

Ein Thema von _frank_ · begonnen am 12. Jul 2006 · letzter Beitrag vom 19. Jul 2006
Antwort Antwort
Seite 2 von 2     12
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#11

Re: [RTTI] setzen von klasseneigenschaften

  Alt 12. Jul 2006, 15:01
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
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

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

Re: [RTTI] setzen von klasseneigenschaften

  Alt 12. Jul 2006, 15:12
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
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

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

Re: [RTTI] setzen von klasseneigenschaften

  Alt 19. Jul 2006, 16:08
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
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#14

Re: [RTTI] setzen von klasseneigenschaften

  Alt 19. Jul 2006, 17:17
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
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

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

Re: [RTTI] setzen von klasseneigenschaften

  Alt 19. Jul 2006, 17:22
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)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz