|
<< Нажмите, чтобы показать Содержание >> TFontInfo.Draw |
Рисует строку s на канве Canvas.
procedure Draw(const s: TRVUnicodeString; Canvas: TCanvas;
ThisStyleNo: Integer; SpaceAtLeft, Left, Top, Width, Height
{$IFDEF RVUSEBASELINE}
,BaseLine
{$ELSE}
{$IFDEF RVHIGHFONTS}
,DrawOffsY
{$ENDIF}
{$ENDIF}: TRVCoord;
TextWidth: TRVCoord; SpaceCount: Integer;
RVStyle: TRVStyle;
DrawState: TRVTextDrawStates;
Printing, PreviewCorrection, ForMetafile: Boolean;
ColorMode: TRVColorMode; DarkMode: Boolean;
DefBiDiMode: TRVBiDiMode;
RefCanvas: TCanvas; GraphicInterface: TRVGraphicInterface;
LeftNoExpIndex, RightNoExpIndex: Integer;
PSaD: PRVScreenAndDevice; AControl: TControl = nil);
Обычно эта процедура вызывается из события TRVStyle.OnDrawStyleTex. Достаточно передать этому методу все параметры данного события. Параметры, которых нет в OnDrawStyleText, отмечены знаком *.
Метод предполагает, что на Canvas уже применены правильные настройки – шрифт, цвета, межсимвольный интервал и т. д.
Параметры:
s – строка для рисования.
Canvas – канва для рисования.
ThisStyleNo – должен быть равен номеру этого текстового стиля в RVStyle.TextStyles.
SpaceAtLeft – расстояние от Left до начала текста. Должно быть равно 0, если только в RV_Defs.inc не определён RVOLDJUSTIFY.
Left, Top, Width, Height – прямоугольник, в котором должен быть нарисован текст.
BaseLine – координата Y базовой линии текста. Этот параметр существует только в том случае, если в RV_Defs.inc определён RVUSEBASELINE; при этом выравнивание текста на Canvas должно включать TA_BASELINE.
DrawOffsY – этот параметр существует только в том случае, если определён RVHIGHFONTS, а RVUSEBASELINE не определён в RV_Defs.inc. В этом случае верх текста рисуется в позиции Top + DrawOffsY.
TextWidth – ширина строки s. Этот параметр используется только если SpaceCount <> 0. Если PreviewCorrection = True, параметр игнорируется – ширина текста пересчитывается перед рисованием.
SpaceCount:
▪если равно 0, текст рисуется как есть, если только PreviewCorrection не равно True;
▪если значение положительное, оно должно быть равно количеству пробелов в s; в этом случае величина Width - SpaceAtLeft - TextWidth распределяется между пробелами;
▪если равно -100, величина Width - SpaceAtLeft - TextWidth распределяется между всеми символами в s, которые допускают растяжение.
RVStyle* – компонент TRVStyle, содержащий этот текстовый стиль.
Printing – True, если текст рисуется при печати или предварительном просмотре.
PreviewCorrection – True, если текст рисуется при предварительном просмотре и TRVPrint.PreviewCorrection = True. В этом случае строка s подгоняется по ширине Width - SpaceLeft путём изменения межсимвольного интервала. Этот параметр игнорируется, если Canvas <> RefCanvas.
ForMetafile – True, если рисование должно быть совместимо с метафайлами.
ColorMode позволяет печатать текст в чёрно-белом режиме, хотя цвета уже должны быть назначены Canvas.
DarkMode – если True, яркость цветов инвертируется.
DefBiDiMode – режим двунаправленного текста абзаца, содержащего этот текст.
RefCanvas – канва, используемая для измерения текста:
▪при рисовании в TRichView, TRichViewEdit, TRVReportHelper, TRVPrint должна быть равна Canvas;
▪при рисовании в TSRichViewEdit (из СРВ-Редактора (ScaleRichView)) должна быть равна канве, возвращаемой SRichViewEdit.RichViewEdit.RVData.GetScaleRichViewInterface.GetFormatCanvas.
GraphicInterface* – RVStyle.GraphicInterface.
LeftNoExpIndex, RightNoExpIndex используются, если SpaceCount = -100. Если их значения неотрицательны, они задают номера символов в s (начиная с 0), которые не должны растягиваться.
PSaD – указатель на запись, используемую для преобразования между значениями TRVStyleLength и пикселями устройства. При рисовании на экране может быть равен nil. Этот параметр необходим для правильного применения CharSpacing.
AControl – редактор, в котором рисуется этот текст. Этот параметр необязателен. Он необходим только в VCL для Delphi 10.4 и новее, если ColorMode = rvcmVCLThemeColor и у редактора задано свойство StyleName. Параметр позволяет выбрать тему VCL, назначенную именно этому редактору, вместо глобальной темы VCL.