Autor Beitrag
jjturbo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 516

Win2000 prof., WinXP prof.
D4 Stand., D5 Prof, D7 Prof, D2007 Prof.
BeitragVerfasst: Fr 27.08.10 08:48 
Moin Forum,

ich zeichne mir die Daten eines zu druckenden Etikettes auf ein Bitmap, wobei das Längen-/Breitenverhältnis des Bitmaps des tatsächlichen Etiketts entspricht.

Jetzt schicke ich das Bitmap an den Drucker:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  if PrintDialog1.Execute then begin
    with Printer do begin
      Title       := Application.Title + ' Etikett drucken ';
      BeginDoc;
      Canvas.StretchDraw(Canvas.ClipRect,MyImage.Picture.Bitmap);
      EndDoc;
    end;//with Printer do begin
  end;//if PrintDialog1.Execute then begin


Dadurch werden aber schwarze Flächen nicht mehr richtig schwarz dargestellt, die Kanten der Schriften sind unscharf. Wie kann man es besser machen? Auf dem Bildschirm wird alles gestochen scharf dargestellt.

Gruß Oliver

_________________
Windows XP: Für die einen nur ein Betriebssystem - für die anderen der längste Virus der Welt...
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 27.08.10 09:48 
Wenn du StretchDraw verwendest, dann kann es sein, dass er stretched :D Gibts kein einfaches "Draw"

Hast du bedacht dass der Drucker ne höhere Auflösung hat? Machs mal so: Breite und Höhe des Bitmaps mal 3, entsprechend groß das Etikett ins Bitmap zeichnen und dann StretchDraw. Auf dem Drucker muss natürlich die Größe des Rects gleich bleiben, also nicht mal 3

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Sa 28.08.10 09:26 
user profile iconXion hat folgendes geschrieben Zum zitierten Posting springen:
Hast du bedacht dass der Drucker ne höhere Auflösung hat? Machs mal so: Breite und Höhe des Bitmaps mal 3, entsprechend groß das Etikett ins Bitmap zeichnen und dann StretchDraw. Auf dem Drucker muss natürlich die Größe des Rects gleich bleiben, also nicht mal 3
Es gibt auch Drucker mit krummen Auflösungen, z. B. 600 * 300 dpi. Besser ist es, die Auflösungen (LogPixelsX bzw. LogPixelsY) mit GetDeviceCaps vorher zu ermitteln.
Ich habe auch noch dunkel in Erinnerung (lang ist es her ...), daß man statt Stretchdraw besser StretchDIBits verwenden sollte. Beispiel siehe hier: www.swissdelphicente.../showcode.php?id=744
Eine andere Alternative wäre, direkt auf Printer.Canvas zu zeichnen und zu schreiben. Gerade beim Erstellen von Ertiketten bietet es sich doch an, bei Printer.Canvas eine Auflösung von 1/10 mm einzustellen. Man kann auch den Koordinatenursprung nach oben links in die Ecke verlegen.
Falls gewünscht, kann ich den SourceCode von meinem Etikettendruckprogramm per Email zuschicken (etwa 500 Zeilen).