Einzelnen Beitrag anzeigen

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