![]() |
Re: Bitmap an den Drucker senden
Hab das jetzt folgendermaßen gemacht:
Delphi-Quellcode:
Er fängt dann an was zu drucken, aber es kommt nicht raus.
myGraphic := TBitmap.Create;
myGraphic.LoadFromFile(ExtractFilePath(Application.ExeName) + '!NewCard.bmp'); X := GetDeviceCaps(PrntHandle,PHYSICALOFFSETX); Y := GetDeviceCaps(PrntHandle,PHYSICALOFFSETY); GetDIBSizes(myGraphic.Handle, HeaderSize, ImageSize); Bitmapheader := VirtualAlloc(nil, HeaderSize, MEM_COMMIT, PAGE_READWRITE); BitmapImage := VirtualAlloc(nil, ImageSize, MEM_COMMIT, PAGE_READWRITE); try StretchDIBits(PrntHandle, 0 - X, 0 - Y, 1027, 648, 0, 0, myGraphic.Width, myGraphic.Height, BitmapImage, TBitmapInfo(BitmapHeader^), DIB_RGB_COLORS, SRCCOPY); // Diese Funktion sagt einer DLL lediglich dass sie den Druckauftrag beenden kann -> EndDoc Result := _DCContinue(ICE_SMART_CARD_GOOD); finally VirtualFree(Bitmapheader, 0, MEM_FREE); VirtualFree(bitmapimage, 0, MEM_FREE); end; Wenn das nicht funktioniert, gibt es eine Möglichkeit anhand meines Handle, das Canvas des Drucker zu ermitteln? Dann könnte ich wenigstens darauf zeichnen. Wenn ich es so mache
Delphi-Quellcode:
dann wir der Text gedruckt. Warum dann nicht mit dem Bild??? :wall: :wall:
myGraphic := TBitmap.Create;
myGraphic.LoadFromFile(ExtractFilePath(Application.ExeName) + '!NewCard.bmp'); X := GetDeviceCaps(PrntHandle,PHYSICALOFFSETX); Y := GetDeviceCaps(PrntHandle,PHYSICALOFFSETY); GetDIBSizes(myGraphic.Handle, HeaderSize, ImageSize); Bitmapheader := VirtualAlloc(nil, HeaderSize, MEM_COMMIT, PAGE_READWRITE); BitmapImage := VirtualAlloc(nil, ImageSize, MEM_COMMIT, PAGE_READWRITE); try TextOut(PrntHandle, 0 - X, 0 - Y, PChar('Test'), Length('Test')); // Diese Funktion sagt einer DLL lediglich dass sie den Druckauftrag beenden kann -> EndDoc Result := _DCContinue(ICE_SMART_CARD_GOOD); finally VirtualFree(Bitmapheader, 0, MEM_FREE); VirtualFree(bitmapimage, 0, MEM_FREE); end; |
Re: Bitmap an den Drucker senden
Und was ist mit dem restlichen Code der bei meinem Link leigt (In der gleichen Antwort).
Hast du Codeoptimierung durch weglassen gemacht. Hast du den damaligen Thread komplett gelesen/verstanden. Im übrigen gibt es zu dem Thema noch weitere Threads wenn du also in der Suche Bitmap Drucken eingibst hast du jede menge Treffer. Auch ganz viel Code hab ich da schon vreöffentlicht und erklärungen abgegeben. Hab jetzt nicht die Zeit den Code zum xten mal hier reinzukopieren und nochmal erklären. Zerpflück ihn und versuch in zu verstehen dann gehts auch Gruß Matthias |
Re: Bitmap an den Drucker senden
Im anschließenden Code startest du den druckjob, setzt die Größen des Druckers, rufst die funktion zum schreiben der bitmap und beendest den druckjob.
Ich hab doch hier keine optimierung betrieben. Und das schrieben der Bitmap habe ich aus der vorherigen Routine umgesetzt. |
Re: Bitmap an den Drucker senden
Ich bitte euch um Hilfe!!! Ich möchte ja begreifen, warum er das nicht macht.
:cry: |
Re: Bitmap an den Drucker senden
Dein Fehler liegt vermutlich lediglich in der Zeile wo das Bild gedruckt werden soll
StretchDIBits(PrntHandle, 0 - X, 0 - Y, 1027, 648, 0, 0, Druckerhandle,device.left=0-X ??? Wenn du beim Nullpunkt X Absziehst wo wird vermutlich das Bild ausgegeben links neben dem Papier? gleiches Gilt für 0-Y hast du schonmal den wert einfach auf 0 gestezt// Hab ich kommentiert mit Destination = ZIEL myGraphic.Width, myGraphic.Height, BitmapImage, TBitmapInfo(BitmapHeader^), DIB_RGB_COLORS, SRCCOPY); Mal kurz die Zeile zerpflückt Gruß Matthias |
Re: Bitmap an den Drucker senden
Das hilft auch nicht!
Habe die DestX & DestY auf 0 gesetzt und wird immer noch nicht gedruckt... |
Re: Bitmap an den Drucker senden
GetDC funktioniert nur für Fenster aber doch nicht für alle möglichen Handles?!
|
Re: Bitmap an den Drucker senden
Das mag sein.
Folgend seht ihr meinen letzten Code, der zwar dem Drucker sagt: ok, drucken,aber es wird nichts gedruckt.
Delphi-Quellcode:
Noch mal erklärt:
...
myGraphic := TBitmap.Create; if FileExists(ExtractFilePath(Application.ExeName) + '!NewCard.bmp') then myGraphic.LoadFromFile(ExtractFilePath(Application.ExeName) + '!NewCard.bmp'); X := GetDeviceCaps(PrntHandle,PHYSICALOFFSETX); Y := GetDeviceCaps(PrntHandle,PHYSICALOFFSETY); GetDIBSizes(myGraphic.Handle, HeaderSize, ImageSize); Bitmapheader := VirtualAlloc(nil, HeaderSize, MEM_COMMIT, PAGE_READWRITE); BitmapImage := VirtualAlloc(nil, ImageSize, MEM_COMMIT, PAGE_READWRITE); try StretchDIBits(PrntHandle, 0, 0, 1027, 648, 0, 0, myGraphic.Width, myGraphic.Height, BitmapImage, TBitmapInfo(BitmapHeader^), DIB_RGB_COLORS, SRCCOPY); finally ... end; Ich bekomme ein Druckerhandle. Dieses Handle hält einen angefangenen Druckauftrag fest. Über dieses Handle muß ich die zu druckenden Daten an den Drucker schicken. Anschließend wird über eine andere Applikation der Druckauftrag mit diesem Handle beendet. Ich hoffe das ist soweit verständlich erläutert. |
Re: Bitmap an den Drucker senden
Und
Canvas.Handle:= getDC( prnhandle); funtkioniert definitiv nicht? |
Re: Bitmap an den Drucker senden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz