AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Klasseninstanz zur Laufzeit bestimmen

Ein Thema von Delbor · begonnen am 1. Aug 2015 · letzter Beitrag vom 4. Aug 2015
Antwort Antwort
Delbor

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

AW: Klasseninstanz zur Laufzeit bestimmen

  Alt 4. Aug 2015, 09:45
Hi zusammen

Die Idee aus meinem vorigen Beitrag war wirklich nicht schlecht - sie liefert eine Antwort auf die Frage, die der Threadtitel vorgibt - aber sie ist noch weniger das Gelbe vom Ei, wie das Property 'InstanzName' der Klasse TAttributsClass, da sie zu einem, wie ich meine, ziemlich seltsamen Konstrukt führt:
Delphi-Quellcode:
  TAttributsClass = Class(TPersistent)
     public
      BackGround : TColor;
      ForeGround : TColor;
      StyleBold: Boolean;
      StyleItalic : Boolean;
      StyleUnderLine : Boolean;
      StyleStrikeOff : Boolean;
      AttributName: String;
      InstanzName: String;
      Constructor Create(AOwner: TComponent);
      Destructor Destroy; override;
  end;

  TJavaScriptCommentClass = Class(TAttributsClass);
  TJavaScriptIdentifierClass = Class(TAttributsClass);
  TJavaScriptKeyClass = Class(TAttributsClass);

  TJavaScriptNonReservedKeyClass = Class(TAttributsClass);
  TJavaScriptEventClass = Class(TAttributsClass);
  TJavaScriptNumberClass = Class(TAttributsClass);
//
  TJavaScriptSpaceClass = Class(TAttributsClass);
  TJavaScriptStringClass = Class(TAttributsClass);
  TJavaScriptSymbolClass = Class(TAttributsClass);
Dabei führen die von TAttributsClass abgeleiteten Klassen keinerlei neue Member ein, weder Eigenschaften Methoden oder Ereignisse - wobei ich mir schon überlegt habe, ob die Dinger nicht selbst ein Event abfeuern könnten...
Aber ich habe etwas viel besseres gefunden..

Ein Test in einem meiner Synedit-Frames brachte das gewünschte Resultat, ersichtlich im angehängten Jpeg:

Delphi-Quellcode:
procedure TCSSFrame.SynEdit1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  LContext: TRttiContext; LType: TRttiType; LProperty: TRttiProperty;
  LMethod: TRttiMethod; LField: TRttiField;
begin
  if Self.SynEdit1.SelText <> 'then begin
    Label1.Caption := SynEdit1.SelText;
      Label1.Caption := Label1.Caption + ' SynEdit1.TabWidth := '+ IntToStr(SynEdit1.TabWidth);
    if assigned(FOnSelectText) then // Dieser Event wird gefeuert,
      FOnSelectText(Self); // wenn Text markiert wird.
  end;
  LContext := TRttiContext.Create;
    try
      LType := LContext.GetType(TSynCssSyn);
      SynEdit1.lines.Add(LType.ToString);
      for LProperty in LType.GetProperties do
      begin
        SynEdit1.lines.Add (LProperty.ToString);
      end;
    finally
    LContext.Free;
  end;
end;
Wie der Anhang zeigt, liefert mir das alle Propertys als String. Um meine neuen Einstellungen aus meinem Frame richtig zuordnen zu können, brauche ich entweder einen Kalssenbezeichner, der dem Probertynamen entspricht oder einen String, den ich mitt dem als String vorliegenden Propertynamen vergleichen kann.
Natürlich muss ich aus der sich ergebenden Liste noch den (Teil-)String filtern, den ich in TAttributsClass.Instanzname übergebe. Aber das dürfte wohl kaum ein Problem sein.
Ein weiterer Effekt: Ich brauche zur Übergabe noch genau einen Eventtyp.

Oder gibts noch eine bessere Lösung?

Gruss
Delbor
Angehängte Grafiken
Dateityp: jpg RTTI_Informations1.JPG (186,3 KB, 10x aufgerufen)
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor ( 4. Aug 2015 um 09:49 Uhr) Grund: Frage hinzugefügt
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz