Delphi-PRAXiS
Seite 1 von 3  1 23      

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 Drucken (https://www.delphipraxis.net/628-drucken.html)

CalganX 15. Aug 2002 13:48


Drucken
 
So, jetzt habe ich ein kleines Problem (Was sonst...):
Ich versuche eine Seite ausdem Drucker auszugeben. Das Problem dabei ist, dass nicht einfach ein Memo ausgedruckt werden soll, sondern auch noch andere Sachen. Es soll oben ein Header stehen (z.B. "Ausdruck aus meinem Programm" (zentriert)). Dann soll rechtsbündig ein Datum stehen und dann ein Trennstrich. Dann soll das eigentlich kommen. Titel + Dazugehöriger Text.
Es würde mir schon reichen, wenn mir jemand sagt, wie man eine Canvasfläche druckt (die könnte ich dann beliebig bearbeiten)...

Ich sag nur: HILFE, ich bin am verzweifeln

Chris

RomanK 15. Aug 2002 14:14

Der Drucker hat eine Eigenschaft printer.canvas
und dann musst du noch die Unit Printers einbinden!
Code:
printer.BeginDoc;
printer.canvas.textout(300,100,'Jan');
printer.EndDoc;

CalganX 15. Aug 2002 14:30

Danke, aber noch eine Fragen:
Wie groß ist die Canvasfläche?

Chris

Daniel 15. Aug 2002 14:38

@Chakotay:
Da würde ein Blick in die Delphi-Hilfe helfen. Das Objekt TPrinter bringt die Eigenschaften "PageWidth" und "PageHeight" mit, die genau die von Dir gewünschten Informationen liefern. :mrgreen:

Grüße,
Daniel

CalganX 15. Aug 2002 16:04

Hi!
So, jetzt läuft es mit dem drucken. Aber nur bei mir. Auf anderen Rechnern, da druckt er alles viel zu nah. Liegt das an der Auflösung? Hat jemand eine Ahnung, wie man das ändern kann?

Chris

CalganX 17. Aug 2002 11:15

So, folgendes Problem: Wenn ich auf meinem Rechner drucken will, dann klappt das auch alles Wunderbar. Wenn ich aber auf einem anderen Drucker/Rechner (gleiche Auflösung) drucken will, sind alle Texte zu nah aneinander bzw. die Rechtecke sind zu klein, dass der Text nicht mehr reinpasst (selbst wenn die Texte viel nah sind).
Ich habe mal was von QReport gehört, aber das ist ja eine ganz "normaler" Komponente, die sichtbar ist...

Hat jemand eine Lösung?

Chris

Daniel B 17. Aug 2002 11:39

Mir ist nicht so ganz klar wie das aussieht. Kannst du mal ein Screenshot machen? Und vielleicht mal eine Konsolenschriftart einstellen. Oder versteh ich das jetzt irgendwie falsch?

CalganX 17. Aug 2002 12:16

Liste der Anhänge anzeigen (Anzahl: 2)
Im Anhang findest du beide Ausdrucke. Ich glaube, du hast etwas falsch verstanden: beim Ausgedruckten ist was falsch.

Chris

PS: Das mit der Farbe liegt am Druckertyp...

Christian Seehase 17. Aug 2002 13:15

Moin Chris,

da der Fehler ja offensichtlich im Zeilenvorschub begründet ist:
Wie errechnest Du den Beginn der nächsten Zeile, bzw. des Rechtecks?
Und wie sieht das ganze auf den Rechnern aus, wenn Du statt auf den Printer.Canvas auf ein Form.Canvas "druckst"?

CalganX 17. Aug 2002 13:35

Hier mal der komplette Sourcecode...
@Christian: Sieht bei mir aus, wie gedruckt.
Am besten, sagt ihr mir anhand des Sourcecodes, was falsch ist...

Code:
[b]procedure[/b] TForm1.drucken1Click(Sender: TObject);
[b]var[/b]
  i, j: integer;
[b]begin[/b]
  [b]if[/b] PrintDialog1.Execute [b]then[/b] [b]begin[/b]
    Printer.Copies := PrintDialog1.Copies;
    Printer.BeginDoc;
    [b]with[/b] Printer [b]do[/b] [b]begin[/b]
      Canvas.Rectangle([color=#0055FF]100[/color], [color=#0055FF]100[/color], Printer.PageWidth - [color=#0055FF]100[/color], [color=#0055FF]300[/color]);

      Canvas.Font.Size := [color=#0055FF]14[/color];
      Canvas.Font.Name := [color=#0055FF]'Courier New'[/color];
      Canvas.Font.Style := [fsBold];
      Canvas.Font.Color := clBlue;
      CenterText([color=#0055FF]'Ausdruck aus RememberIt!'[/color], [color=#0055FF]110[/color]);

      Canvas.Font.Size := [color=#0055FF]13[/color];
      Canvas.Font.Style := [fsBold, fsItalic];
      Canvas.Font.Color := clBlack;
      CenterText(DateTimeToStr(Now), [color=#0055FF]190[/color]);

      [i][color=#000080]{ end headerinformations }[/color][/i]


      Canvas.Font.Size := [color=#0055FF]9[/color];
      Canvas.Font.Name := [color=#0055FF]'Courier New'[/color];
      Canvas.Font.Style := [fsItalic];
      Canvas.Font.Color := clBlack;
      CenterText([color=#0055FF]'Seite '[/color] + IntToStr(Printer.PageNumber), Printer.PageHeight - [color=#0055FF]50[/color]);

      Canvas.Font.Size := [color=#0055FF]12[/color];
      Canvas.Font.Name := [color=#0055FF]'Arial'[/color];
      Canvas.Font.Style := [fsBold];
      Canvas.Font.Color := clBlack;
      Canvas.TextOut([color=#0055FF]100[/color], [color=#0055FF]350[/color], ListBox1.Items[ListBox1.ItemIndex]);

      Canvas.Font.Size := [color=#0055FF]10[/color];
      Canvas.Font.Name := [color=#0055FF]'Arial'[/color];
      Canvas.Font.Style := [];
      Canvas.Font.Color := clBlack;
      j := [color=#0055FF]420[/color];
      [b]for[/b] i:=[color=#0055FF]0[/color] [b]to[/b] Memo1.Lines.Count -[color=#0055FF]1[/color] [b]do[/b] [b]begin[/b]
        [b]if[/b] i*(Canvas.TextHeight(Memo1.Lines[ i ])) = (PageHeight - [color=#0055FF]70[/color]) [b]then[/b] [b]begin[/b]
          [color=#000080][i]{ Hier gibt es noch ein Problem: Da macht er keine neue Seite...}[/i][/color]
          Printer.NewPage;
          j := [color=#0055FF]100[/color];
        [b]end[/b];
        Canvas.TextOut([color=#0055FF]200[/color], j + (i*[color=#0055FF]50[/color]), Memo1.Lines[ i ]);
      [b]end[/b];

      [color=#000080][i]{ end rememberinformations }[/i][/color]
    [b]end[/b];
    Printer.EndDoc;
  [b]end[/b];
[b]end[/b];
Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:11 Uhr.
Seite 1 von 3  1 23      

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