| |
| Drawing in scale without using Windows Mapping Modes? |
 |
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.
Example:
procedure TForm .Button Click(Sender: TObject);
var
dc : hdc;
InchX : integer;
InchY : integer;
begin
dc := GetDc(0);
InchX := GetDeviceCaps(dc, LOGPIXELSX);
InchY := GetDeviceCaps(dc, LOGPIXELSY);
ReleaseDC(0, dc);
Form .Canvas.Rectangle(Round(0 * InchX),
Round(0 * InchY),
Round( .5 * InchX),
Round( .5 * InchY));
end;
|
|
| Hits/month |
2,500,000+ |
Downloads (Since May 2000) |
7,393,709 |
| Total Files |
6,023 |
| Forum msgs |
7,670 |
| Articles/FAQs |
70+/900+ |
Top Selling Software at Amazon
|