Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   JvRichEdit drucken (https://www.delphipraxis.net/161729-jvrichedit-drucken.html)

t0mmy 18. Jul 2011 10:32

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:
JvRichEdit1.Print(JvRichEdit1.Lines.Text);
Drucke ich den Inhalt der JvRichEdit in einer Wurst.

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

t0mmy 18. Jul 2011 14:36

AW: JvRichEdit drucken
 
Also kann mir niemand helfen bzw. tipps geben... oder einen link -.-

p80286 18. Jul 2011 14:48

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

t0mmy 18. Jul 2011 14:58

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.

p80286 18. Jul 2011 17:14

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

t0mmy 19. Jul 2011 07:50

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 -.-

fkerber 19. Jul 2011 08:37

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

t0mmy 19. Jul 2011 13:40

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 -.-

p80286 19. Jul 2011 14:36

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:
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;
(Da Dir augenscheinlich die RTL fehlt habe ich sie einfach mal kopiert)

Vielleicht hilft Dir auch das hier weiter.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz