Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Text farbig mit Attributen wie fett, kursiv usw. drucken


galagher - Mo 02.03.15 18:25
Titel: Text farbig mit Attributen wie fett, kursiv usw. drucken
Hallo!

Ich möchte mit meinem Editor, der Syntax-Highlighting unterstützt, den Text auch genauso, wie er dargestellt wird, drucken. Ich verwende kein RichEdit, da geht das ja, sondern die Jedi-Komponente TJvWideHLEditor.
Wie kann ich damit den Text farbig, fett, kursiv usw. drucken?


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 02.03.2015 um 22:32


Delete - Di 03.03.15 20:11

Wenn diese Komponente das Wysiwyg-Drucken nicht unterstützt, mußt du das via Drucker-Canvas selber implementieren.


galagher - Di 03.03.15 21:21

user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
Wenn diese Komponente das Wysiwyg-Drucken nicht unterstützt, mußt du das via Drucker-Canvas selber implementieren.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  Printer.BeginDoc;

  Printer.Canvas.Font := aWideHLEditorX.Font;

  for i := 0 to aWideHLEditorX.Lines.Count-1 do
  begin
    Inc(t, Printer.Canvas.Font.Height+2);
    Printer.Canvas.TextOut(10, t,
      aWideHLEditorX.Lines[i]);
  end;

  Printer.EndDoc;

Naja, so und sowas ähnliches habe ich also nun getestet: Das zieht entweder ein leeres Blatt Papier ohne zu Drucken durch oder es wird eben einfach alles in einer Schriftart, ohne Textattribute gedruckt, und mit aWideHLEditorX.Lines.Text alles in einer einzigen Zeile.

Ist mein Ansatz mit Canvas so völlig daneben? Was muss ich machen?


Delete - Di 03.03.15 23:56

Wenn du keine Farben angibst, wird natürlich auch nicht farbig gedruckt. Wie du die Farben für jedes einzelne Zeichen ermittelst, kann ich dir aus Unkenntnis der Komponente nicht wirklich sagen.

Vielleicht kannst du ja den Inhalt in ein RTF-Dokument streamen. Wie gesagt kenne ich die von dir eingesetzte Komponente nicht und kann dir daher auch nicht wirklich helfen. Zur Not fragst du mal beim Hersteller nach.


Delete - Mi 04.03.15 12:27

Habe mir die Komponente (ist ja von den Jedis, die hab ich auch) nun doch einmal angeschaut. Die Farben werden erst zur Laufzeit gesetzt, da der Text erst zur Laufzeit geparst wird je nach zugeordnetem Highlighter. Im Gegensatz zum RTF-Text sind im Text dieser Highlighter-Komponente keine Formatierungsangeben verfügbar. Daher kannst du das auch nicht farbig drucken.

Ob eine Highlighter-Komponente überhaupt zum Drucken vorgesehen ist, weiß ich nicht, habe das noch nie ausprobiert.

Vielleicht kann ja SynEdit das, was du suchst. Du findest es entweder bei Sourceforge [http://sourceforge.net/projects/synedit/] oder bei Github [https://github.com/SynEdit/SynEdit].


galagher - Mi 04.03.15 17:58

user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
Die Farben werden erst zur Laufzeit gesetzt, da der Text erst zur Laufzeit geparst wird je nach zugeordnetem Highlighter. Im Gegensatz zum RTF-Text sind im Text dieser Highlighter-Komponente keine Formatierungsangeben verfügbar. Daher kannst du das auch nicht farbig drucken.
Ich dachte mir, die Farben sind vor dem Drucken ja schon gesetzt, also kann man sie auch genau so drucken...

user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
Ob eine Highlighter-Komponente überhaupt zum Drucken vorgesehen ist, weiß ich nicht, habe das noch nie ausprobiert.
Mit AssignPrn, Rewrite und Writeln geht es, ja, aber eben nur schwarz.

Und: Die Delphi-IDE bietet sogar an, den Quellcode mit Syntaxhervorhebung zu drucken, also grundsätzlich funktionieren muss es doch!

Aber alles auf SynEdit umstellen möchte ich nicht, dann bleibt's eben so!


Delete - Mi 04.03.15 20:40

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
Die Farben werden erst zur Laufzeit gesetzt, da der Text erst zur Laufzeit geparst wird je nach zugeordnetem Highlighter. Im Gegensatz zum RTF-Text sind im Text dieser Highlighter-Komponente keine Formatierungsangeben verfügbar. Daher kannst du das auch nicht farbig drucken.
Ich dachte mir, die Farben sind vor dem Drucken ja schon gesetzt, also kann man sie auch genau so drucken...

Es kommt darauf an, wie die Farben gesetzt sind. Im Unterschied z.B. zu RTF werden hier in der Eigenschaft Lines keine Formatanweisungen (wozu auch z.B. fett und farbig gehören) gespeichert. Soweit ich das gesehen habe, werden die Farben von der Komponente beim Parsen des Textes gesetzt.

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
Ob eine Highlighter-Komponente überhaupt zum Drucken vorgesehen ist, weiß ich nicht, habe das noch nie ausprobiert.
Mit AssignPrn, Rewrite und Writeln geht es, ja, aber eben nur schwarz.

Natürlich nur schwarz, weil diese Komponente keine Druckausgabe hat, die etwas anderes ermöglicht.

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Und: Die Delphi-IDE bietet sogar an, den Quellcode mit Syntaxhervorhebung zu drucken, also grundsätzlich funktionieren muss es doch!

Ich bezweifle, daß die Delphi-IDE mit dieser Komponente gestrickt wurde ...

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Aber alles auf SynEdit umstellen möchte ich nicht, dann bleibt's eben so!

Das mußt du selber wissen ... Ich habe bislang noch nie irgend einen Highlight-Text aus einer meiner Anwendungen heraus drucken müssen, daher kann ich dir nichts weiter dazu sagen.


galagher - Do 05.03.15 18:11

user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
Natürlich nur schwarz, weil diese Komponente keine Druckausgabe hat, die etwas anderes ermöglicht.
Ja, so ist es...

user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
Ich bezweifle, daß die Delphi-IDE mit dieser Komponente gestrickt wurde ...
Sicherlich nicht, so meinte ich es auch nicht!

user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe bislang noch nie irgend einen Highlight-Text aus einer meiner Anwendungen heraus drucken müssen,
Musste ich auch noch nicht, und brauchen werde ich das sicher auch nie! Ich dachte einfach, wäre schön, wenn man es hinbekommt, aber ich kann gut damit leben, wenn nicht!