AGB  ·  Datenschutz  ·  Impressum  







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

SynEdit: Alle Highlighter ändern

Ein Thema von Nils_13 · begonnen am 17. Feb 2009 · letzter Beitrag vom 18. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

SynEdit: Alle Highlighter ändern

  Alt 17. Feb 2009, 19:24
Hi,

ich habe mehrere verschiedene SynEdit-Highlighter auf einem Formular. Es gibt ein Optionsmenü, das die Farb- und Schriftstilinformationen aller Highlighter auf einmal ändern soll. Man wählt dann über eine ComboBox aus, welche Farben und Schriftstile man bearbeiten möchte (Assembler, Kommentar, Schlüsselwert, ...). Da dieses Optionsmenü einen OK-Button besitzt, sollen erst beim Klick auf den OK-Button alle Highlighter geändert werden. Daher müsste man die Werte alle zwischenspeichern und am Ende möglichst einfach auf die einzelnen Highlighter zuweisen. Jeder SynEdit-Highlighter ist von TSynCustomHighlighter abgeleitet. Allerdings besitzt TSynCustomHighlighter überhaupt keine Werte wie sie in den Highlightern selbst auftauchen. Nun müsste man beim Klick auf OK das Formular mit den Highlightern durchlaufen und alle Farben ändern. Das Durchlaufen ist noch einfach: Man prüft, ob die Komponente ein TSynCustomHighlighter ist. Aber nun stellt sich die Frage: Wie bekommt man die zwischengespeicherten Daten vom Optionsmenü in alle Highlighter rein? Zum Beisipel TSynCSSSyn ist nicht vergleichbar mit TSynPasSyn. Ein Cast ist daher nicht möglich. Wie würdet ihr das lösen ?

Was noch viel besser wäre: Man könnte jeden Highlighter einzeln setzen. Denn ich habe gerade festgestellt, dass die Highlighter sich teilweise so unterscheiden, dass die ComboBox alles andere als schön wäre und es übersichtlicher wäre, alle einzeln zu setzen. Wie könnte man das geschickt lösen ?
  Mit Zitat antworten Zitat
Florian Hämmerle
(Gast)

n/a Beiträge
 
#2

Re: SynEdit: Alle Highlighter ändern

  Alt 17. Feb 2009, 19:34
Optionsdialog mit TPageControl (Jeder Tab ein Highlighter). auf dem so eine Vorschau ist und der dazugehörige Highlighter. Während dem Dialog wird nur dieser Highlighter geändert und bei Klick auf OK werden die Eigenschaften auf den im Hauptprogramm verwendeten übertragen.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#3

Re: SynEdit: Alle Highlighter ändern

  Alt 17. Feb 2009, 19:50
Halte ich für schlecht. Entweder knallt man sich den Speicher und das Formular mit unendlich vielen Komponenten zu ODER man erzeugt alles dynamisch und der Speicher wird unnötig dicht gemacht.
  Mit Zitat antworten Zitat
Florian Hämmerle
(Gast)

n/a Beiträge
 
#4

Re: SynEdit: Alle Highlighter ändern

  Alt 17. Feb 2009, 19:51
Aber der aufwand mit speichern ist nicht gegeben und sonst müsstest du ja auch die ganzen einstellungen irgendwo speichern....
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#5

Re: SynEdit: Alle Highlighter ändern

  Alt 17. Feb 2009, 20:07
Zitat:
Aber nun stellt sich die Frage: Wie bekommt man die zwischengespeicherten Daten vom Optionsmenü in alle Highlighter rein?
also ich wüsste ja, wie ich es machen würde
bin aber noch nicht so weit. Über RTTI ..

die Quelltexte wollte ich noch aktualisieren, .....
müsste man aber noch den Klassencheck ausbauen, funktioniert im Moment nur, wenn es der gleiche Typ ist.
solange ich das noch nciht habe, müsstest Du die Komponente mal selbst umändern

Delphi-Quellcode:
function CopyPupProperties(const aSource, aDestination : TObject) : boolean;
const
  cTempName = 'Temp';
var
  XMLSerializer : TXMLSerializer;

begin
  result := false;
  XMLSerializer := TXMLSerializer.Create(nil);
  try
      DefaultSettings(XMLSerializer);

      if (aSource is TComponent) and (aDestination is TComponent) then begin
           result := XMLSerializer.SaveComponent(TComponent(aSource), cTempName ) <> nil;
           if result then
               result := ( XMLSerializer.LoadComponent(TComponent(aDestination), cTempName ) <> nil);
      end else begin
          result := XMLSerializer.SaveObject(aSource, cTempName) <> nil;
          if result then
              result := XMLSerializer.LoadObject(aDestination,cTempName) <> nil;
      end;

  finally
      XMLSerializer.Free;
  end;

end;

siehe da ..

http://www.delphipraxis.net/internal...+serialisierer


deswegen wundert es mich ja, dass die RTTI funktionen auf so wenig begeisterung stoßen
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#6

Re: SynEdit: Alle Highlighter ändern

  Alt 17. Feb 2009, 20:23
Zitat:
Was noch viel besser wäre: Man könnte jeden Highlighter einzeln setzen.
dann hole Dir den TJVInspector von Jedi und hänge den entsprechenden Highlighter drauf, und schwupp die wupp kannst Du ihn genauso bearbeiten, wie unter der IDE selber ....

TMS hat ebenfalls einen (optisch schöneren) RTTI Inspector ..

http://www.tmssoftware.com/site/inspbars.asp


speichern dann einfach mit dem XML Serialisierer

ingesamt 2-3 Befehle
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#7

Re: SynEdit: Alle Highlighter ändern

  Alt 17. Feb 2009, 20:31
Ne, ich nutze Lazarus. Da gibt es auch einen ObjektInspektor. Dem Teil kann man Objekte aller Art zuweisen und er zeigt alles an, kann alles ändern usw. Aber das sieht so stillos aus. Denn er verdeckt die Typen nicht. Da steht also am Ende:
AsmAttri (TSynHighlighterAttributes)
Alles andere als schön.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#8

Re: SynEdit: Alle Highlighter ändern

  Alt 17. Feb 2009, 22:05
Ich würde das vielleicht über eine Klasse machen. Beispiel :
Delphi-Quellcode:
THighlighterProp = class
private
  FASMFontStyle : TFont;
  FASMColor : TColor;

{u.s.w.}
  
  procedure ReadProp;
  procedure WriteProp;
public
  property ASMFontStyle : TFont read FASMFontStyle write FASMFontStyle;
end;
Wie gesagt, ist nur ein Beispiel. Natürlich kann man es auch noch weiter aufdröseln in den Properties.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: SynEdit: Alle Highlighter ändern

  Alt 17. Feb 2009, 23:55
Ich habe mal eine Unit aus einem Projekt von mir angehängt (auch Lazarus), bei dem diese Farben einzeln setzbar sind.
Dabei habe ich das so gelöst, dass die ExportToFile-Funktion der Highlighter offenbar als einfache Ini-Datei erzeugt, die nach dem Muster
Code:
[Assembler]
Background=536870911
Foreground=536870911
Style=0
StyleMask=0
aufgebaut ist (nur ein beispiel hier)
Das lässt sich natürlich leicht parsen, speichern und wieder importieren.
Das Beispiel nutzt hier nur den jeweils gerade aktiven Highlighter, sollte sich aber durch entsprechende Verwaltungslisten auch auf alle übertragen lassen (wird hier auch in der Hauptunit getan)
Es wird die entsprechende, vorher exportierte Ini gelesen, Colorbuttons erstellt, Checkboxen für Styles erstellt, und bei Klick auf OK wieder in die ini geschrieben.
Der Aufruf von SetLanguage importiert die Styles dann wieder in den aktiven Highlighter.
Solltest du Teile daraus verwenden, bitte der fairness halber meinen Namen nennen. Danke.
Wie sich die Stylemasken aufbauen sollte ersichtlich sein, leider ist der Code schlecht kommentiert.
Angehängte Dateien
Dateityp: pas ucolors_163.pas (5,2 KB, 6x aufgerufen)
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#10

Re: SynEdit: Alle Highlighter ändern

  Alt 18. Feb 2009, 00:03
Was mir gerade aufgefallen ist
for i := ComponentCount-1 downto 0 do Bei ComponentCount = 0 wird Components[0] angesprochen (das es nicht gibt)

Vieleicht ein Denkfehler von mir? Mache es aber so:
Delphi-Quellcode:
for i := ComponentCount downto 1 do
  Components[i-1]...
Bei ComponentCount = 0 wird die Schleife nicht ausgeführt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz