Hi zusammen
Zitat:
Die Dialoge fordern ihre gewünschten Attribut an, der Dialog mit der ComboBox kann sich alle Attribute und ihre Namen aufzählen lassen.
Eigentlich wird es genau einen Dialog geben, der auf einem Pagecontrol mit 3 Tabsheets je einen Frame enthält (TJavaScriptAttributsFrame,TCssAttributsFrame,THTM LAttributsFrame).
Im Synedit, bzw. den Hightlighten dazu, sind die Propertys für Schriftstile, Farben etc vom Tip TSynHighlighterAttributes. Und deshalb sind die privaten Felder meiner Frames, welche für das Highlightning zuständig sind, auch von diesem Typ.
Diese Dinger werden im constructor des Frames erzeugt, während ich die Freigabe der Objectliste überlasse.
Der Dialog und damit die Frameinstanzen werden dynamisch beim Aufruf erzeugt und zerstört, wenn der Dialog geschlossen wird.
Über die Combobox kann das Objekt gewählt werden, dessen Farbben und Stile bearbeitet werden sollen.
Da mir bis anhin das Flyweigth-Pattern unbekannt war, hab ich mal danach gegoogelt; ich weiss zwar nicht genau, ob ich da schon alles verstanden habe, aber ich denke mal, dass es innerhalb der bestehenden Synedit-Quellcodes wohl eher Berechtigung hätte, da dort reger Gebrauch von Objekten gemacht wird, die sich in vielen Teilen ähneln.
Mir ist aber etwas aufgefallen: TSynHighlighterAttributes ist eine Klasse, und Klassen kann man Namen zuweisen - zum Beispiel den String, den ich der Combobox als Item zuweise (Offenbar hatten die vergangenen Hitzetage unliebsame Auswirkungen...).
Aber auch wenn der Dialog und seine Frames nur temporär bestehen, bräuchte ich diese Klassen möglicherweise gar nicht, sondern gerade mal völlig normale Records:
Delphi-Quellcode:
TAttributsRec = Record
BackGround : TColor;
FoeGround : TColor;
StyleBold :Boolean;
StyleItalic : Boolean;
StyleUnderLine : Boolean;
StyleStrikeOff : Boolean;
AttributName: String;
Nun war ich fast fertig, da hab ich einige neue Antworten gesehen,, weshalb ich eine Erweiterung anhänge:
Delphi-Quellcode:
procedure TJavaScriptAttributsFrame.SymbolAttributesCreate;
begin
FSymbolAttri := TSynHighlighterAttributes.Create;
FSymbolAttri.Name := 'Symbole'; //<== Damit steht ein String zur Verfügung
FJavaScriptAttributsList.Add(FSymbolAttri);
CmbxAttributes.Items.AddObject(FSymbolAttri.Name,TObject(FSymbolAttri));
Application.ProcessMessages;
end;
Nein, das geht nicht nur in die richtige Richtung - das ist die Lösung. Irgendwie schwirrten mir Listen durch den Kopf, von wo aus aufgerufen werden sollte - aber was, wenn so eine Liste mal aus irgendeinem Grund umsortiert wird (Die Bluescreens während der Hitzewelle waren auch nicht vorgesehen...)?
Gruss
Delbor