AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Bitmap an den Drucker senden

Ein Thema von Moony · begonnen am 13. Mär 2008 · letzter Beitrag vom 19. Mär 2008
Antwort Antwort
Seite 3 von 4     123 4   
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#21

Re: Bitmap an den Drucker senden

  Alt 14. Mär 2008, 09:38
Hab das jetzt folgendermaßen gemacht:

Delphi-Quellcode:
  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;
Er fängt dann an was zu drucken, aber es kommt nicht raus.

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:
  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;
dann wir der Text gedruckt. Warum dann nicht mit dem Bild???
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#22

Re: Bitmap an den Drucker senden

  Alt 14. Mär 2008, 10:10
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
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#23

Re: Bitmap an den Drucker senden

  Alt 14. Mär 2008, 12:34
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.
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#24

Re: Bitmap an den Drucker senden

  Alt 14. Mär 2008, 15:18
Ich bitte euch um Hilfe!!! Ich möchte ja begreifen, warum er das nicht macht.

Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#25

Re: Bitmap an den Drucker senden

  Alt 14. Mär 2008, 19:11
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
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#26

Re: Bitmap an den Drucker senden

  Alt 17. Mär 2008, 13:42
Das hilft auch nicht!

Habe die DestX & DestY auf 0 gesetzt und wird immer noch nicht gedruckt...
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Bitmap an den Drucker senden

  Alt 17. Mär 2008, 13:52
GetDC funktioniert nur für Fenster aber doch nicht für alle möglichen Handles?!
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#28

Re: Bitmap an den Drucker senden

  Alt 17. Mär 2008, 15:03
Das mag sein.

Folgend seht ihr meinen letzten Code, der zwar dem Drucker sagt: ok, drucken,aber es wird nichts gedruckt.

Delphi-Quellcode:
  ...
  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;
Noch mal erklärt:
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.
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Vjay

Registriert seit: 2. Dez 2003
Ort: Berlin/Eschede
481 Beiträge
 
Delphi 7 Professional
 
#29

Re: Bitmap an den Drucker senden

  Alt 17. Mär 2008, 15:09
Und

Canvas.Handle:= getDC( prnhandle);

funtkioniert definitiv nicht?
Wer später bremst ist eher tot.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Bitmap an den Drucker senden

  Alt 17. Mär 2008, 15:15
Zitat von Vjay:
Und

Canvas.Handle:= getDC( prnhandle);

funtkioniert definitiv nicht?
Hast du das ausprobiert? laut msdn erwartet GetDC ein Fensterhandle und in den letzten Posts wurde auch schon auf GetDC verwiesen was aber nicht zu funktionieren scheint.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:14 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