Ein paar von euch haben ja schon mitbekommen, dass ich seit einiger Zeit an einem aufgebohrten RichEdit-Control arbeite. Hier schon mal ein Ergebnis vorab:
TRtfLabel
Ein Label zur Darstellung von RTF-Text.
Das Ding
- kann alle Features von RichEdit 3.0 bzw. 4.1 darstellen
- kann in das RTF eingebettete Bilder und OLE-Objekte darstellen
- unterstützt einen transparenten Hintergrund
- kann von 2% bis 6400% zoomen (update 1.3)
- kann seine Größe automatisch an den Inhalt anpassen
- hat kein Fensterhandle, ist also ein Nachfahr von "TControl"
- bietet keine Editier-Funktionalität, es dient ausschließlich der Anzeige
- bietet über die ITextDocument-Schnittstelle die Möglichkeit, den Inhalt programmiert zu verändern (update)
Hier findet ihr Screenshots einer der Beispielanwendung (75 KiB) - man sieht oben den RTF-Quelltext, der an "Caption" zuweisen wurde, und unten das Ergebnis.
Auch ganz einfacher RTF-Quelltext ist möglich.
Der Text "{\rtf1{Hier ist \b ein\b0 \ul Wort\ul0 unterstrichen.}}" ergibt "Hier ist
ein Wort unterstrichen."
Zusätzlich gibt's noch eine
Unit mit der Funktion
DrawRtfText, mit der man formatierten Text in einen Canvas ausgeben kann (ähnlich wie DrawText).
(update 1.3)
Internes
Im Paket mit drin sind auch die aktuellen Übersetzungen der RichEdit-
API-Header richedit.h (inkl. Korrekturen und Erweiterungen), richole.h, TOM.h, TextServ.h. Außerdem noch ein allgemeiner Wrapper für Interfaces von "thiscall" nach "stdcall" und zurück sowie eine rudimentäre Delphi-Implementierung von ITextHost.
Das war eigentlich der größte Teil der Arbeit - sieht man auch sofort daran, dass RtfLabel.pas selbst nur etwa
600 650 720 Zeilen hat
.
Testen / Installieren
Das Verzeichnis mit den Projektdateien (nicht den Beispielanwendungen) müsst ihr in euren
Suchpfad Bibliothekspfad aufnehmen.
Danach könnt ihr die Beispielanwendungen direkt übersetzen (Win32), da die Komponente dynamisch erzeugt wird.
Für die Installation sucht einfach ein Package eurer Wahl und fügt "RtfLabel.pas" hinzu (dann Installieren bzw. Aktualisieren). Zusätzlich könnt ihr die Datei "RtfLabel_Caption_Editor.pas" einem Entwurfszeitpackage hinzufügen - dann habt ihr einen Editor für die Eigenschaft Caption. (update 1.3)
Zur Installation öffnet ihr einfach das
Package "RtfLabel_D#.dpk" für eure Delphi-Version und installiert dies. Für Delphi-Versionen ab 7 ist dies immer dasselbe
Package (da sich darin nichts geändert hat).
(update 1.3c)
Für Delphi 3 müsst ihr vorher in den drei Dateien "RichEdit2.pas", "RichOle.pas" und "TextServ.pas" noch den Text "{$EXTERNALSYM" durch "//{$EXTERNALSYM" ersetzen, da Delphi 3 dieses Feature noch nicht unterstützt.
Zusätzlich könnt ihr noch das
Package "RtfLabel_D#D.dpk" installieren (derselbe Name nur mit einem "D" am Ende), dann habt ihr einen Editor für die Eigenschaft "Caption".
(update 1.3b)
Ich freue mich auf eure Kommentare, Anmerkungen und Anregungen.
P.S.: bitte keine Anfragen nach der Editierfunktionalität - das "große" TRichEdit3 ist noch in Arbeit und wird all das unterstützen.
14.04.2006: Update auf die Version 1.1- Kleinen Bug korrigiert, der bei gleichzeitiger Benutzung von WordWrap und AutoSize mit Texten, die nach rechts ausgerichtete Absätze enthielten zu einer Endlosschleife führte.
- Diverse kosmetische Korrekturen.
19.08.2006: Update auf die Version 1.3- Bug bei der Darstellung von Bildern/Objekten auf älteren Systemen bereinigt
- Zooming eingebaut
- Funktion "DrawRtfText" eingebaut
- Property-Editor für TRtfEdit.Caption
27.02.2007: Update auf die Version 1.3b- Parametertypen von "DrawRichText" geändert.
- Support für Delphi 3, 5 und 6 hinzugefügt, für Delphi 3 nochmal Dank an Lannes für seine Vorarbeit.
Delphi 3 benötigt einen kleinen manuellen Eingriff (die $EXTERNALSYM-Dinger müssen in drei Dateien mit "Suchen und Ersetzen" geändert werden), läuft dann aber ohne Schwierigkeiten.
- Packages für die einfache Installation hinzugefügt.
01.03.2007: Update auf die Version 1.3c- Jetzt mit vollständigem Support für Delphi 3 und 4, es sollte jetzt also mit allen Version ab Delphi 3 funktionieren