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
 
Delbor

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

AW: Klasseninstanz zur Laufzeit bestimmen

  Alt 3. Aug 2015, 19:24
Hi zusammen

Wie man nur so blind sein kann!! Nochmal zur Erinnerung die CreateAufrufe und die Createprozedur selbst:
Delphi-Quellcode:
constructor TJavaScriptAttriTLBXFrame.Create(AOwner: TComponent);
begin
  inherited;
  FJavaScriptAttributsList := TDataObjectList<TAttributsClass>.Create();
  FJavaScriptAttributsList.OwnsObjects := True;

  CreateAttribute(FCommentAttri, 'Kommentare', 'FCommentAttri'); // fCommentAttri: TSynHighlighterAttributes;
  CreateAttribute(FIdentifierAttri, 'Bezeichner', 'FIdentifierAttri'); // fPropertyAttri: TSynHighlighterAttributes;
  CreateAttribute(FKeyAttri, 'Schlüsselworte', 'FKeyAttri'); // fKeyAttri: TSynHighlighterAttributes;

  CreateAttribute(FNonReservedKeyAttri, 'Nicht reservierte Schlüssel', 'FNonReservedKeyAttri'); // fSpaceAttri: TSynHighlighterAttributes;
  CreateAttribute(FEventAttri, 'Ereignisse', 'FEventAttri'); // fStringAttri: TSynHighlighterAttributes;
  CreateAttribute(FNumberAttri, 'Zahlen', 'FNumberAttri'); // fNumberAttri: TSynHighlighterAttributes;


  CreateAttribute(FSpaceAttri, 'Leerzeichen', 'FSpaceAttri'); // fColorAttri: TSynHighlighterAttributes;
  CreateAttribute(FStringAttri, 'Strings', 'FStringAttri'); // fTextAttri: TSynHighlighterAttributes;
  CreateAttribute(FSymbolAttri, 'Symbole', 'FSymbolAttri'); // fSymbolAttri: TSynHighlighterAttributes;
end;

destructor TJavaScriptAttriTLBXFrame.Destroy;
begin
   FJavaScriptAttributsList.Free;
  inherited;
end;

procedure TJavaScriptAttriTLBXFrame.CreateAttribute(var AAttrib: TAttributsClass; const AName: string; AInstanz : String);
begin
  AAttrib:= TAttributsClass.Create(Self);
  AAttrib.AttributName := AName;
  AAttrib.InstanzName := AInstanz;
  FJavaScriptAttributsList.Add(AAttrib);
  CmbxAttributes.Items.AddObject(AName,TObject(AAttrib));
  Application.ProcessMessages;
end;
Damit wird bei jedem Aufruf eine Instanz der Klasse TAttributsClass erzeugt und nicht eine Klasseninstanz FCommentAttri - somit kann ich auch nicht auf eine Instanz FCommentAttri zugreifen. Einfach, nicht?

Um die richtigen Instanzen zu erzeugen, müsste ich wohl eher so etwas macen:
Delphi-Quellcode:
procedure TJavaScriptAttriTLBXFrame.CreateAttribute(var AAttrib: TAttributsClass; const AName: string; AInstanz : String);
begin
  AAttrib:= AAttrib.Create(Self);
  AAttrib.AttributName := AName;
  AAttrib.InstanzName := AInstanz;
  FJavaScriptAttributsList.Add(AAttrib);
  CmbxAttributes.Items.AddObject(AName,TObject(AAttrib));
  Application.ProcessMessages;
end;
Wobei dies auch nicht ganz stimmt: Der rechte Teil muss ein Klassenbezeichner sein - der muss aber zum Instanzbezeichner passen. Das property Instanzname ist auch nicht das gelbe vom Ei...
Das heisst nichts anderes, als dass es einige von TAttributsClass abgeleitete Klassen geben wird, wie zum Beispiel TCommentAttri. Die Erzeugung ist dann:
FCommentAttri:= TCommentAttri.Create Damit habe ich ohne Verrenkungen zugriff auf die richtige Instanz.

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
 


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 12:39 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