Hallo Freunde,
ich pack das mal hier rein, ist zwar grafische Oberfläche, aber irgendwie auch nicht
Ich möchte einen selbstgebauten Serializer erstellen. Dieser soll für einige Controls auf einem Formular genau definierte Properties serialisieren und als XML später wegspeichern. Ich dachte, Attribute wären da eine prima Idee.
Also habe ich ein ganz simples Attribut erstellt:
Delphi-Quelltext
1: 2: 3:
| type ASHSerializerAttribute = class(TCustomAttribute) end; |
Mit diesem Attribut statte ich nun die spezifischen Controls meines Formulars aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type TForm1 = class(TForm) [ASHSerializer] CheckBox1: TCheckBox; [ASHSerializer] Button1: TButton; procedure Button1Click(Sender: TObject); private public end; |
Im ButtonClick lasse ich dann serialisieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var I: Integer; TC: TComponent; begin for I := 0 to self.ComponentCount-1 do begin TC:=self.Components[i]; SerializeControl(TC); end; end; |
Um an das Attribut zu gelangen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure SerializeControl(TheClass: TObject); var LContext: TRttiContext; LType: TRttiType; LAttr: TCustomAttribute; LP: TArray<TCustomAttribute>; begin LContext := TRttiContext.Create;
LType := LContext.GetType(TheClass.ClassInfo); LP:=LType.GetAttributes(); for LAttr in LP do begin if LAttr is ASHSerializerAttribute then begin MessageDlg('Gotcha !', mtInformation,[mbOK],0); end; end; LContext.Free; end; |
Compiliert alles, läuft alles. Nur kommt nie ein "Gotcha !" hoch.
Wo liegt mein Denkfehler ?
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.