- - * - WhiteUnicorn - * - -




* #WhiteUnicorn/ StartPage/ Documentation/DelphiFAQ >


Frequently Asked Questions

Drawing in scale without using Windows Mapping Modes?

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;



* #WhiteUnicorn/ StartPage/ Documentation/DelphiFAQ >



- - * - Anastasija aka WhiteUnicorn - * - - LJLiveJournal
PFPhotoFile