Speichern Sie der Inhalt eines Richedit in einer emf-Dateien


HOWTO den Inhalt eines RichEdit in einer EMF-Dateien speichern

Manchmal sollten Sie den Inhalt eines rich-Edit-Steuerelements in einer Metadatei speichern. Dieser Artikel beschreibt einen Ansatz, in dem diese Art der Inhalt des Steuerelements in Erweiterte Metadateien, eine Seite pro Metadatei gespeichert. Der folgende Code veranschaulicht eine Methode um den Inhalt eines rich-Edit-Steuerelements in EMF-Dateien (eine pro Seite) zu sichern:

Einheit RichEditEMFPrint;

Schnittstelle

verwendet
Windows, SysUtils, RichEdit, Commdlg, Klassen, Nachrichten, Comctrls;

Prozedur RichEditToMetaFile (AControl: TRichEdit; AFileName: string);

Umsetzung

GetPrinterDC()
Gibt einen DC-Drucker - Drucker-Standarddialog verwendet
GetPrinterDC-Funktion: HDC;
var
Pdlg: TPRINTDLG;
beginnen
FillChar (Pdlg, sizeof(TPRINTDLG), 0);
pdlg.lStructSize: = Sizeof (TPRINTDLG);
Pdlg. Flaggen: = PD_RETURNDC;
PrintDlg(pdlg);
Ergebnis: = pdlg.hDC;
Ende;

Die Länge in Zeichen des Texts im Steuerelement zu erhalten
Funktion GetRTFTextLength(hWndRTF: HWND): Integer;
beginnen
Ergebnis: = SendMessage (hWndRTF, WM_GETTEXTLENGTH, 0, 0);
Ende;

RTFToEMF - sagen Sie das Steuerelement zum zeichnen sich auf der EMF
Parameter:
hRefDC wird verwendet, um die EMF erstellen
PszMetaFileName ist der Dateiname der neuen EMF (kann NULL sein)
PrcMeta ist das RECT verwendet, um in CreateEnhMetaFile(), in 0,01 mm
Einheiten (sollte nicht gleich NULL sein)
hWndRTF ist die Kontrolle des Interesses
nStart ist der Ausgangsort der Zeichen
pEnd ist eine Ganzzahl, die die Position des erhält
Das nächste Zeichen nach dieser Seite drucken
Funktion RTFToEMF (hRefDC: HDC; PszMetaFileName: LPCTSTR; PrcMeta: TRECT;
hWndRTF: HWND; nStart: Ganzzahl; Var pEnd: Ganzzahl): HENHMETAFILE;
var
hMetaDC: HDC;
Fr: FORMATRANGE;
nTextPrinted: Integer;
beginnen
Erstellen der EMF
hMetaDC: = CreateEnhMetaFile (hRefDC, PszMetaFileName, @prcMeta, Nil);
Wenn (hMetaDC = 0) dann
beginnen
Ergebnis: = 0;
Ausfahrt;
Ende;

ZeroMemory (@fr, sizeof(fr));
Einrichten der Seite (0,01 mm in Twips zu konvertieren)
fr.rcPage.top: = prcMeta.left*1440 Div 2540;
fr.rcPage.left: = prcMeta.top*1440 Div 2540;
fr.rcPage.right: = prcMeta.right*1440 Div 2540;
fr.rcPage.bottom: = prcMeta.bottom*1440 Div 2540;
Richten Sie keine Ränder rundum.
Fr.RC: = fr.rcPage;
Einrichten der Textbereich, der zum Drucken als nStart bis Ende des Dokuments
fr.chrg.cpMin: = nStart;
fr.chrg.cpMax: =-1;
fr.hdcTarget: = hMetaDC;
Fr.hdc: = fr.hdcTarget;
Sagen Sie das Steuerelement selbst auf unserem DC (Meta) zeichnen
nTextPrinted: = SendMessage (hWndRTF, EM_FORMATRANGE, 1, integer(@(fr))) ist;
pEnd: = nTextPrinted;
Ergebnis: = CloseEnhMetaFile (hMetaDC);
Ende;

DumpRTFToPagedEMFs - veranschaulicht die Verwendung von RTFToEMF() zum Erstellen einer EMF
für jede Seite in einem RTF-Steuerelement
Parameter:
hWndRTFControl - Steuerelement
SzEMFFileTitleBase - Basisdateiname für EMF-Dateien, Anzahl wird angehängt
Prozedur DumpRTFToPagedEMFs (hWndRTFControl: HWND; SzEMFFileTitleBase: LPTSTR);
var
SzMetaName: string;
nRTFTextLength, nStart, nPage: Ganzzahl;
hRefDC: HDC;
RcMeta: TRECT;
hEMF: HENHMETAFILE;
beginnen
Ermitteln Sie zunächst, wie viele Zeichen in der RTF sind
nRTFTextLength: = GetRTFTextLength (hWndRTFControl);
Rufen Sie einen Verweis DC (basierend auf einem Drucker)
hRefDC: = GetPrinterDC();
Richten Sie die Meta RECT für Einheiten von 0,01 mm
RcMeta: = Classes.Rect (0, 0, GetDeviceCaps (hRefDC, HORZSIZE) * 100
GetDeviceCaps(hRefDC, VERTSIZE) * 100);
nPage: = 0;
nStart: = 0;
während nStart < nRTFTextLength zu tun
Schleife, während wir das Ende des Texts im Steuerelement nicht erreicht haben
beginnen
Erstellen Sie einen Namen für diese Seite
SzMetaName: = Format (' %s' %d .EMF ', [SzEMFFileTitleBase, nPage]);
Rufen Sie oben zum Zeichnen dieser Teilbereich der RTF auf die EMF-Funktion
hEMF: = RTFToEMF (hRefDC, PChar(szMetaName), RcMeta, hWndRTFControl,
nStart, nStart);
Bereinigen
DeleteEnhMetaFile (hEMF);
Inc(nPage);
Wenn nStart = 0 then
zu brechen;
Ende;
Ende;

Prozedur RichEditToMetaFile (AControl: TRichEdit; AFileName: string);
beginnen
DumpRTFToPagedEMFs (AControl.Handle, PChar(AFileName));
Ende;

Ende.









Speichern Sie der Inhalt eines Richedit in einer emf-Dateien


Speichern Sie der Inhalt eines Richedit in einer emf-Dateien : Mehreren tausend Tipps, um Ihr Leben einfacher machen.


HOWTO den Inhalt eines RichEdit in einer EMF-Dateien speichern

Manchmal sollten Sie den Inhalt eines rich-Edit-Steuerelements in einer Metadatei speichern. Dieser Artikel beschreibt einen Ansatz, in dem diese Art der Inhalt des Steuerelements in Erweiterte Metadateien, eine Seite pro Metadatei gespeichert. Der folgende Code veranschaulicht eine Methode um den Inhalt eines rich-Edit-Steuerelements in EMF-Dateien (eine pro Seite) zu sichern:

Einheit RichEditEMFPrint;

Schnittstelle

verwendet
Windows, SysUtils, RichEdit, Commdlg, Klassen, Nachrichten, Comctrls;

Prozedur RichEditToMetaFile (AControl: TRichEdit; AFileName: string);

Umsetzung

GetPrinterDC()
Gibt einen DC-Drucker - Drucker-Standarddialog verwendet
GetPrinterDC-Funktion: HDC;
var
Pdlg: TPRINTDLG;
beginnen
FillChar (Pdlg, sizeof(TPRINTDLG), 0);
pdlg.lStructSize: = Sizeof (TPRINTDLG);
Pdlg. Flaggen: = PD_RETURNDC;
PrintDlg(pdlg);
Ergebnis: = pdlg.hDC;
Ende;

Die Länge in Zeichen des Texts im Steuerelement zu erhalten
Funktion GetRTFTextLength(hWndRTF: HWND): Integer;
beginnen
Ergebnis: = SendMessage (hWndRTF, WM_GETTEXTLENGTH, 0, 0);
Ende;

RTFToEMF - sagen Sie das Steuerelement zum zeichnen sich auf der EMF
Parameter:
hRefDC wird verwendet, um die EMF erstellen
PszMetaFileName ist der Dateiname der neuen EMF (kann NULL sein)
PrcMeta ist das RECT verwendet, um in CreateEnhMetaFile(), in 0,01 mm
Einheiten (sollte nicht gleich NULL sein)
hWndRTF ist die Kontrolle des Interesses
nStart ist der Ausgangsort der Zeichen
pEnd ist eine Ganzzahl, die die Position des erhält
Das nächste Zeichen nach dieser Seite drucken
Funktion RTFToEMF (hRefDC: HDC; PszMetaFileName: LPCTSTR; PrcMeta: TRECT;
hWndRTF: HWND; nStart: Ganzzahl; Var pEnd: Ganzzahl): HENHMETAFILE;
var
hMetaDC: HDC;
Fr: FORMATRANGE;
nTextPrinted: Integer;
beginnen
Erstellen der EMF
hMetaDC: = CreateEnhMetaFile (hRefDC, PszMetaFileName, @prcMeta, Nil);
Wenn (hMetaDC = 0) dann
beginnen
Ergebnis: = 0;
Ausfahrt;
Ende;

ZeroMemory (@fr, sizeof(fr));
Einrichten der Seite (0,01 mm in Twips zu konvertieren)
fr.rcPage.top: = prcMeta.left*1440 Div 2540;
fr.rcPage.left: = prcMeta.top*1440 Div 2540;
fr.rcPage.right: = prcMeta.right*1440 Div 2540;
fr.rcPage.bottom: = prcMeta.bottom*1440 Div 2540;
Richten Sie keine Ränder rundum.
Fr.RC: = fr.rcPage;
Einrichten der Textbereich, der zum Drucken als nStart bis Ende des Dokuments
fr.chrg.cpMin: = nStart;
fr.chrg.cpMax: =-1;
fr.hdcTarget: = hMetaDC;
Fr.hdc: = fr.hdcTarget;
Sagen Sie das Steuerelement selbst auf unserem DC (Meta) zeichnen
nTextPrinted: = SendMessage (hWndRTF, EM_FORMATRANGE, 1, integer(@(fr))) ist;
pEnd: = nTextPrinted;
Ergebnis: = CloseEnhMetaFile (hMetaDC);
Ende;

DumpRTFToPagedEMFs - veranschaulicht die Verwendung von RTFToEMF() zum Erstellen einer EMF
für jede Seite in einem RTF-Steuerelement
Parameter:
hWndRTFControl - Steuerelement
SzEMFFileTitleBase - Basisdateiname für EMF-Dateien, Anzahl wird angehängt
Prozedur DumpRTFToPagedEMFs (hWndRTFControl: HWND; SzEMFFileTitleBase: LPTSTR);
var
SzMetaName: string;
nRTFTextLength, nStart, nPage: Ganzzahl;
hRefDC: HDC;
RcMeta: TRECT;
hEMF: HENHMETAFILE;
beginnen
Ermitteln Sie zunächst, wie viele Zeichen in der RTF sind
nRTFTextLength: = GetRTFTextLength (hWndRTFControl);
Rufen Sie einen Verweis DC (basierend auf einem Drucker)
hRefDC: = GetPrinterDC();
Richten Sie die Meta RECT für Einheiten von 0,01 mm
RcMeta: = Classes.Rect (0, 0, GetDeviceCaps (hRefDC, HORZSIZE) * 100
GetDeviceCaps(hRefDC, VERTSIZE) * 100);
nPage: = 0;
nStart: = 0;
während nStart < nRTFTextLength zu tun
Schleife, während wir das Ende des Texts im Steuerelement nicht erreicht haben
beginnen
Erstellen Sie einen Namen für diese Seite
SzMetaName: = Format (' %s' %d .EMF ', [SzEMFFileTitleBase, nPage]);
Rufen Sie oben zum Zeichnen dieser Teilbereich der RTF auf die EMF-Funktion
hEMF: = RTFToEMF (hRefDC, PChar(szMetaName), RcMeta, hWndRTFControl,
nStart, nStart);
Bereinigen
DeleteEnhMetaFile (hEMF);
Inc(nPage);
Wenn nStart = 0 then
zu brechen;
Ende;
Ende;

Prozedur RichEditToMetaFile (AControl: TRichEdit; AFileName: string);
beginnen
DumpRTFToPagedEMFs (AControl.Handle, PChar(AFileName));
Ende;

Ende.


Speichern Sie der Inhalt eines Richedit in einer emf-Dateien

Speichern Sie der Inhalt eines Richedit in einer emf-Dateien : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Speichern Sie der Inhalt eines Richedit in einer emf-Dateien
Wiezutun
Freunden empfehlen
  • gplus
  • pinterest

Kommentar

Einen Kommentar hinterlassen

Wertung