Right align

General TRichView support forum. Please post your questions here
Post Reply
crepa
Posts: 2
Joined: Mon Sep 24, 2007 6:08 pm

Right align

Post by crepa »

I want to create a index page with some text left aligned and page number right aligned with dots in the middle.

I do it now with a right aligned tab with a dot in Leader property.

The problem is how can I calculate the tab position if page margins change, or if paper orientation changes.

I have the page with in printer units, margins in milimetres and the tab position must be set in screen pixels. It's crazy!

Thanks.
Sergey Tkachenko
Site Admin
Posts: 17569
Joined: Sat Aug 27, 2005 10:28 am
Contact:

Post by Sergey Tkachenko »

How to convert printer sizes to inches or mm:

Code: Select all

  DC := RV_GetPrinterDC; // from PtblRV unit 

  // size of printable area in printer pixels
  Width  := GetDeviceCaps(DC, HORZRES); 
  Height := GetDeviceCaps(DC, VERTRES); 

  // "physical" offsets (from paper borders to printable area) 
  phoX := GetDeviceCaps(DC, PHYSICALOFFSETX); 
  phoY := GetDeviceCaps(DC, PHYSICALOFFSETY); 
  // "physical" sizes (size of page, including nonprintable areas) 
  phW  := GetDeviceCaps(DC, PHYSICALWIDTH); 
  phH  := GetDeviceCaps(DC, PHYSICALHEIGHT); 

  // distances from the page border to the printable area 
  // (i.e. size of "margins" where the printer cannot print) 
 { 
    From left side: phoX 
    From top side: phoY 
    From right side: phW-(phoX+Width) 
    From bottom side: phH-(phoY+Height) 
  } 
  // all these values are in pixels (printer pixels) 
  // in order to convert them to mm: 

  lpy := GetDeviceCaps(DC, LOGPIXELSY); 
  lpx := GetDeviceCaps(DC, LOGPIXELSX); 

  // converting val (in pixels) to mm: 
  //  val*127/(5*lpx) -- for horizontal sizes 
  //  val*127/(5*lpy) -- for vertical sizes 

  // converting val (in pixels) to inches 
  //  val/lpx -- for horizontal sizes 
  //  val/lpy -- for vertical sizes 

  // Do not forget to delete DC 
   DeleteDC(DC);
As for the screen pixels.
By default, RichView uses the screen resolution, i.e. Screen.PixelsPerInch.
This value depends on the current computer settings. If you want to make it independent, assign positive value (for example, 96) to RichViewPixelsPerInch (global variable from RVFuns).
After that,
SizeInMM = SizeInScreenPixels*127/(5*RichViewPixelsPerInch)
Post Reply