Главная страница | назад

Article #17736: Drawing in scale without using Windows Mapping Modes?

 Question and Answer Database

FAQ2736D.txt   Drawing in scale without using Windows Mapping Modes?
Category   :Windows API
Platform    :All
Product    :All 32 bit  

How can I draw in scale without using Windows Mapping Modes?

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.


procedure TForm1.Button1Click(Sender: TObject);
  dc : hdc;
  InchX : integer;
  InchY : integer;
  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));

7/16/98 4:31:28 PM

Last Modified: 01-SEP-99