Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
Delphi XE2 Professional
|
Re: Auf Windows Fax drucken - Nur ein weißes Blatt
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
|
|
Zitat
|