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
                        Delphi-Quelltext                    
           	 										| 1:2:
 3:
 
 | typeASHSerializerAttribute = class(TCustomAttribute)
 end;
 | 
		
	  
Mit diesem Attribut statte ich nun die spezifischen Controls meines Formulars aus:
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 
 | typeTForm1 = class(TForm)
 [ASHSerializer] CheckBox1: TCheckBox;
 [ASHSerializer] Button1: TButton;
 procedure Button1Click(Sender: TObject);
 private
 
 public
 
 end;
 | 
		
	  
Im ButtonClick lasse ich dann serialisieren:
		                     
             Delphi-Quelltext
                        Delphi-Quelltext                    
           	 										| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 
 | varI: 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
                        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.