AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Property Readonly setzen - gespeicherte Werte
Thema durchsuchen
Ansicht
Themen-Optionen

Property Readonly setzen - gespeicherte Werte

Ein Thema von matashen · begonnen am 3. Apr 2017 · letzter Beitrag vom 3. Apr 2017
Antwort Antwort
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
471 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Property Readonly setzen - gespeicherte Werte

  Alt 3. Apr 2017, 14:04
Delphi-Version: XE2
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

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

setpropvalue(application.FindComponent(myform).FindComponent(myobject)),'Readonly',Readonlystatus);
Wär cool wenns da nen einfachen einzeiler gäbe ...
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Property Readonly setzen - gespeicherte Werte

  Alt 3. Apr 2017, 14:25
entweder
Delphi-Quellcode:
if MyComponent is TCustomEdit then
  TEdit(MyComponent).ReadOnly := ReadOnlyStatus
else if MyComponent is ... then
  ...
Denn z.B. bei DevExpress hast du sonst richtig Spaß, wenn sich das atattdessen in Edit.Properties.ReadOnly versteckt.

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 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)
$2B or not $2B
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: Property Readonly setzen - gespeicherte Werte

  Alt 3. Apr 2017, 14:55
Eventuell hilft sowas:
Delphi-Quellcode:
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;
Oder so (ungetestet, nur hingedaddelt):
Delphi-Quellcode:
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;
Benutzung:
Delphi-Quellcode:
var
     AClass : TObject;
begin
  AClass := application.FindComponent(myform).FindComponent(myobject);
  SetValue(AClass,'Visible',True);
  SetValue(AClass,'Enabled',False);
  SetValue(AClass,'ReadOnly',True);
...
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
471 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Property Readonly setzen - gespeicherte Werte

  Alt 3. Apr 2017, 15:16
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:
Aber ich bin mir sicher, dass SetPropValue auch Boolean kann.
Eventuell aber nur, wenn man den Wert vorher in einen Ordinalen Typ umwandelt 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)
Nochmal dickes Dankeschön

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:27 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