Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Drucken, einzelne Texte 90° gedreht (https://www.delphipraxis.net/190427-drucken-einzelne-texte-90%B0-gedreht.html)

schand99 3. Okt 2016 08:44

Delphi-Version: 5

Drucken, einzelne Texte 90° gedreht
 
Hallo Profis,

habe wieder ein Problem. Beim Ausdrucken von technischen Daten eines Bauteiles würde ich gerne ein paar Maßzahlen 90° gedreht auf das Papier bringen. Habe hier im Forum etwas gefunden, das sieht so aus
Delphi-Quellcode:
   with Printer.Canvas do
      begin
        try
           AcFont := Font;
           Recall := TFontRecall(Font);
           Font.Orientation := 2700;
           BText := Form1.Edit1.Text; // Höhe Fläche
           THoch := TextWidth(BText);
           TBreit := TextHeight(BText);
           TextOut(XPos + 855 - TBreit - 5, YPos - 225 - Trunc(THoch / 2), BText);
        finally
           Font.Orientation := 0;
           Recall.Free;
           Font := AcFont;
        end;
      end;
   end;
Das funktionier auch soweit. Nicht aber wenn ich den Druckauftrag ein zweites mal starte.
Dann meldet sich das Progamm mit "ungültige Zeigeroperation", nach dem Beenden erscheint dann auch Runtime error 217 at 004089D5.
Was mich zusätzlich wundert ist, dass nach dem Recall.Free eigentlich die 90° Drehung der Schrift aufgehoben sein sollte. Ist sie aber nicht, deshalb musste ich die Drehung auf 0° setzten.
Habe es auf verschiedenen Druckern im Netzwerk probiert, bei allen die selben Fehler. Ganz schlecht funktioniert der im Windows 10 enthaltene "Microsoft print to PDF".
Printer.Enddoc schließt den Druckauftrag zwar ab, jedoch werden Einstellungen für den nächsten Druckjob weiterverwendet.
Hätte jemand einen Tipp wie ich das Problem lösen könnte?

dummzeuch 3. Okt 2016 10:00

AW: Drucken, einzelne Texte 90° gedreht
 
Zitat:

Zitat von schand99 (Beitrag 1349551)
Delphi-Quellcode:
   with Printer.Canvas do
      begin
        try
           AcFont := Font;
           Recall := TFontRecall(Font);
//...
           Recall.Free;
           Font := AcFont;
        end;
      end;
   end;

Irgendwie sind mir auf den ersten Blick da zuviele Fonts im Spiel. Und vermutlich wird der falsche davon freigegeben. Ausserdem benutzt Du TFontRecall falsch.

Ohne es getestet zu haben, wuerde ich es wie folgt programmieren:

Delphi-Quellcode:
   with Printer.Canvas do
      begin
        try
           Recall := TFontRecall.Create(Font);
//...
           Recall.Free;
        end;
      end;
   end;

schand99 3. Okt 2016 11:29

AW: Drucken, einzelne Texte 90° gedreht
 
Danke, das war's!


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