![]() |
Eigenschaften einer Komponente zur Laufzeit verändern
Hallo,
ich bastel momentan an einem ObjektInspektor, mit dem zur Laufzeit die Eigenschaften einer Komponente verändern werden sollen. Folgende Ausgangssituation: Ich habe den Komponentennamen, die Klasse und die Eigenschaft in einem String vorliegen. Nun möchte ich es so casten, dass ich einen Wert der Komponenten-Eigenschaft zuweisen kann. Wie könnte ich sowas realisieren? Im folgenden Code mal ein Beispiel wie ich es gerne hätte:
Delphi-Quellcode:
Wäre super wenn mir jemand helfen könnte.
procedure EditProperty;
const vProperty : string = 'Left'; const vValue : string = '30'; const vType : string = 'Integer'; const vClassName : string = 'TEdit'; const vComponentName: string = 'Edit1'; var vComponent: TComponent; begin if vType = 'Integer' then begin vComponent := Self.FindComponent(vComponentName); vClassName(vComponent).vProperty := vValue; // Pseudo end; end; |
Re: Eigenschaften einer Komponente zur Laufzeit verändern
Um auf Komponenten während der Laufzeit zugreifen zu können, mußt du diese dem Typ zuweisen:
Delphi-Quellcode:
if vClassName = 'TEdit' then
(vComponent as TEdit).vProperty := vValue; |
Re: Eigenschaften einer Komponente zur Laufzeit verändern
Danke,
ja soweit bin ich auch, das Problem ist aber, das vProperty ein String ist und kein Property der Komponente. |
Re: Eigenschaften einer Komponente zur Laufzeit verändern
Such hier im Forum mal nach RTTI und damit musst du dann die Elemente iterieren und kannst dann auch die Eigenschaften auflisten, Werte ermitteln und auch setzen.
|
Re: Eigenschaften einer Komponente zur Laufzeit verändern
So hab es hinbekommen :dancer:
Mit der Methode 'SetOrdProp' geht's!
Delphi-Quellcode:
if Assigned(vComponent) then
begin vValueInt := StrToInt(ListEdit.Text); SetOrdProp(TObject(vComponent),vProperty,vValueInt); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 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 by Thomas Breitkreuz