trichview.support
the correspond the text and the lines |
Author |
Message |
stormy |
Posted: 01/11/2003 11:06:40 I have draw a line on the canvas of richView and record the postion of the line . then ,i draw the line on the printcanvas in onPreparePaint event . I have transformed the position of the line between the screen resolution and the print resolution . and found the line can not correspond to the text exactly. I have set the RVEditor.MaxTextWidth = pageWidht .the pageWidth is calculate by the follow procedure . in one word ,I want to find a new way to simulate WYSWYG. can u give me some advice about how to realize page divide and get the position of the text . //The procedure below returns width and height of printable area, converted to //screen resolution procedure GetScreenPageSize(RVPrint: TRVPrint; var Width, Height: Integer); var DC: HDC; phoX, phoY, phW, phH, lpy, lpx, LM, TM, RM, BM: Integer; begin DC := RV_GetPrinterDC; // from PtblRV unit Width := GetDeviceCaps(DC, HORZRES); Height := GetDeviceCaps(DC, VERTRES); lpy := GetDeviceCaps(DC, LOGPIXELSY); lpx := GetDeviceCaps(DC, LOGPIXELSX); phoX := GetDeviceCaps(DC, PHYSICALOFFSETX); phoY := GetDeviceCaps(DC, PHYSICALOFFSETY); phW := GetDeviceCaps(DC, PHYSICALWIDTH); phH := GetDeviceCaps(DC, PHYSICALHEIGHT); LM := MulDiv(RVPrint.LeftMarginMM, 5 * lpx, 127) - phoX; TM := MulDiv(RVPrint.TopMarginMM, 5 * lpy, 127) - phoY; RM := MulDiv(RVPrint.RightMarginMM, 5 * lpx, 127) - (phW - (phoX + Width)); BM := MulDiv(RVPrint.BottomMarginMM, 5 * lpy, 127) - (phH - (phoY + Height)); if LM < 0 then LM := 0; if TM < 0 then TM := 0; if RM < 0 then RM := 0; if BM < 0 then BM := 0; dec(Width, LM + RM); dec(Height, TM + BM); DeleteDC(DC); DC := GetDC(0); Width := MulDiv(Width, GetDeviceCaps(DC, LOGPIXELSX), lpx); Height := MulDiv(Height, GetDeviceCaps(DC, LOGPIXELSY), lpy); ReleaseDC(0, DC); end; |
Powered by ABC Amber Outlook Express Converter