Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - synEdit-Highlighter: SaveToFile
StefanH - Mo 20.12.04 17:38
Titel: synEdit-Highlighter: SaveToFile
Hallo!
Ich wollte dem User meines Proggs die möglichkeit geben, die Highlighter selbst einzustellen. damit ich das ganze Zeug nicht immer schreiben muss, habe ich folgende Fkt geschrieben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function TForm1.SetAttr: TSynHighlighterAttributes; begin result:= TSynHighlighterAttributes.Create(''); result.Foreground:= pVGColor.Color; result.Background:= pHGColor.Color; result.Style:= []; if cbBold.Checked then result.Style:= result.Style + [fsBold]; if cbItalic.Checked then result.Style:= result.Style + [fsItalic]; if cbUnderline.Checked then result.Style:= result.Style + [fsUnderline]; if cbStrikeOut.Checked then result.Style:= result.Style + [fsStrikeOut]; end; |
und dann aktualiesiere ich die Highlighter je nach ListBox / COmboBox eintrag
Delphi-Quelltext
1: 2: 3: 4: 5:
| case lbElement.ItemIndex of 0: synHLhtml.AndAttri:= SetAttr; 1: synHLhtml.ASPAttri:= SetAttr; 2: synHLhtml.CommentAttri:= SetAttr; ... |
geht alles prima, im Vorschau synedit wird alles richtig angezeigt, aber wenn ich dann
Delphi-Quelltext
1:
| synHLhtml.SaveToFile('C:\test.hl'); |
aufruf, speichert er immer die Einstellungen, die der Highlighter von Anfang an hatte.
Ich versteh nun wirklich nicht, woran das liegt. Hat jmd eine Idee? NOtfalls müsste ich die Speicher- und Laderoutine selbst schreiben... *brr*
gespeicherte Datei
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| [Asp] Background=65535 Foreground=0 Style=0
[Comment] Background=536870911 Foreground=536870911 Style=0
[Escape ampersand] Background=536870911 Foreground=65280 Style=1
[Identifier] Background=536870911 Foreground=536870911 Style=1
[Reserved word] Background=536870911 Foreground=16711808 Style=1
[Space] Background=536870911 Foreground=536870911 Style=0
[Symbol] Background=536870911 Foreground=536870911 Style=1
[Text] Background=536870911 Foreground=536870911 Style=0
[Unknown word] Background=536870911 Foreground=255 Style=1
[Value] Background=536870911 Foreground=16744448 Style=0 |
Grendel - Mo 20.12.04 18:04
Was ist ein "SynEdit"? und von was ist deine Klasse abgeleitet?
Poste am besten mal den gesamten Quelltext der Highlighter Klasse.
Ich müsste nämlich mal sehen, was beim Zuweisen eines TSynHighlighterAttributes genau passiert.
Und mach bei der Zuweisung mal ein Assign() also
Delphi-Quelltext
1: 2: 3:
| 0: synHLhtml.AndAttri.Assign(SetAttr()); 1: synHLhtml.ASPAttri.Assign(SetAttr()); ... |
Bis neulich ...
StefanH - Mo 20.12.04 18:12
die Klasse ist nicht von mir. und mit Assign gehts auch nicht. und außerdem geht ja alles bis auf das Speichern :twisted:
Grendel - Mo 20.12.04 18:17
Ohne in die Klasse zu gucken kann ich dir leider nicht helfen.
Außerdem wäre noch immer interesant, von welcher Klasse dein Highlighter abgeleitet ist.
Bis neulich ...
Jelzin - Mo 20.12.04 21:36
Die Komponente gibts hier:
http://synedit.sourceforge.net/
Ist im Prinzip ein Memo, das wie ein RichEdit Zeilen farbig darstellt. Viele "Highlighter" sind vordefiniert, um z.B. Delphi-Quelltext entsprechend dem Delphi-Editor farbig anzuzeigen.
Hat wahnsinnig Power die Komponente. Find ich recht gut.
Bei der Gelegenheit verweis ich auch auf meinen Threat, bei meinem Problem konnte mir bis jetzt noch niemand weiterhelfen :cry:
http://www.delphi-forum.de/topic_SynEdit+Lines+Highlighten_33863.html
StefanH - Do 23.12.04 20:41
naja, ich werd das dann wohl doch selbst schreiben :?
Benutzername - Do 23.12.04 22:08
OT:
Zitat: |
Bei der Gelegenheit verweis ich auch auf meinen Threat[...] |
Besser nicht, denn Threat heißt soviel wie 'Drohung' ;-)
Delete - Fr 24.12.04 01:47
Hi,
ich hab mal den von dir geposteten Quelltext ausprobiert und bin zum gleichen Ergebnis gekommen -> die Farben werden nicht abgespeichert!
Deshalb würde ich dir empfehlen das Ganze ein wenig anders, allerdings eigentlich auch praktischer zu machen:
Zuerst würde ich alle Eigenschaften der Highlighter-Komponente automatisch laden lassen, z.B. in eine ListBox (ist es ja in deinem Falle denk ich auch):
Delphi-Quelltext
1: 2: 3: 4:
| var i: Integer; begin for i:=0 to SynEdit1.Highlighter.AttrCount-1 do ListBox1.Items.Add(SynEdit1.Highlighter.Attribute[i].Name); |
Und dann deine Aktualisierungsprozedur, z.B. im OnClick eines Buttons:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.Button1Click(Sender: TObject); var Style: Integer; begin SynEdit1.Highlighter.Attribute[ListBox1.ItemIndex].Foreground:=pVGColor.Color; SynEdit1.Highlighter.Attribute[ListBox1.ItemIndex].Background:=pHGColor.Color;
if (cbBold.Checked) then Style:=1 else Style:=0;
if (cbItalic.Checked) then Style:=Style+2; if (cbUnderline.Checked) then Style:=Style+4; if (cbStrikeOut.Checked) then Style:=Style+8;
SynEdit1.Highlighter.Attribute[ListBox1.ItemIndex].IntegerStyle:=Style; end; |
Wenn du jetzt
SynEdit1.Highlighter.SaveToFile('C:\sonstwas.sonstwo'); aufrufst, müsste alles ohne Probleme funktionieren...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!