Difference between revisions of "RichMemo"
m (→LoadRichText) |
|||
Line 125: | Line 125: | ||
The method changes font parameters in the specified range. | The method changes font parameters in the specified range. | ||
+ | |||
+ | ===GetParaAlignment=== | ||
+ | Gets paragraph alignment | ||
+ | <syntaxhighlight>function GetParaAlignment(TextStart: Integer; var AAlign: TParaAlignment): Boolean; </syntaxhighlight> | ||
+ | * TextStart - the position of the character that's belongs to the paragraph | ||
+ | * AAlign - gets alignment of a paragraph. | ||
+ | '''Note''': | ||
+ | * Win32 - full-width Justification doesn't work on Windows XP and earlier. | ||
+ | * OSX - due to Carbon limitation, this is not working in Carbon, but works for Cocoa widgetset. | ||
+ | ===SetParaAlignment=== | ||
+ | Sets paragraph alignent | ||
+ | <syntaxhighlight>procedure SetParaAlignment(TextStart, TextLen: Integer; AAlign: TParaAlignment); </syntaxhighlight> | ||
+ | '''Note''': | ||
+ | * Win32 - full-width Justification doesn't work on Windows XP and earlier. | ||
+ | * OSX - due to Carbon limitation, this is not working in Carbon, but works for Cocoa widgetset. | ||
+ | ===GetParaMetric=== | ||
+ | Returns paragraph metrics for a given paragraph | ||
+ | <syntaxhighlight>function GetParaMetric(TextStart: Integer; var AMetric: TParaMetric): Boolean; </syntaxhighlight> | ||
+ | |||
+ | ===SetParaMetric=== | ||
+ | <syntaxhighlight>procedure SetParaMetric(TextStart, TextLen: Integer; const AMetric: TParaMetric); </syntaxhighlight> | ||
=== LoadRichText === | === LoadRichText === |
Revision as of 15:52, 21 November 2014
About
TRichMemo is a component to replace Delphi TRichEdit component. It's designed in cross-platform way, so implementation is possible for the following platforms: Win32, MacOSX, Linux. Since, being a cross-platform is the primary, most of windows RichEdit features are replaced, making RichMemo not compatible with Delphi's VCL or RX RichEdits.
Its main caracteristics are :
- Text highlight
- Import/Export RichText (not yet implemented)
- System based Unicode edit support
Planned: (patches are welcomed)
- Adding images into text
- Embedding LCL Controls?
The download contains the component, an installation package and a demo application, that illustrates the features of the component along with some instrumentation for evaluating the chart on a given system.
Screenshot
Bug reporting
Please add your Bugreports/Feature requests in Lazarus CCR project of the Lazarus bug tracker.
Author
Dmitry 'skalogryz' Boyarintsev
License
modified LGPL (same as the FPC RTL and the Lazarus LCL). You can contact the author if the modified LGPL doesn't work with your project licensing.
Download
Releases can be found at Sourceforge Lazarus-CCR project
The latest trunk is available here: https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/richmemo
note: Currently it's recommended to use the svn version. [1]
Change Log
- Version 1.0.0 22th Jun 2009
- Version 0.8.0 Jun 2009
Dependencies / System Requirements
- Lazarus 0.9.27
Status: 'Beta'
Issues:
Tested only on:
- XP 32-bit, Vista 32-bit,Vista 64-bit, Win7 32-bit
- Intel 10.5.7 Leopard
Installation
- Download the package
- Open the package, and install it, rebuilding the IDE
- TRichMemo is added to 'Common Controls' component page.
TRichMemo
methods
SetTextAttributes
procedure SetTextAttributes(TextStart, TextLen: Integer; AFont: TFont);
- TextStart : Integer - the first character to be modified
- TextLen : Integer - number of characters to be modified
- AFont : TFont - a font that should be applied to the part of the text
procedure SetTextAttributes(TextStart, TextLen: Integer; const TextParams: TFontParams);
- TextStart : Integer - the first character to be modified
- TextLen : Integer - number of characters to be modified
- TextParams : TFontParams - font parameters to be set
SetTextureAttributes methods are changing specified text range style. Font parameters is passed in both methods, by AFont parameter (LCL TFont object) or by TFontParams (declared at RichMemo).
Setting text attributes does not change current selection. If it's necessary to modify the style of currently selected text, you should SelStart and SelLength as a text range values:
RichMemo1.SetTextAttributes(RichMemo1.SelStart, RichMemo1.SelLength, FontDialog1.Font);
GetTextAttributes
function GetTextAttributes(TextStart: Integer; var TextParams: TFontParams): Boolean; virtual;
- TextStart : Integer - the character position to be queried for font parameters
- var TextParams : TFontParams - output value, filled with charachter's font attributes. If the method fails and returns false, record's field values is undefined.
Fill font params of the character, at TextStart position. Method returns True if textstart is valid character position, and False overwise.
GetStyleRange
function GetStyleRange(CharPos: Integer; var RangeStart, RangeLen: Integer): Boolean; virtual;
Returns a range of characters that share the same font parameters, i.e. all characters in the range has the same font name, size, color and styles.
- CharPos : Integer - a character that belongs to the style range. It's not necessary for this position to be at the begining on the style range. It can be in the middle on in the end of the style range. The first character position is returned by RangeStart parameter.
- var RangeStart : Integer - the first character in the range
- var RangeLen : Integer - number of characthers in the range
The method returns true if successed. the method returns false, if CharPos is incorrect value or some other error.
SetRangeColor
procedure SetRangeColor(TextStart, TextLength: Integer; FontColor: TColor);
The method sets color of characters in the specified range to the FontColor. Other font parameters (name, size, styles) are left unchanged.
- TextStart: Integer - the first character in the range
- TextLength: Integer - number of characters in the range
- FontColor: TColor - color that should be set
SetRangeParams
procedure SetRangeParams(TextStart, TextLength: Integer;
ModifyMask: TTextModifyMask; const FontName: String;
FontSize: Integer; FontColor: TColor;
AddFontStyle, RemoveFontStyle: TFontStyles);
The method changes font parameters in the specified range.
GetParaAlignment
Gets paragraph alignment
function GetParaAlignment(TextStart: Integer; var AAlign: TParaAlignment): Boolean;
- TextStart - the position of the character that's belongs to the paragraph
- AAlign - gets alignment of a paragraph.
Note:
- Win32 - full-width Justification doesn't work on Windows XP and earlier.
- OSX - due to Carbon limitation, this is not working in Carbon, but works for Cocoa widgetset.
SetParaAlignment
Sets paragraph alignent
procedure SetParaAlignment(TextStart, TextLen: Integer; AAlign: TParaAlignment);
Note:
- Win32 - full-width Justification doesn't work on Windows XP and earlier.
- OSX - due to Carbon limitation, this is not working in Carbon, but works for Cocoa widgetset.
GetParaMetric
Returns paragraph metrics for a given paragraph
function GetParaMetric(TextStart: Integer; var AMetric: TParaMetric): Boolean;
SetParaMetric
procedure SetParaMetric(TextStart, TextLen: Integer; const AMetric: TParaMetric);
LoadRichText
function LoadRichText(Source: TStream): Boolean; virtual;
- Source: TStream - a stream to read richtext data from
The method loads RTF enocded data from the specified stream. Returns true if success, and false otherwise. If source is nil, the method returns false
The content of TRichMemo is completely replaced by the content on the source stream. Current text selection is reset.
SaveRichText
function SaveRichText(Dest: TStream): Boolean; virtual;
- Source: TStream - a stream to read richtext data from
The method saves RTF enocded data to the specified stream. Returns true if success, and false otherwise. If source is nil, the method returns false
Current state of TRichMemo is unchanged after the method returns
properties
HideSelection
property HideSelection: Boolean default false
Read/Write property. If True RichMemo selection is hidden if the control is not focused. If False, the selection is shown all the time.
TRichEditForMemo
The class helper that implements RichEdit programmatic interface. The helper is declared at RichEditHelpers unit, so you have to add it to the uses section. Helpers are available in FPC 2.6.0 or later.
methods
FindText
Searches a given range in the text for a target string
properties
SelAttributes
Reads/Modifies character attributes of the current selection.
Paragraph
Reads/Modifies paragraph attributes of the current selection.
RichMemoUtilities
The unit is introduced to add some useful OS-specific features for handling working with RichMemo
InsertImageFromFile
function InsertImageFromFile (const ARichMemo: TCustomRichMemo; APos: Integer; const FileNameUTF8: string; const AImgSize: TSize ): Boolean = nil;
Disclaimer: the function would insert an image file into RichMemo (if implemented by the widgetset) But in a very inefficient way. The image would be read again and the memory would be re-allocated for the image every time. So please, don't use it for smileys in your chat instant messaging. A better API (with data caching) is considered. (That's why this method is not part of TCustomRichMemo class).
- APos - position in the text
- AImgSize - size to be inserted in POINTS, not pixels!. If both cx and cy are 0, the image would not be resized at all. If only one cx, cy is zero results are undefined
Installation
Download the packageGet the latest version from SVN- Open the package, and install it, rebuilding the IDE
- TRichMemo is added to 'Common Controls' component page.
Frequently Asked Questions
Issue #17412 If you need to use the component in a shared library, you might need to add -fPIC key to the compiler option of "the package" and the "project".
(Delphi) RichEdit like interface
Issue #14632 A typical problem is porting an existing code that's using RichEdit from Delphi. RichMemo interface doesn't match RichEdit in many ways. But there're two ways to handle that:
- you can either create a sub-class from TCustomRichMemo (or RichMemo) and implement Delphi RichEdit methods;
- you can use RichMemoHelpers unit (fpc 2.6.0 or later required) and use methods provided by class Helpers that should; Currently SelAttributes and Paragraph properties are implemented.
uses ... RichMemo, RichMemoHelpers; TForm = class RichMemo1 : TRichMemo; // SelAttributes property is not available in the base class // but added by a helper defined at RichMemoHelpers unit RichMemo1.SelAttributes.Name := 'Courier New';
See Also
MyNotex application which uses modified by Massimo Nardello RichMemo package on Linux-Gtk2