Cómo almacenar el contenido de uno en uno RichEdit archivos EMF
A veces, puede que desee almacenar el contenido de un control de edición rica en un metarchivo. En este artículo se describe un enfoque que almacena este tipo de control del contenido en el aumento de metarchivos, una página por metarchivo. El siguiente código muestra un método para volcar el contenido de un control de edición rica en archivos EMF (uno por página):
RichEditEMFPrint unidad;
interfaz
usos
Windows, SysUtils, RichEdit, commdlg, clases, mensajes, Comctrls;procedimiento RichEditToMetaFile (AControl: TRichEdit; AFileName: string);
aplicación
/ / GetPrinterDC ()
/ / Devuelve una impresora DC - usos comunes de diálogo de la impresora
GetPrinterDC función: HDC;
var
pdlg: TPRINTDLG;
empezar
FillChar (pdlg, sizeof (TPRINTDLG), 0);
pdlg.lStructSize: = sizeof (TPRINTDLG);
pdlg.Flags: = PD_RETURNDC;
PrintDlg (pdlg);
Result: = pdlg.hDC;
final;/ / Obtener la longitud, en caracteres, del texto en el control
función GetRTFTextLength (hWndRTF: HWND): integer;
empezar
Result: = SendMessage (hWndRTF, WM_GETTEXTLENGTH, 0, 0);
final;/ / RTFToEMF - Dígale al control de señalar a sí mismo en el CEM
/ / Parámetros:
/ / HRefDC se utiliza para crear la EMF
/ / PszMetaFileName es el nombre del archivo de la nueva CEM (puede ser cero)
/ / PrcMeta es el RECT utilizados en el CreateEnhMetaFile (), en 0.01mm
/ / Unidades (no debe ser cero)
/ / HWndRTF es el control de intereses
/ / NStart es el carácter de comienzo ubicación
/ / Pend es un entero que recibe la posición de
/ / El carácter siguiente después de imprimir esta página
función RTFToEMF (hRefDC: HDC; pszMetaFileName: LPCTSTR; prcMeta: TRect;
hWndRTF: HWND; nStart: integer; var Pend: integer): HENHMETAFILE;
var
hMetaDC: HDC;
fr: FORMATRANGE;
nTextPrinted: integer;
empezar
/ / Crear la EMF
hMetaDC: = CreateEnhMetaFile (hRefDC, pszMetaFileName, @ prcMeta, nil);
if (hMetaDC = 0) entonces
empezar
Resultado: = 0;
Exit;
final;ZeroMemory (@ fr, sizeof (fr));
/ / Crear la página (0.01mm convertir a twips)
fr.rcPage.top: = 1440 * prcMeta.left div 2540;
fr.rcPage.left: = 1440 * prcMeta.top div 2540;
fr.rcPage.right: = 1440 * prcMeta.right div 2540;
fr.rcPage.bottom: = 1440 * prcMeta.bottom div 2540;
/ / Establecer márgenes no todo.
fr.rc: = fr.rcPage;
/ / Establecer el rango de texto para impresión como para poner fin a la nStart del documento
fr.chrg.cpMin: = nStart;
fr.chrg.cpMax: = -1;
fr.hdcTarget: = hMetaDC;
fr.hdc: = fr.hdcTarget;
/ / Dile al control de señalar a sí mismo en nuestro (meta) DC
nTextPrinted: = SendMessage (hWndRTF, EM_FORMATRANGE, 1, entero (@ (fr)));
Pend: = nTextPrinted;
Result: = CloseEnhMetaFile (hMetaDC);
final;/ / DumpRTFToPagedEMFs - RTFToEMF demuestra usando () para crear una EMF
/ / Para cada página en un control RTF
/ / Parámetros:
/ / HWndRTFControl - el control
/ / SzEMFFileTitleBase - base de nombre de archivo para los archivos EMF, el número se adjunta
procedimiento DumpRTFToPagedEMFs (hWndRTFControl: HWND; szEMFFileTitleBase: LPTSTR);
var
szMetaName: string;
nRTFTextLength, nStart, nPage: integer;
hRefDC: HDC;
rcMeta: TRect;
hEMF: HENHMETAFILE;
empezar
/ / En primer lugar, determinar cuántos caracteres se encuentran en la RTF
nRTFTextLength: = GetRTFTextLength (hWndRTFControl);
/ / Obtener una referencia DC (sobre la base de una impresora)
hRefDC: = GetPrinterDC ();
/ / Establecer la meta para RECT unidades 0.01mm
rcMeta: Classes.Rect = (0, 0, GetDeviceCaps (hRefDC, HORZSIZE) * 100,
GetDeviceCaps (hRefDC, VERTSIZE) * 100);
nPage: = 0;
nStart: = 0;
mientras que nStart <nRTFTextLength hacer
/ / Bucle mientras no hemos llegado al final del texto en el control
empezar
/ / Construir un nombre de archivo para esta página
szMetaName: = Format ( '% s% d.EMF', [szEMFFileTitleBase, nPage]);
/ / Llamada a la función de extraer por encima de esta parte de la RTF en el EMF
hEMF: = RTFToEMF (hRefDC, PChar (szMetaName), rcMeta, hWndRTFControl,
nStart, nStart);
/ / Limpiar
DeleteEnhMetaFile (hEMF);
inc (nPage);
si nStart = 0 then
break;
final;
final;procedimiento RichEditToMetaFile (AControl: TRichEdit; AFileName: string);
empezar
DumpRTFToPagedEMFs (AControl.Handle, PChar (AFileName));
final;final.

Delicious
Digg
Google
Yahoo