Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Klasseninstanz zur Laufzeit bestimmen

  Alt 1. Aug 2015, 17:07
Delphi-Version: XE4
Hi zusammen
Ich habe eine Klasse, der ich (Schrift-)Attribute zuweisen kann, die ich per eigenem Frame einstelle. Den Frame habe ich hier vorgestellt. Die Klasse sieht ziemlich genau aus, wie der auf der verlinkten Seite vorgestellte Record - eine Klasse ist das Ding nur, weil es einer Objektliste und einer Combobox hinzugefügt wird:
Delphi-Quellcode:
  TAttributsClass = Class(TPersistent)
     public
      BackGround : TColor;
      ForeGround : TColor;
      StyleBold: Boolean;
      StyleItalic : Boolean;
      StyleUnderLine : Boolean;
      StyleStrikeOff : Boolean;
      AttributName: String;
  end;
Instanzen dieser Klasse erstelle ich so:
Delphi-Quellcode:
constructor TCssAttriTLBXFrame.Create(AOwner: TComponent);
begin
  inherited;
  FCssAttributsList := TDataObjectList<TAttributsClass>.Create();
  FCssAttributsList.OwnsObjects := True;
  CreateAttribute(FCommentAttri, 'Kommentare');
  CreateAttribute(FPropertyAttri, 'Eigenschaften');
  CreateAttribute(FKeyAttri, 'Schlüsselworte');
  CreateAttribute(FSpaceAttri, 'Leerzeichen');

  CreateAttribute(FStringAttri, 'Strings');
  CreateAttribute(FColorAttri, 'Farben');
  CreateAttribute(FNumberAttri, 'Zahlen');
  CreateAttribute(FSymbolAttri, 'Symbole');

  CreateAttribute(FTextAttri, 'Text');
  CreateAttribute(FValueAttri, 'Werte');
  CreateAttribute(FUndefPropertyAttri, 'Undefinierte Eigenschaften');
  CreateAttribute(FImportantPropertyAttri, 'Wichtige Eigenschaften');

end;
Der erste Parameter bezeichnet dabei die Instanz, die erzeugt werden soll, der zweite den String, der in der Combobox angezeigt wird.

Nun geht es darum, die Werte, die ich zB. aus einer Colorbox auslese, im Closeup per Event weiterzureichen.
Gefeuert werden die Events, wenn ein Wert gewählt wurde, zB. wenn eine Checkbox geklickt wird oder beim CloseUp einer Colorbox:
Delphi-Quellcode:
procedure TCssAttriTLBXFrame.CmbxValueForegroundColorCloseUp(Sender: TObject);
begin
   FActiveAttribut := TAttributsClass(CmbxAttributes.Items.Objects[CmbxAttributes.ItemIndex]);
  Label1.Caption := FActiveAttribut.Name;
//   if Assigned(FActiveAttribut) then
//    FActiveAttribut(FActiveAttribut);
end;
Die Eventpropertys sind wie folgt deklariert:
Delphi-Quellcode:
    property CSSCommentEvent: TCSSCommentEvent read FCSSCommentEvent write FCSSCommentEvent;
    property CssPropertyEvent: TCssPropertyEvent read FCssPropertyEvent write FCssPropertyEvent;
    property CssKeyEvent: TCssKeyEvent read FCssKeyEvent write FCssKeyEvent;
    property CssSpaceEvent: TCssSpaceEvent read FCssSpaceEvent write FCssSpaceEvent;

    property CssStringEvent: TCssStringEvent read FCssStringEvent write FCssStringEvent;
    property CssColorEvent: TCssColorEvent read FCssColorEvent write FCssColorEvent;
    property CssNumberEvent: TCssNumberEvent read FCssNumberEvent write FCssNumberEvent;
    property CssSymbolEvent: TCssSymbolEvent read FCssSymbolEvent write FCssSymbolEvent;

    property CssTextEvent: TCssTextEvent read FCssTextEvent write FCssTextEvent;
    property CssValueEvent: TCssValueEvent read FCssValueEvent write FCssValueEvent;
    property CssUndefPropertyEvent: TCssUndefPropertyEvent read FCssUndefPropertyEvent write FCssUndefPropertyEvent;
    property CssImportantPropertyEvent: TCssImportantPropertyEvent read FCssImportantPropertyEvent write FCssImportantPropertyEvent;
Nun brauche ich ja beim Feuern des Events den Eventtip, der gefeuert werden soll. Bloss: Wie bestimme ich den? Dazu brauche ich ja die Instanz meiner Attributklasse.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat