Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#42

AW: Wozu sind Attribute gut ?

  Alt 6. Aug 2013, 14:55
Soll bedeuten, ich muss in meinem Quelltext mindestens einen String mit dem Inhalt 'Derp' und 'Lebensmittel' ablegen.
Das verstehe ich gerade nicht... wofür willst du das denn benutzen?
Mal ein Beispiel:
Delphi-Quellcode:
type
  ColorElementAttribute = class(TCustomAttribute)
  private
    var
      FColor: TColor;
    procedure SetColor(const Value: TColor);
  public
    constructor Create(const AColor: TColor);
    property Color: TColor read FColor write SetColor;
  end;

constructor ColorElementAttribute.Create(const AColor: TColor);
begin
  FColor := AColor;
end;

procedure ColorElementAttribute.SetColor(const Value: TColor);
begin
  FColor := Value;
end;
Und im Formular mit zwei Buttons und zwei Memos:
Delphi-Quellcode:
  TFormX = class(TForm)
    Button1: TButton;
    Button2: TButton;
    [ColorElement(clRed)]
    Memo1: TMemo;
    [ColorElement(clBlue)]
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
  end;

procedure TFormX.Button1Click(Sender: TObject);
var
  LCtx: TRttiContext;
  LField: TRttiField;
  LAttr: TCustomAttribute;
begin
  for LField in LCtx.GetType(Self.ClassInfo).GetDeclaredFields do
    for LAttr in LField.GetAttributes do
      if LAttr is ColorElementAttribute then
        SetPropValue(LField.GetValue(Self).AsObject, 'Color', ColorElementAttribute(LAttr).Color);
end;
Wenn ich den Namen des Attributes ändere, kompiliert das nicht mehr. Und in deinem Fall könnte das z.B. eine Enumeration sein, dann brauche ich auch da keinen String, das könnte dann auch beim Kompilieren geprüft werden.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat