AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Gehen strings als Eigenschaftsnamen? Wenn ja wie?
Thema durchsuchen
Ansicht
Themen-Optionen

Gehen strings als Eigenschaftsnamen? Wenn ja wie?

Ein Thema von ScharfeMietze · begonnen am 7. Okt 2018 · letzter Beitrag vom 8. Okt 2018
Antwort Antwort
ScharfeMietze

Registriert seit: 5. Mär 2014
165 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#1

Gehen strings als Eigenschaftsnamen? Wenn ja wie?

  Alt 7. Okt 2018, 11:25
Delphi-Quellcode:
            
if (LowerCase(Ljtr.Path) = 'groupoptions.can_send_other_messages') and (Ljtr.TokenType = TJsonToken.Boolean) then
              begin
                LBotOptions.cs:= Ljtr.Value.ToString.ToBoolean;
              end
das ist typisches konstruct
ich hätte aber gerne sowas wie
Delphi-Quellcode:
try
if (Ljtr.TokenType = TJsonToken.Boolean) then LBotOptions.'can_send_other_messages' := Ljtr.Value.ToString.ToBoolean;
.....
gibt es sowas?

Freu mich auf antworten ....
Gruß die Mietze

Geändert von ScharfeMietze ( 7. Okt 2018 um 11:55 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.867 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Gehen strings als Eigenschaftsnamen? Wenn ja wie?

  Alt 7. Okt 2018, 11:29
Was hast Du vor?

Eigentlich sind Eigenschaftsnamen ja Strings. Willst Du die Eigenschaft abhand eines Inhalts eines Strings auswählen?
Markus Kinzler
  Mit Zitat antworten Zitat
ScharfeMietze

Registriert seit: 5. Mär 2014
165 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#3

AW: Gehen strings als Eigenschaftsnamen? Wenn ja wie?

  Alt 7. Okt 2018, 11:48
Ja das ist der Plan. Ich bekomme via jsonstring Eigenschaftswerte die ich (je nach bedarf) im "Bauplan" der Botoptions verankere.

Ich möchte mir ersparen dann jede Eigenschaft im Code beim einlesen nochmal verankern zu müssen.

Gruß

Geändert von ScharfeMietze ( 7. Okt 2018 um 12:06 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.552 Beiträge
 
Delphi 7 Professional
 
#4

AW: Gehen strings als Eigenschaftsnamen? Wenn ja wie?

  Alt 7. Okt 2018, 12:14
Suchst Du sinngemäß sowas?
Delphi-Quellcode:
uses TypInfo;

procedure SetProperty(AComponent: TComponent; sProperty, sValue: string);
var
  PropInfo: PPropInfo;
begin
  if Assigned(AComponent) then begin
    PropInfo := GetPropInfo(AComponent.ClassInfo, sProperty);
    if Assigned(PropInfo) then begin
      case PropInfo^.PropType^^.Kind of
        tkString,
        tkLString,
        tkWString: SetStrProp(AComponent, PropInfo, sValue);
        tkInteger: SetOrdProp(AComponent, PropInfo, StrToInt(sValue))
      else
        SetStringsProperty(AComponent, PropInfo, sValue);
      end;
    end;
  end;
end;

procedure SetStringsProperty(AComponent: TComponent;
                             PropInfo: PPropInfo;
                             sValues: string);
var
  AStrings: TStringList;
  sBuffer: string;
  i: Integer;
begin
  AStrings := TStringList.Create;
  i := Pos(FSeparator, sValues);
  while (i > 0) do begin
    sBuffer := Copy(sValues, 1, i-1);
    Delete(sValues, 1, i - 1 + Length(FSeparator));
    i := Pos(FSeparator, sValues);
    AStrings.Add(Trim(sBuffer));
  end;
  if (Length(Trim(sValues)) > 0) then AStrings.Add(Trim(sValues));
  SetOrdProp(AComponent, PropInfo, LongInt(Pointer(AStrings)));
  AStrings.Free;
end;
Im Zweifelsfalle mal die Unit TypInfos (so hieß sie zu Dlephi 7-Zeiten) durchforsten. Da müsste so etliches zum Abfragen uns Setzen von Eigenschaften (über den Namen) drinne sein.

Geändert von Delphi.Narium ( 7. Okt 2018 um 12:33 Uhr) Grund: Text ergänzt
  Mit Zitat antworten Zitat
ScharfeMietze

Registriert seit: 5. Mär 2014
165 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#5

AW: Gehen strings als Eigenschaftsnamen? Wenn ja wie?

  Alt 7. Okt 2018, 12:27
Das muss ich mal sacken lassen und werde es gleich mal probieren! Wenn das geht wäre das natürlich absolut Hammer!!
  Mit Zitat antworten Zitat
ScharfeMietze

Registriert seit: 5. Mär 2014
165 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#6

AW: Gehen strings als Eigenschaftsnamen? Wenn ja wie?

  Alt 7. Okt 2018, 13:22
Da ich mit PPropInfo; und co noch nicht viel zu tun hatte muss ich nochmal nachfragen ob ich es richtig verstehe, da ich z.B beim else der procedure hänge.

procedure SetProperty(AComponent: TComponent; sProperty, sValue: string); bedeutet doch
aComponent = Bauplan
sProperty = poperty des Bauplans
sValue = Wert der an das property des Bauplans gesendet wird...
ist das soweit richtig?


Delphi-Quellcode:
  if Assigned(AComponent) then begin
    PropInfo := GetPropInfo(AComponent.ClassInfo, sProperty);
Wenn der Bauplan vorhanden ist, schreibe in PropInfo den "string" aus sproperty.


if Assigned(PropInfo) then begin Wenn das Property vorhanden ist, schreibe den (string) Wert aus sValue in das Property.

hab ich das soweit richtig verstanden oder bin ich da schon falsch??

Weil weiterführende Frage ist natürlich (falls ich oben richtig liege)

Delphi-Quellcode:
        tkWString: SetStrProp(AComponent, PropInfo, sValue);
        tkInteger: SetOrdProp(AComponent, PropInfo, StrToInt(sValue))

Wenn ein Boolean/Integer als Wert sValue habe, reicht es die beiden Zeilen anzupassen? Wenn ja wie muss das aussehen?

und
Delphi-Quellcode:
procedure SetStringsProperty(AComponent: TComponent;
                             PropInfo: PPropInfo;
                             sValues: string);
was diese procedure tut ist mir bisher nicht klar?!?

Gruß Mietze (momentan noch gar nicht scharf )
  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 04:06 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