AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Exakte Druckposition der letzten RichEdit-Zeile herausfinden
Thema durchsuchen
Ansicht
Themen-Optionen

Exakte Druckposition der letzten RichEdit-Zeile herausfinden

Ein Thema von gullatrulla · begonnen am 7. Jul 2008 · letzter Beitrag vom 8. Jul 2008
Antwort Antwort
gullatrulla

Registriert seit: 11. Mai 2004
Ort: Malans (Schweiz)
43 Beiträge
 
Delphi 11 Alexandria
 
#1

Exakte Druckposition der letzten RichEdit-Zeile herausfinden

  Alt 7. Jul 2008, 10:53
Hallo Delphi-Folks

Ich möchte ein mehrseitiges RTF-Dokument drucken.

Soweit gemäss untenstehender Source kein Problem
Delphi-Quellcode:
//----------------------------------------------------------------------
Printer.BeginDoc;
...
SendMessage(Handle, EM_FORMATRANGE, 0, 0);
try
  repeat
       chrg.cpMin := LastChar;
       LastChar := SendMessage(Self.Handle, EM_FORMATRANGE, 1, Longint(@Range));

       if (LastChar < MaxLen) and (LastChar <> -1) then begin
          NewPage;
          Inc(PageCountRich);
       end;
  until (LastChar >= MaxLen) or (LastChar = -1);
  finally
        SendMessage(Handle, EM_FORMATRANGE, 0, 0);
        SetMapMode(hdc, OldMap);
  end;

Printer.EndDoc;
//----------------------------------------------------------------------

Nun sollte ich nach der letzten Zeile des RTF-Dokuments noch zusätzlich
eine Zeile drucken.

Gibt es eine Möglichkeit die exakte Pixel-Druckposition der letzten RTF-Zeile zu ermitteln,
damit die "manuelle" Zeile exakt unterhalb des RTF-Dokuments gedruckt werden kann?

Herzlichen Dank für Eure Hilfe
Roland

[edit=Sharky][Delphi]-Tags gesetzt. Mfg, Sharky[/edit]
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Exakte Druckposition der letzten RichEdit-Zeile herausfi

  Alt 7. Jul 2008, 11:16
Hallo Roland,

am bequemsten gibst du ein mehrseitiges RTF-Dokument mit Fußtext sicher über einen Report aus, egal ob Seitenfuß oder Reportfuß. Du schreibst, dass du eine Schlußzeile unter deinem Dokument ausgeben möchtest. Wenn du das mit EM_FORMATRANGE machen möchtest, dann könntest du den zu druckenden Schlusstext einfach an das Ende des Dokuments im RichEdit schreiben, bevor du das Dokument dann renderst.

Grüße vom marabu
  Mit Zitat antworten Zitat
gullatrulla

Registriert seit: 11. Mai 2004
Ort: Malans (Schweiz)
43 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Exakte Druckposition der letzten RichEdit-Zeile herausfi

  Alt 7. Jul 2008, 11:23
Hi marabu

Danke für den Tip.

Ich habe auch schon daran gedacht die Zeile vor dem Druck einzufügen.
Dies würde insofern auch funktionieren.

Leider sollten innerhalb dieser "manuellen" Zeile noch mehrer Tabulatorpositionen
gesetzt werden (rechts- UND linksbündig).
Ich habe jedoch noch nicht herausgefunden wie ich innerhalb einer Richedit-Komponente
rechts und linksbündige Tabulatorpositionen setzen kann (innerhalb der gleiche Zeile!)

Herzliche Grüsse
Roland
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Exakte Druckposition der letzten RichEdit-Zeile herausfi

  Alt 7. Jul 2008, 11:30
Du könntest dir das Leben sehr leicht machen, indem du die Zeile samt Tabulatoren in einem Word-Processor entwirfst, dann als RTF-Dokument speicherst und den RichText dann als Literal - evtl. mit Format() - deinem Dokument hinzufügst.
  Mit Zitat antworten Zitat
gullatrulla

Registriert seit: 11. Mai 2004
Ort: Malans (Schweiz)
43 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Exakte Druckposition der letzten RichEdit-Zeile herausfi

  Alt 7. Jul 2008, 11:40
Word-Processor??

Meinst Du Word im Hintergrund öffnen --> Zeile generieren -->
Dokument speichern und in RTF einfügen?

Leider habe ich ca 80 unterschiedliche Dokumente auszudrucken.
Ich kann mir vorstellen, dass diese Prozedur sehr zeitanwendig wird.

Gruss
Roland
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Exakte Druckposition der letzten RichEdit-Zeile herausfi

  Alt 7. Jul 2008, 12:27
Ich dachte eher daran, Word o.ä. einmal zur Entwurfszeit zu benutzen und das Ergebnis - z.B. als FormatString - im Projekt zu verwenden.

Das wäre ein alternativer Ansatz zu einigen Zeilen API-Programmierung.
  Mit Zitat antworten Zitat
gullatrulla

Registriert seit: 11. Mai 2004
Ort: Malans (Schweiz)
43 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Exakte Druckposition der letzten RichEdit-Zeile herausfi

  Alt 7. Jul 2008, 17:09
Herzlichen Dank für Deinen Tipp
Ich versuchs mal.

Gruss Roland
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Exakte Druckposition der letzten RichEdit-Zeile herausfi

  Alt 8. Jul 2008, 20:07
Zitat von gullatrulla:
Gibt es eine Möglichkeit die exakte Pixel-Druckposition der letzten RTF-Zeile zu ermitteln,
damit die "manuelle" Zeile exakt unterhalb des RTF-Dokuments gedruckt werden kann?
Auch die gibt es, obwohl dazu heutzutage nichts mehr im MSDN zu finden ist. Du kannst dazu die Kombination von EM_FORMATRANGE(0)/EM_DISPLAYBAND nutzen - Beispiel:
Delphi-Quellcode:
//----------------------------------------------------------------------
Printer.BeginDoc;
...
SendMessage(Handle, EM_FORMATRANGE, 0, 0);
try
  Range.rcPage := Range.rc; // Rechteck merken, falls nicht bereits geschehen
  repeat
    chrg.cpMin := LastChar;

    Range.rc := Range.rcPage; // Rechteck wiederhestellen
    LastChar := SendMessage(Self.Handle, EM_FORMATRANGE, 0, LParam(@Range));
    SendMessage(Self.Handle, EM_DISPLAYBAND, 0, LParam(@Range.rc));
    { In Range.rc.bottom steht jetzt die unterste Pixelposition,
      bis zu der etwas gedruckt wurde. }


    if (LastChar < MaxLen) and (LastChar <> -1) then begin
      NewPage;
      Inc(PageCountRich);
    end;
  until (LastChar >= MaxLen) or (LastChar = -1);
finally
  SendMessage(Handle, EM_FORMATRANGE, 0, 0);
  SetMapMode(hdc, OldMap);
end;

Printer.EndDoc;
Sicher musst du damit noch ein bisschen herumprobieren. Ich benutze es, um damit einzelne (stellenweise mehr als 2000) RTF-Fragmente zusammen mit Kapitel- und Abschnittsüberschriften wie Fließtext als ein Dokument auszudrucken.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 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