Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TMemo + OEM_CHARSET ist beim Drucken unpräzise (https://www.delphipraxis.net/78094-tmemo-oem_charset-ist-beim-drucken-unpraezise.html)

APP 28. Sep 2006 21:21


TMemo + OEM_CHARSET ist beim Drucken unpräzise
 
Hallo,
ich habe ein TMemo mit dem Font 'Terminal' und als Charset'OEM_CHARSET' eingestellt.
Ich möchte damit die alte MS-DOS Klötzchengrafik nachbilden, das gelingt mir auch:

http://www.a2p.at/Lager/unbenannt1.JPG

Nun möchte ich dieses Memo drucken
Delphi-Quellcode:
    WITH Printer, canvas DO
      BEGIN
        PrinterIndex := -1;
        orientation := poPortrait;
        Font.Name := 'Terminal';
        Font.CharSet := OEM_CHARSET;
        Font.pitch := fpdefault;
        Font.style := [];
        Font.Size := 10;
      END;
...
    Printer.BeginDoc;
    FOR I := 0 TO Lst.Count - 1 DO
      BEGIN
        Printer.Canvas.TextOut(0, Line, Lst[I]);
...
das Drucken klappt zwar, aber die Linien sind nicht mehr gleichmäßig ausgerichtet:

http://www.a2p.at/Lager/unbenannt.JPG


Ich wollte das TMemo als Bitmap speichern und drucken, leider ist das Blatt dabei leergeblieben.
(Außerdem ist das bei 500-1000 Seiten doch a bisserl heftig, alles über bmps zu machen)


Vielleicht gibt es auch noch eine andere Lösung mit Klötzchengrafik?


Wer kann mir helfen?

marabu 29. Sep 2006 06:57

Re: TMemo + OEM_CHARSET ist beim Drucken unpräzise
 
Guten Morgen Armin,

es sollte nach deinen Vorstellungen funktionieren, wenn du auch den Pitch noch auf fpFixed einstellst.

Delphi-Quellcode:
object Memo: TMemo
  Left = 184
  Top = 364
  Width = 229
  Height = 149
  Font.Charset = OEM_CHARSET
  Font.Color = clWindowText
  Font.Height = -16
  Font.Name = 'Terminal'
  Font.Pitch = fpFixed
  Font.Style = []
  ParentFont = False
  TabOrder = 29
end

procedure TDemoForm.PrintButtonClick(Sender: TObject);
var
  i: Integer;
  prn: TextFile;
begin
  with Printer do
    Canvas.Font.Assign(Memo.Font);

  AssignPrn(prn);
  Rewrite(prn);
  with Memo do
    for i := 0 to Pred(Lines.Count) do
      WriteLn(prn, Lines[i]);
  CloseFile(prn);
end;
Grüße vom marabu

APP 29. Sep 2006 07:17

Re: TMemo + OEM_CHARSET ist beim Drucken unpräzise
 
Guten Morgen marabu,

danke für Deinen Tip,
ich habe das inzwischen auch schon gemacht, leider ohne erfolg :-(

Ich habe mal die Klötzchengrafik aus meinem Memo kopiert

SQL-Code:
Netzwerk 1                   Pumpe P7 oder P16 Hand ein
                       ÚÄÄÄ¿
           ÄE68.0   ÄÄp´ & ³
           ÄE36.7   ÄÄp´   ³
           ÄE70.2   ÄÄp´   ³
             ÚÄÄÄ¿     ³   ³
 ÄE109.3  ÄÄp´>=1³     ³   ³    ÚÄÄÄÄÄÄ¿
 ÄE10.1   ÄÄp´   ³ÄÄÄÄij   ³ÄĿij =   ³ ÄM177.4
             +ÄÄÄ+     +ÄÄÄ+    +ÄÄÄÄÄÄ+

E  68.0 = E68.0                     M10.094 Pumpe P7 BEFEHL EIN  +3P40ÄA3.0
E  36.7 = E36.7                     RM.PRpDUKTVENTIL PRpD.7/16 ZU 253.2 S13
E  70.2 = E70.2                     M10.095 Pumpe P16 BEFEHL EIN  +3P40ÄK16
E 109.3 = E109.3                    RM.DpSIERV.PRpD.7/16/17 KADY 1  35.1 S13
E  10.1 = E10.1                     RM.DpSIERV.PRpD.7/16/17 KADY 2  35.2 S13
M 177.4 = M177.4                    ENTLEERPUMPE PRpD.7/16 HANDBETRIEB  3.1
Wenn im Memo
Delphi-Quellcode:
Font.Charset = OEM_CHARSET
  Font.Color = clWindowText
  Font.Height = -16 
  Font.Name = 'Terminal'
  Font.Pitch = fpFixed
eingestellt ist, wird die Grafik (wie im alten Dos-Stil) korrekt angezeigt, wenn man sie mit Copy&Paste einfügt.
Jeder Versuch diese Grafik auszudrucken, scheitert an der ungenauen Darstellung am Papier.

marabu 29. Sep 2006 07:42

Re: TMemo + OEM_CHARSET ist beim Drucken unpräzise
 
Kann es sein, dass du die Ausgabe auf einem Tintenstrahldrucker machen willst? Wenn du keinen Seitendrucker verwendest, dann muss der Drucker wegen der fehlenden Kalibrierung am Zeilenanfang im unidirektionalen Modus betrieben werden.

Grüße, marabu

APP 29. Sep 2006 10:46

Re: TMemo + OEM_CHARSET ist beim Drucken unpräzise
 
Nein,
ich benutzte als Vorschau "FinePrint" als virtuelen Drucker, und drucke danach auf einen Tally 9412 Laserdrucker (o.ä.).

Ich habe nun ein Workaround gemacht, in dem ich Quickreport 3 die Ausgabe mit dem Terminalfont überlasse, das funkt gar nicht so schlecht :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:51 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