AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Druck auf einen Drucker geht nicht, auf anderen schon
Thema durchsuchen
Ansicht
Themen-Optionen

Druck auf einen Drucker geht nicht, auf anderen schon

Ein Thema von DevilsCamp · begonnen am 28. Aug 2005 · letzter Beitrag vom 28. Aug 2005
Antwort Antwort
DevilsCamp
(Gast)

n/a Beiträge
 
#1

Druck auf einen Drucker geht nicht, auf anderen schon

  Alt 28. Aug 2005, 10:10
Hallo

Ich habe in meinem Programm den PrintDialog eingefügt um den Drucker bestimmen zu können.
Auf einem zweiten Formular existiert eine TImage-Komponente (Align=alClient) für die Druckvorschau.

Ich habe folgenden QuellText:

Delphi-Quellcode:
procedure TForm1.Drucken1;
var
  Image: TImage;
  pmaxx: Integer; // Breite der Ausgabe auf Drucker;
  pmaxy: Integer; // Entsprechend Höhe;
begin
  if PrintDialog1.Execute then
  begin
    pmaxx := Printer.PageWidth-1;
    pmaxy := Printer.PageHeight-1;

    Application.CreateForm(TForm2, Form2);
    Image := Form2.Image1;
    
    // Berechnung der Breite der Druckausgabe in Variable widt
    ...
    //
    Form2.ClientWidth := widt;
    Form2.ClientHeight := Round(widt*Power(2, 0.5)); // DIN A-Format einrichten
    Image.Picture.Bitmap.Width := widt;
    Image.Picture.Bitmap.Height := Round(widt*Power(2, 0.5)); // DIN A-Format einrichten

    with Image.Canvas do
    begin
      // Ausgabe auf Image.Canvas
      ...
      //
    end;

    Printer.Title := 'Druckausgabe';
    Printer.BeginDoc;
    Printer.Canvas.StrechDraw(Rect(0,0,pmaxx,pmaxy), Image.Picture.Bitmap);
    Printer.EndDoc;

    FreeAndNil(Form2);
  end;
end;

procedure TForm1.Drucken2;
var
  pmaxx : Integer;
  pmaxy : Integer;
begin
  if PrintDialog1.Execute then
  begin
    Printer.Title := 'Test';
    pmaxx := Printer.PageWidth-1;
    pmaxy := Printer.PageHeight-1;

    Printer.BeginDoc;
    Printer.Canvas.TextOut(pmaxx div 2 - Printer.Canvas.TextWidth('TEUEUZGJ') div 2,pmaxy div 15,'TEUEUZGJ');
    Printer.EndDoc;
  end;
end;
Ich habe 2 Drucker in meinem System installiert:
1 Lexmark Z65
1 PDFCreater

Wenn ich bei der Methode Drucken1 den PDFCreator wähle, dann funzt das drucken. Wähle ich aber den Lexmark, so schmeißt der Drucker ein leeres Blatt aus.
Zeichne ich aber direkt auf den Canvas von Printer (Methode Drucken2), dann erscheint die Ausgabe wie gewünscht auf dem Papier.


Den Umweg über ein TImage mache ich deshalb, weil man den Drucker und die Größe des Ausgabe-Papiers (A5, A4, A3) auswählen kann. So kann ich die Ausgabe mit fixen Daten vorbereiten und dann auf die entsprechende Ausgabegröße skalieren lassen (Ich weiß, dass dadurch Qualität verloren geht, aber das ist bei der Ausgabe unwichtig).
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Druck auf einen Drucker geht nicht, auf anderen schon

  Alt 28. Aug 2005, 10:36
das liegt einfach nur an der Art und weise wie du das Bild auf den Drucker überträgst. Nicht alle Drucker unterstützen die Methode von StretchDraw (bitblt etc.).
Wie es bei mir bisher immer funktioniert hat war die Pixel einzeln auf den Drucker zu malen, was aber auch sehr lange dauert und das Druckdocument wird auch sehr groß.
Alternativ könntest du auch fertige Komponenten verwenden die das Drucken für dich übernehmen.

eventuell bekommst du es ja mit der funktion MSDN-Library durchsuchenStretchDIBits hinn

und hier mal noch ein Beispiel zur Verwendung: http://www.delphipraxis.net/internal...=254138#254138
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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 01:06 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