|
<< Нажмите, чтобы показать Содержание >> TCustomRVPrint.OnPrintComponent |
Возникает при печати вставленного в документ компонента.
property OnPrintComponent: TRVPrintComponentEvent;
TRVPrintComponentEvent = procedure(Sender: TCustomRVPrint;
PrintMe: TControl; var ComponentImage: TBitmap) of object;
Если вас не устраивает, как ТРВ-Редактор печатает компоненты некоторых классов, вы можете самостоятельно формировать их изображение для печати.
Это событие запрашивает изображение компонента в виде растрового изображения с экранным разрешением.
Входные параметры:
PrintMe – компонент, который нужно напечатать.
ComponentImage – nil.
Выходной параметр:
ComponentImage – изображение PrintMe. В обработчике этого события необходимо создать этот объект TBitmap. Самостоятельно уничтожать его не нужно – это сделает TCustomRVPrint.
Создайте растровое изображение с шириной и высотой PrintMe. Можно вернуть изображение большего размера – оно будет масштабировано, что позволяет получить более качественный результат при печати.
В модуле CtrlImage есть несколько методов для создания растровых изображений компонентов: DrawControl и другие. Компонент использует их для печати компонентов по умолчанию.
Пример:
procedure MyForm.MyRVPrintPrintComponent(Sender: TCustomRVPrint;
PrintMe: TControl; var ComponentImage: TBitmap);
var r: TRect;
State: Cardinal
begin
if PrintMe is TImage then
begin
// печать TImage
ComponentImage := TBitmap.Create;
ComponentImage.Assign(TImage(PrintMe).Picture.Graphic);
end
else if PrintMe is TCheckBox then
begin
// печать TCheckBox
ComponentImage := TBitmap.Create;
ComponentImage.Width := PrintMe.Width;
ComponentImage.Height := PrintMe.Height;
ComponentImage.Canvas.Brush.Color := TCheckBox(PrintMe).Color;
r := Rect(0,0, PrintMe.Width, PrintMe.Height);
ComponentImage.Canvas.FillRect(r);
if TCheckBox(PrintMe).Checked then
State := DFCS_CHECKED
else
State := 0;
r.Right := r.Bottom;
DrawFrameControl(ComponentImage.Canvas.Handle, r, DFC_BUTTON,
DFCS_BUTTONCHECK or State);
r := Rect(r.Right,0, PrintMe.Width, PrintMe.Height);
ComponentImage.Canvas.Font := TCheckBox(PrintMe).Font;
DrawText(ComponentImage.Canvas.Handle,
PChar(' '+TCheckBox(PrintMe).Caption), -1, r,
DT_VCENTER or DT_SINGLELINE);
end
else
// печать остальных компонентов
ComponentImage := DrawControl(PrintMe)
end;
В TRVPrint это событие вызывается методами:
▪Print;
▪при рисовании компонента TRVPrintPreview.