![]() |
Delphi-Version: XE2
Property Readonly setzen - gespeicherte Werte
Hallo zusammen,
hab grad zu nem Problem keine Idee und kein Glück beim googlen. Ich lege Einstellungen zu verschiedenen Componenten in einer Datei ab. Je nach Benutezrfreigabe sollen verschiedene Bereiche der Anwendung frei gegeben sein. Dabei soll ich die Werte Enabled, visible und Readonly setzen. Genau bei letzterem hab ich das Problem das ich dieses nicht so einfach setzen kann. Bei zum Beispiel Visible mach ich folgendes
Delphi-Quellcode:
TControl(application.FindComponent(myform).FindComponent(myobject)).visible:=visiblestatus;
Das gleiche geht auch mit enabled, nur bei Readonly hab ich keine Idee wie ich das machen kann. setprobvalue kennt ja leider auch kein boolean, sonst häts ich mal so versucht
Delphi-Quellcode:
setpropvalue(application.FindComponent(myform).FindComponent(myobject)),'Readonly',Readonlystatus);
Wär cool wenns da nen einfachen einzeiler gäbe ... |
AW: Property Readonly setzen - gespeicherte Werte
entweder
Delphi-Quellcode:
Denn z.B. bei DevExpress hast du sonst richtig Spaß, wenn sich das atattdessen in Edit.Properties.ReadOnly versteckt.
if MyComponent is TCustomEdit then
TEdit(MyComponent).ReadOnly := ReadOnlyStatus else if MyComponent is ... then ... SetPropValue: XE2 kennt schon die erweiterte RTTI (RTTI.pas), dann verwende besser die darin enthaltenen neueren APIs, anstatt dieser uralten API. Aber ich bin mir sicher, dass SetPropValue auch Boolean kann. Eventuell aber nur, wenn man den Wert vorher in einen Ordinalen Typ umwandelt
Delphi-Quellcode:
,
Ord(ReadOnlyStatus)
denn Delphi nutzt Boolean (1 Byte groß mit 0 und +1), welches als VarType als ein Integer mit Min=0 und Max=1 definiert ist, und Variant kennt nur WordBool (2 Byte groß mit 0 und -1) |
AW: Property Readonly setzen - gespeicherte Werte
Eventuell hilft sowas:
Delphi-Quellcode:
Oder so (ungetestet, nur hingedaddelt):
Function HasProperty(AClass : TObject; APropertyName : String) : Boolean;
Begin Result := Assigned(GetPropInfo(AClass.ClassInfo, APropertyName)); End; ... if HasProperty(application.FindComponent(myform).FindComponent(myobject),'ReadOnly') then begin SetPropValue(application.FindComponent(myform).FindComponent(myobject),'ReadOnly',Readonlystatus); end;
Delphi-Quellcode:
Benutzung:
uses
TypInfo; function SetValue(AClass : TObject; AProperty : String; AValue : Variant) : Boolean; begin Result := Assigned(GetPropInfo(AClass.ClassInfo, AProperty)); if Result then SetPropValue(AClass, AProperty, AValue); end;
Delphi-Quellcode:
var
AClass : TObject; begin AClass := application.FindComponent(myform).FindComponent(myobject); SetValue(AClass,'Visible',True); SetValue(AClass,'Enabled',False); SetValue(AClass,'ReadOnly',True); ... |
AW: Property Readonly setzen - gespeicherte Werte
Hallo,
danke Jungs hatte einen Fehler an einer anderen Stelle im Code, SetPropValue funktioniert. Der hinweis von Himitsu hat mich an einen anderen Fehler gebracht. Vartype gefüttert mit Wordbool dann geht's... Zitat:
Gruß Matthias |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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