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