Autor Beitrag
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: 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:

user defined image

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Di 17.06.14 12:48 
user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconWasWeißDennIch hat folgendes geschrieben Zum zitierten Posting springen:
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



BeitragVerfasst: Di 17.06.14 12:55 
user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 17.06.14 13:10 
user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Di 17.06.14 18:54 
user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
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.

Man kann den Text auch zur Laufzeit des Programms zusammensetzen. Beispiel:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
      RichEdit.Clear;
      // Bei RichEdit.Lines.Add wirkt sich SelAttributes immer auf die komplette
      // Zeile aus.
      RichEdit.SelAttributes.Style := [fsUnderline];
      RichEdit.Lines.Add('Seriennummer:');
      RichEdit.SelAttributes.Style := [];
      RichEdit.Lines.Add('');
      RichEdit.SelAttributes.Color := clRed;
      RichEdit.Lines.Add('XXXX');
      // Soll sich das nicht auf eine komplette Zeile auswirken, dann ist der Text
      // mit "RichEdit.SelText" zu setzen.
      RichEdit.SelAttributes.Style := [fsBold, fsUnderline];
      RichEdit.SelAttributes.Name := 'Arial Narrow';
      RichEdit.SelAttributes.Size := 18;
      RichEdit.SelAttributes.Color := clLime;
      RichEdit.SelText := 'Beispiel:';
      RichEdit.SelAttributes.Style := [fsBold, fsUnderline];
      RichEdit.SelAttributes.Name := 'Courier New';
      RichEdit.SelAttributes.Size := 10;
      RichEdit.SelAttributes.Color := clRed;
      RichEdit.SelAttributes.Style := [fsItalic];
      RichEdit.SelText := ' Text in roter Farbe.';
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 17.06.14 19:40 
user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
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 :roll:
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Di 17.06.14 20:35 
user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
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 :roll:


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:

ausblenden volle Höhe Quelltext
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



BeitragVerfasst: 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.

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: 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.

ausblenden 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



BeitragVerfasst: Di 17.06.14 21:20 
user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
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?

user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Di 17.06.14 22:04 
user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
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 ;)