Slik lagrer innholdet i en RichEdit i en EMF files

Howto butikk innholdet i en RichEdit i en EMF filer
Noen ganger kan det være lurt å lagre innholdet i en rik redigeringskontroll i en metafil. Denne artikkelen beskriver en tilnærming som lagrer denne type innhold kontrollens i forbedret metafiler, én side per metafil. Følgende kode viser en metode for å dumpe innholdet i en rik redigeringskontroll i EMF-filer (én per side):
enhet RichEditEMFPrint;
grensesnitt
bruker Windows, SysUtils, RichEdit, commdlg, klasser, meldinger, Comctrls;
prosedyre RichEditToMetaFile (AControl: TRichEdit; AFileName: string);
implementering
//GetPrinterDC () //returnerer en skriver DC - bruker skriver Common Dialog funksjon GetPrinterDC: HDC; Var pdlg: TPRINTDLG; begynne FillChar (pdlg, sizeof (TPRINTDLG), 0); pdlg.lStructSize: = sizeof (TPRINTDLG); pdlg.Flags: = PD_RETURNDC; PrintDlg (pdlg); Resultat: = pdlg.hDC; end;
//Få lengden, i tegn, av teksten i kontrollfunksjonen GetRTFTextLength (hWndRTF: HWND): integer; begynne Resultat: = Sendmessage (hWndRTF, WM_GETTEXTLENGTH, 0, 0); end;
//RTFToEMF - Fortell kontrollen til å tegne seg på EMF //Parametere: //hRefDC brukes til å lage EMF //pszMetaFileName er filen navnet på den nye EMF (kan være null) //prcMeta er RECT vant til i CreateEnhMetaFile (), i 0.01mm //heter (ikke bør være null) //hWndRTF er kontrollen av interesse //nstart er utgangs tegnet plasseringen //pend er et helt tall som mottar posisjonen //neste tegn skal skrives ut etter denne siden funksjonen RTFToEMF (hRefDC: HDC; pszMetaFileName: LPCTSTR; prcMeta: TRECT; hWndRTF: HWND; nstart: integer; Var Pend: integer): HENHMETAFILE; Var hMetaDC: HDC; fr: FORMATRANGE; nTextPrinted: integer; begynne //Opprett EMF hMetaDC: = CreateEnhMetaFile (hRefDC, pszMetaFileName,prcMeta, null); if (hMetaDC = 0), og start Resultat: = 0; Exit; enden,
ZeroMemory (fr, sizeof (fr)); //Sett opp siden (konvertere 0.01mm til twips) fr.rcPage.top: = prcMeta.left * 1 440 div 2540; fr.rcPage.left: = prcMeta.top * 1 440 div 2540; fr.rcPage.right: = prcMeta.right * 1 440 div 2 540; fr.rcPage.bottom: = prcMeta.bottom * 1 440 div 2 540; //Sett opp uten marger rundt. fr.rc: = fr.rcPage; //Sett opp tekstområdet for å skrive ut som nstart til slutten av dokumentet fr.chrg.cpMin: = nstart; fr.chrg.cpMax: = -1; fr.hdcTarget: = hMetaDC; fr.hdc: = fr.hdcTarget; //Fortell kontrollen til å tegne seg på vår (meta) DC nTextPrinted: = Sendmessage (hWndRTF, EM_FORMATRANGE, 1, heltall (@ (fr))); Pend: = nTextPrinted; Resultat: = CloseEnhMetaFile (hMetaDC); end;
//DumpRTFToPagedEMFs - demonstrerer hjelp RTFToEMF () for å lage en EMF //for hver side i en RTF kontroll //Parametere: //hWndRTFControl - kontroll //szEMFFileTitleBase - basen filnavn for EMF-filer, er nummer lagt prosedyre DumpRTFToPagedEMFs (hWndRTFControl: HWND; szEMFFileTitleBase: LPTSTR); Var szMetaName: string; nRTFTextLength, nstart, nside: integer; hRefDC: HDC; rcMeta: TRECT; hEMF: HENHMETAFILE; begynne //Først bestemme hvor mange tegn er i RTF nRTFTextLength: = GetRTFTextLength (hWndRTFControl); //Få en referanse DC (basert på en skriver) hRefDC: = GetPrinterDC (); //Sett opp meta RECT for 0.01mm enheter rcMeta: = Classes.Rect (0, 0, GetDeviceCaps (hRefDC, HORZSIZE) * 100, GetDeviceCaps (hRefDC, VERTSIZE) * 100); nside: = 0; nstart: = 0; mens nstart < nRTFTextLength gjøre //Loop mens vi ikke har nådd slutten av teksten i kontroll begynne //konstruere et filnavn for denne siden szMetaName: = Format ('% s% d.EMF', [szEMFFileTitleBase, nside ]); //Samtalefunksjonen over for å trekke denne delen av RTF på EMF hEMF: = RTFToEMF (hRefDC, PChar (szMetaName), rcMeta, hWndRTFControl, nstart, nstart); //Rydde opp DeleteEnhMetaFile (hEMF); inc (nside); hvis nstart = 0 deretter bryte; ende; end;
prosedyre RichEditToMetaFile (AControl: TRichEdit; AFileName: string); begynne DumpRTFToPagedEMFs (AControl.Handle, PChar (AFileName)); end;.
slutten



Previous:
Next Page: