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
Seite 2 von 3     12 3      
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#11

AW: Gehen strings als Eigenschaftsnamen? Wenn ja wie?

  Alt 7. Okt 2018, 15:29
Wenn die Eigenschaften von LBotOptions genauso heißen, wie der Path in Ljtr, dann geht das:
Delphi-Quellcode:
  if (Ljtr.TokenType = TJsonToken.String) then begin
    SetStrProp(LBotOptions,Ljtr.Path,Ljtr.Value.ToString)
  end;
Beim letzten Beispiel von Dir haben wir aber (u. a.)
Delphi-Quellcode:

if (LowerCase(Ljtr.Path) = 'groupoptions.chatid') then LBotOptions.chatid:= Ljtr.Value.ToString;
Damit passen dann Path und Eigenschaftsname nicht mehr zueiander. Da müsste die Routine zur Zuweisung etwas "überarbeitet" werden:
Delphi-Quellcode:
if (Ljtr.TokenType = TJsonToken.String) then begin
  SetStrProp(LBotOptions,AnsiReplaceText(Ljtr.Path,'groupoptions.',''),Ljtr.Value.ToString);
end;
  Mit Zitat antworten Zitat
ScharfeMietze

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

AW: Gehen strings als Eigenschaftsnamen? Wenn ja wie?

  Alt 7. Okt 2018, 15:39
Er behauptet die Eigenschaft würde nicht existieren, obwohl sie das definitiv tut ?!?
Was übersehe ich ?!?
Miniaturansicht angehängter Grafiken
unbenannt.jpg  
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#13

AW: Gehen strings als Eigenschaftsnamen? Wenn ja wie?

  Alt 7. Okt 2018, 15:50
Zeig' bitte mal die vollständige Definition von TLBotOptions und ein Beispiel dessen, was in Ljtr vorzufinden ist.

Was ich nicht weiß: Ist die Suche nach Eigenschaften eventuell casesensitiv?
  Mit Zitat antworten Zitat
ScharfeMietze

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

AW: Gehen strings als Eigenschaftsnamen? Wenn ja wie?

  Alt 7. Okt 2018, 16:00
Delphi-Quellcode:
  TBotOptions = class
  private
    FChatID: string;
    FRestrictNewUser: Boolean;
    Fcan_send_other_messages: Boolean;
    Fcan_send_messages: Boolean;
    Fcan_add_web_page_previews: Boolean;
    Fcan_send_media_messages: Boolean;
    FAntiSpamMessage: string;
    FDeleteSpam: Boolean;
    FCreator: string;
    Fwhitelist: string;
    Fblacklist: string;
    Frestrict_time: Integer;
    Fwelcomemessage: string;
    FStart: Boolean;

    procedure Set_ChatID(const Value: string);
    procedure Set_AntiSpamMessage(const Value: string);
    procedure Set_can_add_web_page_previews(const Value: Boolean);
    procedure Set_can_send_media_messages(const Value: Boolean);
    procedure Set_can_send_messages(const Value: Boolean);
    procedure Set_can_send_other_messages(const Value: Boolean);
    procedure Set_DeleteSpam(const Value: Boolean);
    procedure Set_RestrictNewUser(const Value: Boolean);
    procedure Set_Creator(const Value: string);
    procedure Set_blacklist(const Value: string);
    procedure Set_whitelist(const Value: string);
    procedure Set_restrict_time(const Value: Integer);
    procedure Set_welcomemessage(const Value: string);
    procedure Set_Fstart(const Value: Boolean);

    { private declarations }
  protected
    { protected declarations }
  public
    property chatid:string read FChatID write Set_ChatID;
    property deletespam:Boolean read FDeleteSpam write Set_DeleteSpam;
    property restrictnewuser:Boolean read FRestrictNewUser write Set_RestrictNewUser;
    property antispammessage:string read FAntiSpamMessage write Set_AntiSpamMessage;
    property can_send_messages:Boolean read Fcan_send_messages write Set_can_send_messages;
    property can_send_media_messages:Boolean read Fcan_send_media_messages write Set_can_send_media_messages;
    property can_send_other_messages:Boolean read Fcan_send_other_messages write Set_can_send_other_messages;
    property can_add_web_page_previews:Boolean read Fcan_add_web_page_previews write Set_can_add_web_page_previews;
    property creator:string read FCreator write Set_Creator;
    property blacklist:string read Fblacklist write Set_blacklist;
    property whitelist:string read Fwhitelist write Set_whitelist;
    property restrict_time:Integer read Frestrict_time write Set_restrict_time;
    property welcomemessage: string read Fwelcomemessage write Set_welcomemessage;
    property start :Boolean read FStart write Set_Fstart;
    { public declarations }


  end;
Ist die aktuelle class ...

und das Json
Code:
  "groupoptions": {
    "ChatID": "-xxxxxx",
    "DeleteSpam": true,
    "RestrictNewUser": true,
    "AntiSpamMessage": "SpamPost",
    "can_send_messages": true,
    "can_send_media_messages": false,
    "can_send_other_messages": false,
    "can_add_web_page_previews": false,
    "Creator": "blablub",
    "blacklist": "blablub",
    "whitelist": "",
    "restrict_time": 15,
    "welcomemessage": "",
    "start": true
  },
Wegen dem Case insensitive LowerCase ich es ja vorher runter ......

Ps: http://docwiki.embarcadero.com/CodeE...RTL.JSONReader ist die komponente die mir das Json ließt....

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

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#15

AW: Gehen strings als Eigenschaftsnamen? Wenn ja wie?

  Alt 7. Okt 2018, 16:30
Wegen dem Case insensitive LowerCase ich es ja vorher runter ......
Dachte halt, wenn Delphi casesensitive sucht, könnte das ein Problem sein, wenn die Eigenschaften in 'ner Kombination aus Groß-/Kleinschreibung vorliegen. Da dem nicht so ist, können wir den Fehler schonmal ausschließen.

Momentan hab' ich keine Idee, was da jetzt die Fehlerursache sein könnte.

Oder liegt es eventuell dadran: TBotOptions = class ?

Damit man die TypInfo nutzen kann, muss als Vorfahre mindestens TObject gegeben sein: TBotOptions = class(TObject)
  Mit Zitat antworten Zitat
ScharfeMietze

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

AW: Gehen strings als Eigenschaftsnamen? Wenn ja wie?

  Alt 7. Okt 2018, 16:36
  TBotOptions = class (TObject) wurde geändert ... gleicher Fehler *sniff*
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#17

AW: Gehen strings als Eigenschaftsnamen? Wenn ja wie?

  Alt 7. Okt 2018, 16:49
Sorry, keine Ahnung:

Debugger marsch:

BreakPoint vor SetStrProp und dann in Einzelschritten bis in die tiefsten Tiefen und jeweils merken, aufschreiben, sagen (wie auch immer) bis wo Du gekommen bist bzw. an welcher Stelle die Fehlermeldung produziert wird.

Aber:

Beim manuellen durchgehen der TypInfo habe ich versucht, einzeln mal die Methoden zu verstehen und dann daraus zu kombinieren:

Mir scheint, damit das Ganze funktioniert, müssen die "zu verarbeitenden" Eigenschaften unter published stehen, public reicht nicht aus.

Also Vorfahre mindestens TObject und Eigenschaften müssen published sein.

Wer was anderes weiß: Bitte immer her damit

Geändert von Delphi.Narium ( 7. Okt 2018 um 17:09 Uhr) Grund: Schreibfehler, wie immer :-(
  Mit Zitat antworten Zitat
ScharfeMietze

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

AW: Gehen strings als Eigenschaftsnamen? Wenn ja wie?

  Alt 7. Okt 2018, 17:16
Also nachdem ich nun einen Schreibfehler ausgemerzt habe , bekomme ich als ausgabe
Von Public habe ich alles in published verschoben ....
Inkompatible Typen: 'TComponent' und 'TBotOptions'
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#19

AW: Gehen strings als Eigenschaftsnamen? Wenn ja wie?

  Alt 7. Okt 2018, 17:33
An welcher Stelle?

Da procedure SetProperty(AComponent: TComponent; sProperty, sValue: string); ?
Dann in der Routine aus AComponent: TComponent bitte AObject: TObject und im weiteren der Routine aus AComponent jeweils AObject machen.

Wenn das nicht die Fehlerstelle ist, bitte den kompletten, aktuellen Quelltext posten, so ist das doch sehr abstrakt und kaum zu handhaben.
  Mit Zitat antworten Zitat
ScharfeMietze

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

AW: Gehen strings als Eigenschaftsnamen? Wenn ja wie?

  Alt 7. Okt 2018, 17:53
Ich bin einen Kleinen schritt weiter !!
Delphi-Quellcode:
rocedure SetProperty2(sProperty, sValue: string);
var
  LPropList: PPropList;
  LPropCount, I: Integer;
begin
  LPropCount := GetPropList(LBotOptions, LPropList);
  try
  for I := 0 to LPropCount-1 do
    begin
    if LPropList[I].Name = sProperty then
      begin
       ShowMessage(LPropList[I].Name);
       Break
      end;
    end;
  finally
    FreeMem(LPropList);
  end;
end;
Damit finde ich nun die richtige eigenschaft. Nun brauche ich noch den Weg wie ich die Eigenschaft schreibe???? Ich hangel mich hier von ast zu ast ... Wenn jemand dafür noch ein Weg hat wäre das super!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 03:32 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