TCustomRVPrint.OnPrintComponent

<< Нажмите, чтобы показать Содержание >>

TCustomRVPrint.OnPrintComponent

Возникает при печати вставленного в документ компонента.

property OnPrintComponent: TRVPrintComponentEvent;

 

TRVPrintComponentEvent = procedure(Sender: TCustomRVPrint;

  PrintMe: TControl; var ComponentImage: TBitmap) of object;

Если вас не устраивает, как ТРВ-Редактор печатает компоненты некоторых классов, вы можете самостоятельно формировать их изображение для печати.

Это событие запрашивает изображение компонента в виде растрового изображения с экранным разрешением.

Входные параметры:

PrintMe – компонент, который нужно напечатать.

ComponentImagenil.

Выходной параметр:

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;

PrintPages;

MakePreview;

MakeScaledPreview;

DrawPreview;

при рисовании компонента TRVPrintPreview.