![]() |
JvRichEdit drucken
Hallo!
Also ich hab ein formatiertes Dokument mit Bildern in JvRichEdit erstellt. Nun zu meinem problem.. Jedes dieser Bilder verfügt über eine Überschrift, dem Bild, und einem kleinen Text darunter. Mit dem Befehl:
Delphi-Quellcode:
Drucke ich den Inhalt der JvRichEdit in einer Wurst.
JvRichEdit1.Print(JvRichEdit1.Lines.Text);
Als erstes würde ich gerne wissen: 1. Wie bekomme ich wie im Notepad die Anzahl der Seite --> sprich Seite 1 von x 2. Wie löse ich das Wurstproblem? D.h. wenn ich einen Absatz habe (Überschrift, Bild und Text) und der nicht auf die Seite draufpasst.. soll er auf die nächste seite gedruckt werden. PS.: Is das eine Aufgabe der Druckprozedur oder muss ich da schon beim erstellen des Dokumentes in der JvRichEdit einstellungen vornehmen. mfg |
AW: JvRichEdit drucken
Also kann mir niemand helfen bzw. tipps geben... oder einen link -.-
|
AW: JvRichEdit drucken
Nun mal nicht so ungeduldig.
Zunächst einmal habe ich keine Ahnung was "Wurst" mit Drucken zu tun hat, darum kann ich Dir gar keine detailierten Infos weiterreichen. Im Prinzip wird bei jeder Textverarbeitung der Seitenumbruch abhängig vom zu bedruckenden Papier gemacht. Oder besser, der Seitenumbruch erfolgt an Hand der vom Druckertreiber gemeldeten Daten über das Paperformat. Ältere Textverarbeitugssysteme wurden noch direkt mit diesen Werten gefüttert, so sahen dann auch einige Ausdrucke aus. Gruß K-H |
AW: JvRichEdit drucken
Hallo!!
Also, Ich habe vlt meine frage falsch und zu lang formuliret.. Kurz: Wie bekomme ich einen automatischen Zeilenumbruch (wenn es sowas für TJvRichEdit überhaupst gibt -.-)..und wie ist es möglich die Seitennummerierung einzufügen? Also der Text wird nur auf A4 gedruckt.. falls das was hilft. |
AW: JvRichEdit drucken
Dann schau mal nach .Pagerect, dort sollte das Papierformat definiert sein.
Soweit ich weiß, kann TRichEdit nichts mit "Header" und "Footer" anfangen, aber bei TJvRichEdit kann das ja anders sein. Gruß K-H |
AW: JvRichEdit drucken
.PageRect scheint interessant zu sein.. aber is es das richtige nachdem ich suche.. naja jetzt kommt sicher.. ja probiers aus.
Aber da ich schon über 30 seiten verdruckt habe durchs probieren.. bin ich mittlerweile vorsichtiger geworden... PageRect gibt doch nur das Rechteck an.. indem der inhalt gedruckt wird. Wie soll ich da eine intelligenten Seitenumbruch erstellen... der mir bei einem Absatz mit Überschrift diesen automatisch auf die nächste Seite druckt??? Zudem kommt die Seitennummerierung -.- |
AW: JvRichEdit drucken
Hi,
kleiner Tipp am Rande: Nutze zum Testen doch einen PDF-Drucker (z.B. FreePDF (XP)) - da kannst du testen so viel du willst und es rettet den Regenwald ;) LG, Frederic |
AW: JvRichEdit drucken
Danke für den Tipp.. werd ich machen... (warum ist mir das nicht eingefallen *grübel*)
Naja.. Wenn ich noch wüsste wie ich eine formatierte durckausgabe erstelle dann wär mein problem gelöst.. bis dahin probier ich mal rum -.- |
AW: JvRichEdit drucken
Also vorneweg, das Trichedit ist Kein Textverarbeitungssystem!
Es Ersetzt nicht Word & Co! D.h. es gibt keine Kopf und Fußzeile, keine Abschnittswechsel, keine Seitenzählung usw.! Wenn Du eine Seitenzählung willst, dann bleibt Dir nichts anderes als die Ausdruckroutine an Deine Bedürfnisse anzupassen:
Delphi-Quellcode:
(Da Dir augenscheinlich die RTL fehlt habe ich sie einfach mal kopiert)
procedure TCustomRichEdit.Print(const Caption: string);
var Range: TFormatRange; LastChar, MaxLen, LogX, LogY, OldMap: Integer; SaveRect: TRect; begin FillChar(Range, SizeOf(TFormatRange), 0); with Printer, Range do begin Title := Caption; BeginDoc; hdc := Handle; hdcTarget := hdc; LogX := GetDeviceCaps(Handle, LOGPIXELSX); LogY := GetDeviceCaps(Handle, LOGPIXELSY); if IsRectEmpty(PageRect) then begin rc.right := PageWidth * 1440 div LogX; rc.bottom := PageHeight * 1440 div LogY; end else begin rc.left := PageRect.Left * 1440 div LogX; rc.top := PageRect.Top * 1440 div LogY; rc.right := PageRect.Right * 1440 div LogX; rc.bottom := PageRect.Bottom * 1440 div LogY; end; rcPage := rc; SaveRect := rc; LastChar := 0; MaxLen := GetTextLen; chrg.cpMax := -1; // ensure printer DC is in text map mode OldMap := SetMapMode(hdc, MM_TEXT); SendMessage(Self.Handle, EM_FORMATRANGE, 0, 0); // flush buffer try repeat rc := SaveRect; chrg.cpMin := LastChar; LastChar := SendMessage(Self.Handle, EM_FORMATRANGE, 1, Longint(@Range)); if (LastChar < MaxLen) and (LastChar <> -1) then NewPage; until (LastChar >= MaxLen) or (LastChar = -1); EndDoc; finally SendMessage(Self.Handle, EM_FORMATRANGE, 0, 0); // flush buffer SetMapMode(hdc, OldMap); // restore previous map mode end; end; end; Vielleicht hilft Dir auch das ![]() Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz