Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Delphi.Narium,
7. Okt 2018
Wenn Du weißt, dass der zu setzende Typ mit dem zu setzenden Wert immer übereinstimmt, dann musst Du natürlich den Typen nicht mehr abfragen.
Sprich: Wenn SetProperty2 nur zum Setzen von String genutzt wird, kann das Case entfallen.
War halt davon ausgegangen, dass Du eine Routine suchst, bei der es egal ist, was da an Werten und Typen "reinkommt". Bekannt seien nur Eigenschaftsname und der...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Delphi.Narium,
7. Okt 2018
Eigentlich müsste das von oben funktionieren.
Noch ein Versuch:
procedure SetProperty3(ABotOptions : TBotOptions; sProperty, sValue: string);
var
LPropList: PPropList;
LPropCount, I: Integer;
begin
LPropCount := GetPropList(ABotOptions, LPropList);
try
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Delphi.Narium,
7. Okt 2018
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.
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Delphi.Narium,
7. Okt 2018
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...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Delphi.Narium,
7. Okt 2018
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...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Delphi.Narium,
7. Okt 2018
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?
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Delphi.Narium,
7. Okt 2018
Wenn die Eigenschaften von LBotOptions genauso heißen, wie der Path in Ljtr, dann geht das:
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.)
if (LowerCase(Ljtr.Path) = 'groupoptions.chatid') then LBotOptions.chatid:= Ljtr.Value.ToString;
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Delphi.Narium,
7. Okt 2018
Suchst Du sinngemäß sowas?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