Thema: Dry-Problem

Einzelnen Beitrag anzeigen

Delbor

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

AW: Dry-Problem

  Alt 23. Jul 2015, 15:23
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
Miniaturansicht angehängter Grafiken
hihgtlighter-1.jpg  
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