GetBitmapDC example for Delphi

Take the following steps to demonstrate how GDI functions can be used to print text on the bitmap and on the control. The text printed on the bitmap is a permanent part of the bitmap and becomes permanent if the bitmap is saved, whereas the text on the control is superficial and does not affect the bitmap.

Note:

For an easier way of drawing text, refer to the DrawText example.

 

1.

Start with the project that you created in Loading and Displaying an Image.

2.

image\btncmd.gif Add a button to your form and name it as follows:

 

Name

Caption

 

Button1

GDI for Text

3.

Code the Button1 control's Click procedure as the following. In online help, you can use the Edit pull-down menu to copy the block of code.

 

Notice that the code prints in two different places: the bitmap and the control. You can see the difference when you run the program.

procedure TForm1.Button1Click(Sender: TObject);
var
   LeadDC: HDC;
   LeadClientDC: HDC;
   hfnt: longint;
   hOldFont: Longint;
   sRet: Smallint;
   nRet: Integer;
   mystring: String;

begin
   //Ensure that the Lead control is visible
   LEADRasterView1.Visible := True;
   //First, print text on the bitmap.
   //Create a device context for the bitmap that the GDI functions can access
   LeadDC := LEADRasterView1.Raster.GetBitmapDC ();
   //Get the system font and select it. The old font is saved.
   //Using other fonts is more complex. Refer to the Windows API documentation.
   hfnt := GetStockObject(SYSTEM_FONT);
   hOldFont := SelectObject(LeadDC, hfnt);
   //Make the background transparent, so that the text will overlay the image
   SetBkMode(LeadDC, TRANSPARENT);
   //Assign the string value
   mystring := 'Text on the bitmap';
   //Print the text on the bitmap. This is a permanent change in the bitmap
   TextOut(LeadDC, 20, 40, PChar(mystring), StrLen(PChar(mystring)));
   //Restore the previous font
   SelectObject(LeadDC, hOldFont);
   //Remove the lock from the device control
   LEADRasterView1.Raster.ReleaseBitmapDC ();
   //Repaint the part of the image that has changed
   LEADRasterView1.BackErase := False;
   LEADRasterView1.ForceRepaint (sRet);
   //Allow full repainting again
   LEADRasterView1.BackErase := True;
   //Next, print text on the control.
   //Create a device context for the control that the GDI functions can access
   LeadClientDC := LEADRasterView1.GetClientDC (nRet);
   //Get the system font and select it. The old font is saved.
   //Using other fonts is more complex. Refer to the Windows API documentation.
   hfnt := GetStockObject(SYSTEM_FONT);
   hOldFont := SelectObject(LeadDC, hfnt);
   //Make the background transparent, so that the text will overlay the image
   SetBkMode(LeadClientDC, TRANSPARENT);
   //Assign the string value
   mystring := 'Text on the LEAD control';
   //Print the text on the control.
   //This is an overlay that does not affect the bitmap.
   TextOut(LeadClientDC, 20, 80, PChar(mystring), StrLen(PChar(mystring)));
   //Restore the previous font
   SelectObject(LeadClientDC, hOldFont);
   //Remove the lock from the device control
   LEADRasterView1.ReleaseClientDC (sRet);

end;

4.

Run your program to test it. Notice that the text printed on the bitmap is scaled as part of the bitmap. If you zoom in, it becomes larger, and if you zoom out, it becomes smaller. The text printed on the control is the normal size for the system font and is not affected by zooming.