Breite RichEdit auf Bildschirm und beim Druck unterscheidlich
-
Hallo,
folgendes Problem: Ich habe ein kleines Rich-Edit-Feld (z.B. 70x40 mm) auf dem Bildschirm, das ich eins zu eins ausdrucken will. Die Größe des Ausdrucks stimmt genau, aber die errechnete Größe auf dem Bildschirm stimmt nicht damit überein.
Der Code für den Druck ist wie folgt:
void PrintRichEditIntoRect(HWND RichEditHandle, const TRect& PageRect) { // Einheiten in PageRect in 0,1 mm TFormatRange Range; int mm, lpx, lpy, pox, poy; Range.hdc = Printer()->Handle; Range.hdcTarget = Range.hdc; // Get printer resolution lpx = 100 * GetDeviceCaps(Range.hdc, LOGPIXELSX); lpy = 100 * GetDeviceCaps(Range.hdc, LOGPIXELSY); // Convert to device coordinates // Get physical printing offset pox = GetDeviceCaps(Range.hdc, PHYSICALOFFSETX); poy = GetDeviceCaps(Range.hdc, PHYSICALOFFSETY); Range.rc.left = MulDiv(PageRect.Left, lpx, 25400) - pox; Range.rc.top = MulDiv(PageRect.Top, lpy, 25400) - poy; Range.rc.right = MulDiv(PageRect.Right, lpx, 25400) - pox; Range.rc.bottom = MulDiv(PageRect.Bottom, lpy, 25400) - poy; // Convert to twips Range.rc.left = MulDiv(Range.rc.left, 144000, lpx); Range.rc.top = MulDiv(Range.rc.top, 144000, lpy); Range.rc.right = MulDiv(Range.rc.right, 144000, lpx); Range.rc.bottom = MulDiv(Range.rc.bottom, 144000, lpy); Range.rcPage = Range.rc; Range.chrg.cpMin = 0; Range.chrg.cpMax = -1; mm = SetMapMode(Printer()->Handle, MM_TEXT); try { SendMessage(RichEditHandle, EM_FORMATRANGE, 0, 0); if (SendMessage(RichEditHandle, EM_FORMATRANGE, 1, (long)&Range) < 0) SendMessage(RichEditHandle, WM_GETTEXTLENGTH, 0, 0); } __finally { SendMessage(RichEditHandle, EM_FORMATRANGE, 0, 0); SetMapMode(Printer()->Handle, mm); } }
Die Größe, die in PageRect in 0,1-mm-Einheiten übergeben wird, stimmt beim Ausdruck genau.
So rechne ich die Größe des RichEdit auf dem Bildschirm in Pixes aus:
float Breite=70.0; // in mm float Hoehe=40.0; / in mm RichEdit1->Width=(int)((Breite/25.4)*Screen->PixelsPerInch); RichEdit1->Height=(int)((Hoehe/25.4)*Screen->PixelsPerInch);
Und diese Größe stimmt nicht. Der Inhalt stimmt dann nicht mit dem Ausdruck überein.
Wo ist mein (Denk-)Fehler ?
Vielen Dank für die Hilfe !
Tschüß,
Frank
-
Hallo,
bisher konnte mir leider niemand helfen.
Ich hab mal weitergesucht und herausgefunden, dass mittels EM_SETTARGETDEVICE zumindest den Zeilenumbruch "druckergemäß" einstellen kann (was allerdings auch so nicht immer klappt).
Hat nicht doch noch jemand einen Hinweis, wie ich ein RichEdit WYSIWYG darstellen und drucken kann ?
Tschüss,
Frank