Autor |
Beitrag |
trm
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Di 17.06.14 00:32
Huhu.
Gibt eine Standardkomponente, um verschiedene Schriftstile/Schriftarten innerhalb eines Satzes anzeigen zu lassen und ohne, dass es ein RichEdit ist?
Hier mal ein Beispiel, was ich meine:

_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 17.06.14 06:31
Meiner Kenntnis nach sind alle entsprechenden Komponenten von TMemo bzw. TRichEdit abgeleitet. Was spricht denn gegen dein Einsatz von TRichEdit?
|
|
WasWeißDennIch
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Di 17.06.14 08:28
Im Netz gibt es div. HTMLLabels zu finden, sowohl kostenlose als auch kostenpflichtige (willkürlich gewählte Beispiele), damit dürfte so etwas auch zu realisieren sein.
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Di 17.06.14 12:48
Perlsau hat folgendes geschrieben : | Meiner Kenntnis nach sind alle entsprechenden Komponenten von TMemo bzw. TRichEdit abgeleitet. Was spricht denn gegen dein Einsatz von TRichEdit? |
Ich wollte vermeiden, extra ein RTF Dokument nachladen oder per Resource einbinden zu müssen.
Den Quelltext eines RTF (Steuercodes incl. Text) habe ich versucht direkt in Lines einzubinden, der wird aber nicht formatiert übernommen. Es steht dann der Quelltext vom RTF da drin.
WasWeißDennIch hat folgendes geschrieben : | Im Netz gibt es div. HTMLLabels zu finden, sowohl kostenlose als auch kostenpflichtige (willkürlich gewählte Beispiele), damit dürfte so etwas auch zu realisieren sein. |
Vielen Dank für den Hinweis, ich hatte jedoch die Hoffnung, dies mit Standardkomponenten aus der Palette von Delphi erreichen zu können.
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 17.06.14 12:55
trm hat folgendes geschrieben : | Ich wollte vermeiden, extra ein RTF Dokument nachladen oder per Resource einbinden zu müssen. Den Quelltext eines RTF (Steuercodes incl. Text) habe ich versucht direkt in Lines einzubinden, der wird aber nicht formatiert übernommen. Es steht dann der Quelltext vom RTF da drin. |
Jetzt wird manches klarer: Du hast einen festen vorformatierten (incl. Farben?) Text, den du anzeigen möchtest. Mir ist noch immer nicht klar, worin jetzt der Vorteil einer anderen Komponente gegenüber TRichEdit liegen soll. Der Text, den du benötigst, soll ja weder von Datei noch von einer Ressource kommen. Woher soll er aber dann kommen?
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 17.06.14 13:10
trm hat folgendes geschrieben : | Vielen Dank für den Hinweis, ich hatte jedoch die Hoffnung, dies mit Standardkomponenten aus der Palette von Delphi erreichen zu können. |
In der JVCL gibt es so etwas auch. Die zähle ich im Grunde zu den Standardkomponenten, auch wenn ich nicht besonders viele davon tatsächlich benutze. Die ist aber in der Standardinstallationsroutine bei mir privat genauso dabei wie im Büro.
Bei TV-Browser war das aber ein RichEdit, wenn ich mich recht entsinne.
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Di 17.06.14 18:54
|
|
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 17.06.14 19:40
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Di 17.06.14 20:35
Perlsau hat folgendes geschrieben : | Gerd Kayser hat folgendes geschrieben : | Man kann den Text auch zur Laufzeit des Programms zusammensetzen. Beispiel: |
Das rangiert bei mir unter "Ressource", auch wenn man dafür keinen Ressource-Editor benötigt  |
Dem stimme ich zu, außerdem ist es mir zu aufwändig zu ändern.
Hier mal ein Beispiel, was ich in Lines reinschreiben könnte:
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:
| {\rtf1\ansi\deff3\adeflang1025 {\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset0 Liberation Serif{\*\falt Times New Roman};}{\f4\fswiss\fprq2\fcharset0 Liberation Sans{\*\falt Arial};}{\f5\fswiss\fprq2\fcharset1 Arial;}{\f6\fnil\fprq2\fcharset0 Microsoft YaHei;}{\f7\fnil\fprq2\fcharset0 Mangal;}{\f8\fnil\fprq0\fcharset1 Mangal;}} {\colortbl;\red0\green0\blue0;\red0\green0\blue128;\red128\green128\blue128;} {\stylesheet{\s0\snext0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af9\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1031 Normal;} {\*\cs15\snext15\cf2\ul\ulc0\langfe255\alang255\lang255 Internetlink;} {\s16\sbasedon0\snext17\sb240\sa120\keepn\dbch\af6\dbch\af7\afs28\loch\f4\fs28 \u220\'dcberschrift;} {\s17\sbasedon0\snext17\sl288\slmult1\sb0\sa140 Textk\u246\'f6rper;} {\s18\sbasedon17\snext18\sl288\slmult1\sb0\sa140\dbch\af8 Liste;} {\s19\sbasedon0\snext19\sb120\sa120\noline\i\dbch\af8\afs24\ai\fs24 Beschriftung;} {\s20\sbasedon0\snext20\noline\dbch\af8 Verzeichnis;} }{\info{\creatim\yr2014\mo6\dy17\hr20\min27}{\revtim\yr0\mo0\dy0\hr0\min0}{\printim\yr0\mo0\dy0\hr0\min0}{\comment LibreOffice}{\vern67240962}}\deftab709 \viewscale100 {\*\pgdsctbl {\pgdsc0\pgdscuse451\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\pgdscnxt0 Standard;}} \formshade\paperh16838\paperw11906\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\sectunlocked1\pgndec\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc \pgndec\pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af9\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1031{\cf2\b\afs48\ab\rtlch \ltrch\loch\fs48\loch\f5 Das ist einfach nur ein Beispiel.} \par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af9\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1031\rtlch \ltrch\loch\loch\f5
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af9\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1031{\rtlch \ltrch\loch\loch\f5 Oben die Schrift ist sch\u246\'f6n blau und fett, ich bin es mangels Alkohol zum Gl\u252\'fcck nie.} \par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af9\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1031\rtlch \ltrch\loch\loch\f5
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af9\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1031{\ul\ulc0\rtlch \ltrch\loch\loch\f5 Lorem ipsum blah blah...} \par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af9\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1031\rtlch \ltrch\loch\loch\f5
\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af9\langfe2052\dbch\af7\afs24\alang1081\loch\f3\fs24\lang1031{\rtlch \ltrch\loch\loch\f5 Falls gew\u252\'fcnscht, hier noch eine kleine URL: }{{\field{\*\fldinst HYPERLINK "http://www.entwickler-ecke.de/viewtopic.php?p=687420" }{\fldrslt \cf2\ul\ulc0\langfe255\alang255\lang255\rtlch \ltrch\loch\loch\f5 Dieser Thread}}} \par } |
Im Anhang die originale RTF-Datei, erstellt mit Libre Office.
Das lustigste an der ganzen Sache ist, wenn ich den Inhalt des Libreoffice-Textes, also aus Libreoffice heraus in das Richedit kopiere, wird es im Editor korrekt formatiert angezeigt. Wenn ich dann auf OK drücke, ist es nur noch unformatierter Text.
Und den Code oben rein zu schreiben bringt auch nichts.
Einloggen, um Attachments anzusehen!
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 17.06.14 20:55
Binde doch einfach deine RichText-Datei in die Ressourcen-Datei ein und lade sie beim Programmstart in deine RichEdit-Komponente. Allerdings kann das normale TRichEdit nicht ohne weiteres Links darstellen. Dazu verwende ich stets das TjvRichEdit aus den Jedi-Komponenten. Der Link ist da jedoch nicht maskiert, d.h. er wird nur ausgeschriebne dargestellt.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| Procedure TForm1.ShowRichText; Var Strom : TResourceStream; Ergebnis : String;
begin Strom := TResourceStream.Create(HInstance, 'RTFtext', RT_RCDATA); Try SetLength(Ergebnis, Strom.Size); Strom.ReadBuffer(Ergebnis[1], Strom.Size); RichEd.Text := Ergebnis; Finally Strom.Free; End; end;
procedure TForm1.FormShow(Sender: TObject); begin ShowRichText; end; |
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Di 17.06.14 21:17
So, nach etlichem Herumprobieren mache ich es nun ganz anders.
Den Quelltext des RTF habe ich in ein Memo rein kopiert, während Erzeugung der Form kopiere ich den Inhalt per Stream ins RichEdit. Dann wird es korrekt dargestellt.
Warum das so herum klappt und nicht, indem man den Quelltext direkt eingibt, ist mir ein echtes Rätsel.
Danke an alle Ideengeber.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.FormShow(Sender: TObject); var x: Integer; RichEditStream: TMemoryStream; begin
RichEditStream := TMemoryStream.Create; Memo1.Lines.SaveToStream(RichEditStream); RichEditStream.Position := 0; RichEdit1.Lines.LoadFromStream(RichEditStream); RichEditStream.Free; |
Aber Achtung - Das Memo darf nicht auf WordWrap stehen, sonst kommt der Quelltext bei langen Zeilen durcheinander - oder einzelne Stuerzeichen werden falsch interpretiert (?).
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 17.06.14 21:20
trm hat folgendes geschrieben : | Den Quelltext des RTF habe ich in ein Memo rein kopiert, während Erzeugung der Form kopiere ich den Inhalt per Stream ins RichEdit. Dann wird es korrekt dargestellt. |
Warum nochmal eine Anzeige-Komponente, die du gar nicht anzeigen willst? Da wäre doch die Lösung mit der Ressource einfacher, nicht wahr? Aber mach, was du willst, du mußt hier keine Ratschläge annehmen, das steht dir selbstverständlich frei. Sollte es daran liegen, daß du nicht weißt, wie man den Ressourcen-Editor bedient?
trm hat folgendes geschrieben : | Warum das so herum klappt und nicht, indem man den Quelltext direkt eingibt, ist mir ein echtes Rätsel. |
Das ist doch ganz einfach: Du kopierst den Steuerzeilen-Text in Lines, obwohl Lines den reinen Text erwartet. Da werden dann natürlich die Steuerzeichen mit dargestellt.
Nebenbei: Du solltest unbedingt einen Try-Finally-Block verwenden, wenn du Streams erzeugst und freigibst, sonst handelst du dir eventuell ein Speicherleck ein.
Zuletzt bearbeitet von Perlsau am Di 17.06.14 21:27, insgesamt 2-mal bearbeitet
Für diesen Beitrag haben gedankt: trm
|
|
trm 
      
Beiträge: 491
Erhaltene Danke: 19
Windows 7x64
Delphi 7
|
Verfasst: Di 17.06.14 22:04
Perlsau hat folgendes geschrieben : | Da wäre doch die Lösung mit der Ressource einfacher, nicht wahr? Aber mach, was du willst, du mußt hier keine Ratschläge annehmen, das steht dir selbstverständlich frei. Sollte es daran liegen, daß du nicht weißt, wie man den Ressourcen-Editor bedient?
[..]
Nebenbei: Du solltest unbedingt einen Try-Finally-Block verwenden, wenn du Streams erzeugst und freigibst, sonst handelst du dir eventuell ein Speicherleck ein. |
Doch, ich weiß wie ich eine Resource einbinde
Und nein, es ist mir bei diesem RichEdit einfach zu blöd ständig die Resource neu generieren zu müssen (auch wenn ich dafür eine batch erstellen würde) - einfacher für mich ist es, den Text dort hin zu kopieren, wo ich ihn benötige. Außerdem kann ich auf diesem Weg Versionsnummern viel schneller anpassen. Oder Datumsänderungen.
Ja, per Code und Constante ginge das auch. Bin aber zu faul an zwei oder mehr Stellen dies zu ändern, wo ich es einfach schnell in einem Textabschnitt realisieren kann.
Danke für den Hinweis mit dem Try-Finally-Block.
Gruß aus Thüringen
_________________ In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege
|
|
|