Page 1 of 1

Right align

Posted: Mon Sep 24, 2007 6:16 pm
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.

Posted: Tue Sep 25, 2007 4:25 pm
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)