Probleme mit Druckern (Laser und Tintenstrahl)



  • Nochmal zum Mitmeisseln: WAS funktioniert nicht?



  • Ganz einfach: das Bild wird nicht gedruckt, das funktioniert nicht. Vor dem Bild gebe ich noch etwas Text aus, was wunderbar bei beiden Druckern funktioniert. Doch das Bild mit Printer()->Canvas->StretchDraw(rect, Bitmap); wird beim Laserdrucker nicht gedruckt, beim Tintenstrahler jedoch schon.

    Ich hoffe es wurde nun klar, was das Problem ist.

    Vielleicht kennt ja jemand von euch die Lösung.

    Vielen Dank,
    Euer Entertainer



  • Das unterstützt nicht jeder Drucker.



  • Not all devices support the StretchBlt function. For more information, see the GetDeviceCaps.



  • Ja, doch der Witz ist ja gerade, dass es Funktioniert wenn ich es so mache:

    Bitmap->LoadfromFile("C:\\Test.bmp");
    Printer()->Canvas->StretchDraw(rect, Bitmap);
    

    Wenn ich nun aber das Bild selbst mit Canvas zeichne, funktioniert es nicht:

    Bitmap->Canvas->...
                    ...
    Printer()->Canvas->StretchDraw(rect, Bitmap);
    

    Das Bild im ersten fall ist das gleiche Bild wie im zweiten Fall nur eben mit dem Unterschied, dass es hier selbst mit Canvas neu gezeichnet wird.

    Ich verstehe den Unterschied nicht. Dass es einmal funktioniert, zeigt doch, dass es unterstützt wird, oder nicht.

    Ich bin für jeden Tipp dankbar!!!

    Vielen Dank,
    Euer Entertainer



  • Das Problem ist noch schlimmer!!!

    Ich kenn das auch. Je nach 'Zoomfaktor' fuer StretchDraw() wird das mal gedruckt und mal nicht. D.h.: das gleiche Bild kann mehrmals gedruckt erden - mit verschiedenen Zoomfaktoren - davon erscheinen einige Ausdrucke als leere Seite.

    Besonders oft passiert das bei Laserdruckern (spez. aeltere Bauart)

    Komisch ist, dass das bei Plottern kaum passiert.

    Eine Erklaerung wuerde mich auch interessieren.



  • Hallo Leute,

    Ich bin bisher immer von einem Fehler in meinem Code ausgegangen, aber DerAltenburger gab mir Sicherheit. Ich habe nun etwas im Internet herumgesucht. Für C++ Builder gibt es recht wenig, aber auf einer Delphi- Seite bin ich fündig geworden.

    Der Trick liegt darin, die Stretch- Arbeit nicht Printer()->Canvas->StretchDraw(...) zu überlassen, sondern es mit C++ direkt selbst vorzubereiten. Die Lösung liegt in folgender Funktion: StretchDIBits(...)

    Ich gebe euch hier den Link zu der entsprechenden Delphi- Seite:
    http://www.delphifaq.com/fq/q2233.shtml

    Ich hoffe, dass hilft auch euch weiter!!!

    Vielen Dank für eure Hilfe, besonders DerAltenburger, der mich erst auf die Idee gebracht hatte, dass der Fehler gar nicht zwingend bei mir liegen muss.

    Vielen Dank,
    Euer Entertainer



  • Hallo!?

    Jansen schrieb:

    Hört sich nach einem Problem des Druckertreibers an.

    a printer driver is not required to be able to translate that to its own device format, although some printers can do that.



  • jansen, er sagte doch das es funktioniert-wenn er das bitmap aus einer datei läd.
    nur über canvas zeichnen scheint ers net zu raffen.

    ich nehme an, unser entertainer hat zur überprüfung das bitmaps zurst im canvas gezeichnet, dann die bitmap eine datei gespeichert, wieder ausgelesen und dann funzt es auf einmal.



  • Was hat das mit meinem Kommentar zu tun? Der bezog sich allein auf die Aussage "der mich erst auf die Idee gebracht hatte, dass der Fehler gar nicht zwingend bei mir liegen muss".



  • Hallo Jansen,

    Ich wollte damit eigentlich nicht sagen, dass deine Aussage nicht hilfrei oder falsch war. Ich habe deine Angaben eher nicht genau verstanden und wusste auch nicht was ich auf deine Hilfestelung hin zu machen hatte. Wenn ich es mir im Nachhinein ansehe, hast du recht und du hast mir den Fehler bereits gesagt. Jedoch bin ich erst durch den Altenburger auf den Fehler und die Lösung gekommen. Der Fehler lag nicht bei deiner Hilfe, sondern bei mir, also sorry.

    Weiterhin bin ch allen dankbar, die mir versucht haben zu helfen,
    Euer Entertainer


Anmelden zum Antworten