RAD Studio VCL Reference
ContentsIndex
PreviousUpNext
TWinControl.PaintTo Method (HDC, Integer, Integer)

Draws the windowed control to a device context.

Pascal
procedure PaintTo(DC: HDC; X: Integer; Y: Integer); overload;
procedure PaintTo(Canvas: TCanvas; X: Integer; Y: Integer); overload;
C++
__fastcall PaintTo(HDC DC, int X, int Y);
__fastcall PaintTo(TCanvas Canvas, int X, int Y);

Call PaintTo to draw the control on a device context. Specify the device context as the value of the DC parameter and specify the X and Y coordinates on the device context where the top-left corner of the windowed control is to be drawn. PaintTo first erases the background of the device context and then paints the control. 

PaintTo is useful for drawing an image of the control into a bitmap DC.

Warning: When using PaintTo to draw on a canvas, you must lock the canvas first (and unlock it after the call to PaintTo. If you do not lock the canvas, Windows calls that occur while the control is painting can cause the canvas to lose its handle.
 

C++ Examples: 

 

{
This example uses a button, a Page Control, and a Print 
dialog box on a form. When the user clicks the button, the 
print dialog is displayed.  The user can select any subset 
of the pages in the page control for printing.  The selected
pages are then printed.  To run this example successfully, 
you must add the Printers unit to the uses clause of your 
unit.  Right click on the PageControl to add at least one 
page to the PageControl.
*/
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  PrintDialog1->Options.Clear();
  PrintDialog1->Options << poPageNums << poSelection;
  PrintDialog1->FromPage = 1;
  PrintDialog1->MinPage = 1;
  PrintDialog1->ToPage = PageControl1->PageCount;
  PrintDialog1->MaxPage = PageControl1->PageCount;
  if (PrintDialog1->Execute())
  {
    int Start, Stop;
    // determine the range the user wants to print
    switch (PrintDialog1->PrintRange)
    {
      case prSelection:
        Start = PageControl1->ActivePage->PageIndex;
        Stop = Start;
        break;
      case prPageNums:
        Start = PrintDialog1->FromPage - 1;
        Stop =  PrintDialog1->ToPage - 1;
        break;
      default:  // prAllPages
        Start = PrintDialog1->MinPage - 1;
        Stop = PrintDialog1->MaxPage - 1;
        break;
    }
    // now, print the pages 
    Printer()->BeginDoc();
    for (int i = Start; i <= Stop; i++)
    {
      PageControl1->Pages[i]->PaintTo(Printer()->Handle, 10, 10);
      if (i != Stop)
        Printer()->NewPage();
    }
    Printer()->EndDoc();
  }
}

 

Delphi Examples: 

{
This example uses a button, a Page Control, and a Print 
dialog box on a form. When the user clicks the button, the 
print dialog is displayed.  The user can select any subset 
of the pages in the page control for printing.  The selected
pages are then printed.  To run this example successfully, 
you must add the Printers unit to the uses clause of your 
unit.  Right click on the PageControl to add at least one 
page to the PageControl.
}
procedure TForm1.Button1Click(Sender:TObject);
var
  I, Start, Stop: Integer;
begin
PrintDialog1.Options := [poPageNums, poSelection];
PrintDialog1.FromPage := 1;
PrintDialog1.MinPage := 1;
PrintDialog1.ToPage := PageControl1.PageCount;
PrintDialog1.MaxPage := PageControl1.PageCount;

if PrintDialog1.Execute() then
  begin
    { determine the range the user wants to print }
    with PrintDialog1 do
    begin
      if PrintRange = prAllPages then
        begin
        Start := MinPage - 1;
        Stop := MaxPage - 1;
      end
      else if PrintRange = prSelection then
      begin
        Start := PageControl1.ActivePage.PageIndex;
        Stop := Start;
        end
      else  { PrintRange = prPageNums }
      begin
        Start := FromPage - 1;
        Stop := ToPage - 1;
      end;
    end;
    { now, print the pages }
    with Printer do
    begin
      BeginDoc;
      for I := Start to Stop do
      begin
        PageControl1.Pages[I].PaintTo(Handle, 10, 10);
        if I <> Stop then
          NewPage;
      end;
      EndDoc;
    end;
  end;
end;

 

Copyright(C) 2008 CodeGear(TM). All Rights Reserved.
What do you think about this topic? Send feedback!