Question and Answer Database FAQ2736D.txt Drawing in scale without using Windows Mapping Modes? Category :Windows API Platform :All Product :All 32 bit Question: How can I draw in scale without using Windows Mapping Modes? Answer: You will need to use the Windows API function GetDeviceCaps() to retrieve the "logical" number of pixels per inch for the display in both the X and y directions, and multiply your coordinates by the returned values. Screen measurements are based on a concept of "Logical Pixels" and may not always reflect a true measurement. Printers should give satisfactory results when measurement are compared against a ruler. When printing, delete the lines for GetDc() and ReleaseDc() and simply pass Printer.Canvas.Handle to the GetDeviceCaps() function. Example: procedure TForm1.Button1Click(Sender: TObject); var dc : hdc; InchX : integer; InchY : integer; begin dc := GetDc(0); InchX := GetDeviceCaps(dc, LOGPIXELSX); InchY := GetDeviceCaps(dc, LOGPIXELSY); ReleaseDC(0, dc); Form1.Canvas.Rectangle(Round(0 * InchX), Round(0 * InchY), Round(1.5 * InchX), Round(1.5 * InchY)); end; 7/16/98 4:31:28 PM
Last Modified: 01-SEP-99