AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Auf Windows Fax drucken - Nur ein weißes Blatt
Thema durchsuchen
Ansicht
Themen-Optionen

Auf Windows Fax drucken - Nur ein weißes Blatt

Ein Thema von alleinherrscher · begonnen am 28. Feb 2008 · letzter Beitrag vom 29. Feb 2008
 
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Auf Windows Fax drucken - Nur ein weißes Blatt

  Alt 29. Feb 2008, 21:36
Danke, Union, aber das is auch nicht das Problem. Ich habe nach langem googlen Abhilfe gefunden:

Man muss anstatt GetMem bei Windows XP GlobalAlloc benutzen:

Delphi-Quellcode:
PROCEDURE PrintBitmap(Canvas: TCanvas; DestRect: TRect; Bitmap:TBitmap);

VAR BitmapHeader : pBitmapInfo;
    BitmapImage : POINTER;
    HeaderSize : DWORD; // Use DWORD for D3-D5 compatibility
    ImageSize : DWORD;
    kopierte_Zeilen : integer;
    alles_ok : boolean;
    OldMode : integer;
    InfoHandle, ImageHandle : THandle;

BEGIN
  GetDIBSizes(Bitmap.Handle, HeaderSize, ImageSize);

  // Anstelle von GetMem wird hier GlobalAlloc und GlobalLock verwendet,
  // da bei Verwendung von GetMem auf einigen Druckern sporatischentweder
  // eine scharze Grafikfläche oder eine weiße Grafikfläche anstelle der
  // Grafik selbst gedruckt wird.

  //GetMem(BitmapHeader, HeaderSize);
  //GetMem(BitmapImage, ImageSize);
  InfoHandle := GlobalAlloc(HeapAllocFlags, HeaderSize);
  BitmapHeader := GlobalLock(InfoHandle);
  ImageHandle := GlobalAlloc(HeapAllocFlags, ImageSize);
  BitmapImage := GlobalLock(ImageHandle);

  TRY
    alles_ok := GetDIB(Bitmap.Handle, Bitmap.Palette, BitmapHeader^,BitmapImage^);
    if not alles_ok then
      MessageDlg('Bitmap copy error!', mtWarning, [mbOk], 0);
    OldMode := SetStretchBltMode(Canvas.Handle, COLORONCOLOR);
    kopierte_Zeilen := StretchDIBits(Canvas.Handle,
                  DestRect.Left, DestRect.Top, // Destination Origin
                  DestRect.Right - DestRect.Left, // Destination Width
                  DestRect.Bottom - DestRect.Top, // Destination Height
                  0, 0, // Source Origin
                  Bitmap.Width, Bitmap.Height, // Source Width & Height
                  BitmapImage,
                  TBitmapInfo(BitmapHeader^),
                  DIB_RGB_COLORS,
                  SRCCOPY);
    if kopierte_Zeilen < 1 then
      begin
      if GetLastError <> NoError then
        MessageDlg(SysErrorMessage(getLastError), mtWarning, [mbOk],0);
    end;
    SetStretchBltMode(Printer.Canvas.Handle, OldMode);

  FINALLY

  // FreeMem(BitmapHeader);
  // FreeMem(BitmapImage)
  GlobalUnlock(ImageHandle);
  GlobalFree(ImageHandle);
  GlobalUnlock(InfoHandle);
  GlobalFree(InfoHandle);

  END
END {PrintBitmap};
Hoffe, dass dieser Thread wenigstens den Leuten hilft, die nach mir dieses Problem haben!

Gute nacht!
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
 


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 08:32 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 by Thomas Breitkreuz