Cómo almacenar el contenido de un RichEdit en una FEM de archivos
a Veces, es posible que desee almacenar el contenido de un control rich edit en un metarchivo. En este artículo se describe un enfoque que almacena este tipo de contenido del control de metarchivos mejorados, una página por metarchivo. El siguiente código muestra un método para volcar el contenido de un control rich edit en archivos EMF (uno por página):
unidad RichEditEMFPrint interfaz
usos
Windows, SysUtils, RichEdit, commdlg, clases, mensajes, Comctrls
procedimiento RichEditToMetaFile(AControl : TRichEdit AFileName : string)
aplicación
// GetPrinterDC()
// devuelve una impresora DC - usos de la Impresora cuadro de Diálogo Común
función GetPrinterDC : HDC
var
pdlg : TPRINTDLG
begin
FillChar(pdlg, sizeof(TPRINTDLG), 0)
pdlg.lStructSize := sizeof( TPRINTDLG )
pdlg.Banderas := PD_RETURNDC
PrintDlg(pdlg)
Resultado := pdlg.hDC
fin
// Obtener la longitud en caracteres del texto en el control
función GetRTFTextLength(hWndRTF : HWND) : integer
begin
Resultado := SendMessage(hWndRTF, WM_GETTEXTLENGTH, 0, 0 )
fin
// RTFToEMF - Dígale al control de dibujarse a sí mismo en la FEM
// Parámetros:
// hRefDC se utiliza para crear la FEM
// pszMetaFileName es el nombre de archivo de la nueva EMF (puede ser nulo)
// prcMeta es el RECT utilizado en CreateEnhMetaFile(), en 0,01 mm
// unidades (no debe ser nulo)
// hWndRTF es el control de interés
// nStart de partida es la posición del personaje
// pEnd es un número entero que recibe la posición de
// el siguiente carácter a imprimir después de esta página
función RTFToEMF(hRefDC : HDC pszMetaFileName : LPCTSTR prcMeta : TRECT
hWndRTF : HWND nStart : entero var pEnd : integer) : HENHMETAFILE
var
hMetaDC : HDC
fr : FORMATRANGE
nTextPrinted : integer
begin
// Crear la FEM
hMetaDC := CreateEnhMetaFile( hRefDC, pszMetaFileName, @prcMeta, nil )
si( hMetaDC = 0 ) entonces
begin
Resultado := 0
Salir
fin
ZeroMemory(@fr, sizeof(fr))
// Configurar la página (convertir 0,01 mm a twips)
fr.rcPage.top := prcMeta.a la izquierda*1440 div 2540
fr.rcPage.a la izquierda := prcMeta.parte superior*1440 div 2540
fr.rcPage.derecha := prcMeta.derecho*1440 div 2540
fr.rcPage.parte inferior := prcMeta.la parte inferior*1440 div 2540
// ajuste sin márgenes de todo.
fr.rc := fr.rcPage
// Configurar el rango de texto a imprimir como nStart hasta el final del documento
fr.chrg.cpMin := nStart
fr.chrg.cpMax := -1
fr.hdcTarget := hMetaDC
fr.hdc := fr.hdcTarget
// Decir el control de dibujarse a sí mismo en nuestro (meta) DC
nTextPrinted := SendMessage(hWndRTF, EM_FORMATRANGE, 1, integer(@(fr)))
pEnd := nTextPrinted
Resultado := CloseEnhMetaFile( hMetaDC )
fin
// DumpRTFToPagedEMFs - muestra el uso de RTFToEMF() para crear una FEM
// 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 anexa
procedimiento DumpRTFToPagedEMFs(hWndRTFControl : HWND szEMFFileTitleBase : LPTSTR)
var
szMetaName : string
nRTFTextLength, nStart, nPage : integer
hRefDC : HDC
rcMeta : TRECT
hEMF : HENHMETAFILE
begin
// en Primer lugar, determinar cuántos caracteres se encuentran en la RTF
nRTFTextLength := GetRTFTextLength( hWndRTFControl )
// Obtener una referencia de CC (basado en una impresora)
hRefDC := GetPrinterDC()
// ajuste de la meta RECT de 0,01 mm de unidades
rcMeta := Clases.Rect( 0, 0, GetDeviceCaps(hRefDC, HORZSIZE)*100,
GetDeviceCaps(hRefDC, VERTSIZE)*100 )
nPage := 0
nStart := 0
mientras nStart // Bucle mientras no hemos llegado al final de el texto en el control
begin
// la construcción de un nombre de archivo de esta página
szMetaName := Format('%s%d.CEM', [szEMFFileTitleBase, nPage])
// llamada a la función anterior para dibujar esta parte de la RTF sobre la EMF
hEMF := RTFToEMF( hRefDC, PChar(szMetaName), rcMeta, hWndRTFControl,
nStart, nStart )
// limpiar
DeleteEnhMetaFile( hEMF )
inc(nPage)
si nStart = 0, entonces
break
fin
fin
procedimiento RichEditToMetaFile(AControl : TRichEdit AFileName : string)
begin
DumpRTFToPagedEMFs(AControl.Manejar, PChar(AFileName))
fin
.
Almacenar el contenido de un richedit en un archivos emf
Almacenar el contenido de un richedit en un archivos emf : Multi-millones de consejos para hacer su vida mas facil.
Como almacenar el contenido de un RichEdit en una FEM de archivos
a Veces, es posible que desee almacenar el contenido de un control rich edit en un metarchivo. En este articulo se describe un enfoque que almacena este tipo de contenido del control de metarchivos mejorados, una pagina por metarchivo. El siguiente codigo muestra un metodo para volcar el contenido de un control rich edit en archivos EMF (uno por pagina):
unidad RichEditEMFPrint interfaz
usos
Windows, SysUtils, RichEdit, commdlg, clases, mensajes, Comctrls
procedimiento RichEditToMetaFile(AControl : TRichEdit AFileName : string)
aplicacion
// GetPrinterDC()
// devuelve una impresora DC - usos de la Impresora cuadro de Dialogo Comun
funcion GetPrinterDC : HDC
var
pdlg : TPRINTDLG
begin
FillChar(pdlg, sizeof(TPRINTDLG), 0)
pdlg.lStructSize := sizeof( TPRINTDLG )
pdlg.Banderas := PD_RETURNDC
PrintDlg(pdlg)
Resultado := pdlg.hDC
fin
// Obtener la longitud en caracteres del texto en el control
funcion GetRTFTextLength(hWndRTF : HWND) : integer
begin
Resultado := SendMessage(hWndRTF, WM_GETTEXTLENGTH, 0, 0 )
fin
// RTFToEMF - Digale al control de dibujarse a si mismo en la FEM
// Parametros:
// hRefDC se utiliza para crear la FEM
// pszMetaFileName es el nombre de archivo de la nueva EMF (puede ser nulo)
// prcMeta es el RECT utilizado en CreateEnhMetaFile(), en 0,01 mm
// unidades (no debe ser nulo)
// hWndRTF es el control de interes
// nStart de partida es la posicion del personaje
// pEnd es un numero entero que recibe la posicion de
// el siguiente caracter a imprimir despues de esta pagina
funcion RTFToEMF(hRefDC : HDC pszMetaFileName : LPCTSTR prcMeta : TRECT
hWndRTF : HWND nStart : entero var pEnd : integer) : HENHMETAFILE
var
hMetaDC : HDC
fr : FORMATRANGE
nTextPrinted : integer
begin
// Crear la FEM
hMetaDC := CreateEnhMetaFile( hRefDC, pszMetaFileName, @prcMeta, nil )
si( hMetaDC = 0 ) entonces
begin
Resultado := 0
Salir
fin
ZeroMemory(@fr, sizeof(fr))
// Configurar la pagina (convertir 0,01 mm a twips)
fr.rcPage.top := prcMeta.a la izquierda*1440 div 2540
fr.rcPage.a la izquierda := prcMeta.parte superior*1440 div 2540
fr.rcPage.derecha := prcMeta.derecho*1440 div 2540
fr.rcPage.parte inferior := prcMeta.la parte inferior*1440 div 2540
// ajuste sin margenes de todo.
fr.rc := fr.rcPage
// Configurar el rango de texto a imprimir como nStart hasta el final del documento
fr.chrg.cpMin := nStart
fr.chrg.cpMax := -1
fr.hdcTarget := hMetaDC
fr.hdc := fr.hdcTarget
// Decir el control de dibujarse a si mismo en nuestro (meta) DC
nTextPrinted := SendMessage(hWndRTF, EM_FORMATRANGE, 1, integer(@(fr)))
pEnd := nTextPrinted
Resultado := CloseEnhMetaFile( hMetaDC )
fin
// DumpRTFToPagedEMFs - muestra el uso de RTFToEMF() para crear una FEM
// para cada pagina en un control RTF
// Parametros:
// hWndRTFControl - el control
// szEMFFileTitleBase base de nombre de archivo para los archivos EMF, el numero se anexa
procedimiento DumpRTFToPagedEMFs(hWndRTFControl : HWND szEMFFileTitleBase : LPTSTR)
var
szMetaName : string
nRTFTextLength, nStart, nPage : integer
hRefDC : HDC
rcMeta : TRECT
hEMF : HENHMETAFILE
begin
// en Primer lugar, determinar cuantos caracteres se encuentran en la RTF
nRTFTextLength := GetRTFTextLength( hWndRTFControl )
// Obtener una referencia de CC (basado en una impresora)
hRefDC := GetPrinterDC()
// ajuste de la meta RECT de 0,01 mm de unidades
rcMeta := Clases.Rect( 0, 0, GetDeviceCaps(hRefDC, HORZSIZE)*100,
GetDeviceCaps(hRefDC, VERTSIZE)*100 )
nPage := 0
nStart := 0
mientras nStart // Bucle mientras no hemos llegado al final de el texto en el control
begin
// la construccion de un nombre de archivo de esta pagina
szMetaName := Format('%s%d.CEM', [szEMFFileTitleBase, nPage])
// llamada a la funcion anterior para dibujar esta parte de la RTF sobre la EMF
hEMF := RTFToEMF( hRefDC, PChar(szMetaName), rcMeta, hWndRTFControl,
nStart, nStart )
// limpiar
DeleteEnhMetaFile( hEMF )
inc(nPage)
si nStart = 0, entonces
break
fin
fin
procedimiento RichEditToMetaFile(AControl : TRichEdit AFileName : string)
begin
DumpRTFToPagedEMFs(AControl.Manejar, PChar(AFileName))
fin
.