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
Antwort Antwort
Benutzerbild von alleinherrscher
alleinherrscher

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

Auf Windows Fax drucken - Nur ein weißes Blatt

  Alt 28. Feb 2008, 15:18
Hi@all!

Ich scanne ein Bild ein, und habe es dann in einem Bitmap liegen (ziemlich groß, aber naja.)

Diese Befehle benutzte ich um das Bitmap auf dem Fax zu drucken:

Delphi-Quellcode:
Printername:='Fax';


Printer.PrinterIndex:=Printer.Printers.IndexOf(Printername);

if Printer.Printers[Printer.PrinterIndex]<>Printername then
  if not PrinterSetupDialog1.execute then exit;
 
    with Rect1 do
      begin
        Top:=0;
        Left:=0;
        Bottom:=Printer.PageHeight;
        right:=Printer.PageWidth;
      end;


Printer.BeginDoc;

for i:=0 to aImageList.Count-1 do
begin
  aBitmap:=aImageList.Items[i];
  Printer.Canvas.StretchDraw(rect1,aBitmap);
  if i<> aImageList.count-1 then
    Printer.NewPage;
end;

Printer.EndDoc;
Leider bekomme ich nur leere weiße Blätter im Fax, während, wenn ich anstatt auf das WindowsFax auf meinem Drucker drucke, funktioniert alles wunderbar...

Jemand ne idee woran das liegen kann? Wäre für eine schnelle Hilfe sehr dankbar!
Grüße,

ALleinherrscher
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

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

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

  Alt 28. Feb 2008, 15:27
Hey, ich entschuldige mich hiermit ganz dolle:

Hab die Lösung hier gefunden:
http://www.delphipraxis.net/internal...ht=printer+din

Tut mir irre leid, gehe mich jetzt in die ecke stellen und schämen, dass ich einen Thread dazu aufgemacht hab!

Schönen Tag noch und viele Grüße!
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

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

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

  Alt 28. Feb 2008, 16:06
Allerdings habe ich noch folgendes Problem: Die bilder kommen nicht richtig auf der Printer.canvas an: das ganze sieht dann hinterher wie folgt aus (siehe anhang) hat jemand eine Idee, woran dies liegen kann??

Ich benutze nun diesen Code um auf die Printercanvas zu schreiben:

Delphi-Quellcode:
procedure EnhStretchDraw
( Canvas : TCanvas;
           DestRect : TRect;
           ABitmap : TBitmap );
var
  Header, Bits : Pointer;
  HeaderSize : DWord;
  BitsSize : DWord;
begin
  GetDIBSizes(ABitmap.Handle, HeaderSize, BitsSize);
  GetMem(Header, HeaderSize);
  GetMem(Bits, BitsSize);
  try
    GetDIB(ABitmap.Handle, ABitmap.Palette, Header^, Bits^);
    StretchDIBits(Canvas.Handle, DestRect.Left, DestRect.Top,
        DestRect.Right, DestRect.Bottom,
        0, 0, ABitmap.Width, ABitmap.Height, Bits,TBitmapInfo(Header^),
        DIB_RGB_COLORS, SRCCOPY);
  finally
    FreeMem(Header);
    FreeMem(Bits);
  end;
end;
//edit: Richtig eingescannt werden Sie hingegen schon! Nur auf dem Fax wirds nicht richtig angezeigt!
Miniaturansicht angehängter Grafiken
fehler_252.jpg  
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

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

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

  Alt 29. Feb 2008, 10:33
Wie ich soeben rausgefunden habe, handelt es sich um einen Fehler in von 1997 von Borland vorgestellten Routine. (vgl. http://www.delphipraxis.net/internal...=stretchdibits)

Zitat von generic:
der obige code macht bei uns unter winxp probleme. wir drucken schwarz/weiss bitmaps und es kommt manchmal vor das die strechbld eine weiss oder schwarze seite druckt.
ich hab bei uns auf gdi+ umgestellt.
der fehler tritt nur auf wenn man viel druckt und ist leider nicht repoduzierbar.

Weiß jemand, etwas auf die Printer.canvas drucken kann OHNE dabei StretchDIBits (scheinbar mit Fehler behaftet) oder StrechDraw (Funktioniert ja nicht bei allen Printer.canvas) zu verwenden?

Bzw. kennt jemand eine Möglichkeit, StretchBiBits zu verwenden ohne dass der Fehler (wie oben im Anhang) auftritt?

Es wäre echt super, wenn ihr mir helfen könntet!
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#5

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

  Alt 29. Feb 2008, 12:06
Schu Dir mal diesen Beitrag an.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
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, 20: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
Antwort Antwort


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 00:19 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