Newsgroup: it.comp.lang.delphi
Titolo: Salvare Printer.canvas in BMP

Salve al NG.
Pescando dalle esperienze personali, avete qualche suggerimento su come
salvare il canvas dell'oggetto Printer in una bitmap ?
Grazie
Andrea

 salvare il canvas dell'oggetto Printer in una bitmap ?
Scusami vorresti salvare quel devi mandare in stampa su una bitmap?
Antonio

Non potendo provare (non ho stampanti instalate quì e nn posso 
installarle) potresti provare questo:
[..]
var TB : TBitmap;
    TP : TPrinter;
begin
TP.Canvas.CopyRect(Rect(1,2,3,4),TB.Canvas,Rect(5,6,7,8));
end;
dove CopyRect(<Rettangolo di destinaz>, <TCanvas di destinaz>, 
<Rettangolo di origine>)
in questo modo COPI l'area sottesa dal rettangolo 5,6,7,8 nell'area 
1,2,3,4 del canvas TB
ok?
fammi sapere
--- posted by geoForum on 
http://www.delphiedintorni.it

 ha scritto nel messaggio
news:d7f962$smo$1...@newsreader.mailgate.org...
: Scusami vorresti salvare quel devi mandare in stampa su una bitmap?
Sě
Lo so che puň sembrare inutile o assurdo, ma č cosě...

 ha scritto nel messaggio
news:vWFme.8817$Wb....@tornado.fastwebnet.it...
: Non potendo provare (non ho stampanti instalate quì e nn posso
: installarle) potresti provare questo:
:
:
: [..]
: var TB : TBitmap;
:     TP : TPrinter;
: begin
: TP.Canvas.CopyRect(Rect(1,2,3,4),TB.Canvas,Rect(5,6,7,8));
: end;
:
: dove CopyRect(<Rettangolo di destinaz>, <TCanvas di destinaz>,
: <Rettangolo di origine>)
:
:
: in questo modo COPI l'area sottesa dal rettangolo 5,6,7,8 nell'area
: 1,2,3,4 del canvas TB
:
: ok?
:
: fammi sapere
:
Niente da fare.
Se uso TB.SaveToFile() ottengo un file con dimensione 0.
Avevo già provato con
with TBitmap.Create do
    begin
    PixelFormat := pf4bit;
    Width  := printer.PageWidth;
    Height := printer.PageHeight;
    BitBlt( canvas.handle, 0, 0, printer.PageWidth, printer.PageHeight,
printer.Handle, 0, 0, SRCCOPY );
    SaveToFile( 'C:\pippo.bmp' );
    Free;
    end;
Ma ottengo un file di dimensioni mega tutto bianco (mentre la stampa NON è
bianca).

Niente da fare.
vedi un pò se questo thread ti risolve il problema, se
no posta i problemi che hai incontrato, possibilmente
con il codice che hai utilizzato per CopyRect.
http://groups.google.it/group/it.comp.lang.delphi/browse_thread/thread/e462d1e5850c1319/f9d83ba2fcda0fea
	Ciao
	MassimoB
 
---------------------------------
http://www.massimobeschi.it/
---------------------------------
Se tu pagare come dici tu ...
Io lavorare come dico io ...
Se tu pagare come dico io ...
Io lavorare come dici tu ...
---------------------------------

 ha scritto nel messaggio
news:pgKme.486$is5...@tornado.fastwebnet.it...
: vedi un pň se questo thread ti risolve il problema, se
: no posta i problemi che hai incontrato, possibilmente
: con il codice che hai utilizzato per CopyRect.
:
:
http://groups.google.it/group/it.comp.lang.delphi/browse_thread/thread/e462d1e5850c1319/f9d83ba2fcda0fea
Ho spulciato il htread ed il codice che uso risulta:
  var
  rectFrom, rectTo: TRect;
  Bmp: TBitmap;
  begin
 rectFrom := Rect( 0, 0, Printer.PageWidth, Printer.PageHeight );
  rectTo   := Rect( 0, 0, Printer.PageWidth, Printer.PageHeight );
 Bmp := TBitmap.Create;
  try
    Bmp.PixelFormat := pf4bit;
    Bmp.Width  := rectFrom.Right - rectFrom.Left;
    Bmp.Height := rectFrom.Bottom - rectFrom.Top;
    Bmp.Canvas.CopyMode := cmSrcCopy;
    Bmp.Canvas.CopyRect( rectTo, Printer.Canvas, rectFrom );
    Bmp.SaveToFile( 'C:\pippo.bmp' );
  finally
    Bmp.Free;
    end;
  end;
Banale ma ... ZERO !!!!
Ho aggiunto la riga
    Bmp.PixelFormat := pf4bit;
in quanto il file risultate č "troppo" grande se uso il formato di default:
l'immagine che stampo č in bianco e nero, quindi non necessito di tanti
bit...
Ottengo un file di 15 Mb ...BIANCO, perfettamente BIANCO menter la stampa č
quella che deve essere.

Una cosa del genere, può avere più senso ?
 MemDC := CreateCompatibleDC( Printer.Canvas.Handle );
  hBmap := CreateCompatibleBitmap( Printer.Canvas.Handle, Printer.PageWidth,
Printer.PageHeight );
 OldBitmap := SelectObject( MemDC, hBmap );
  BitBlt( MemDC, 0, 0, Printer.PageWidth, Printer.PageHeight,
Printer.Canvas.Handle, 0, 0, SRCCOPY );
  SelectObject( MemDC, OldBitmap );
  bmp := TBitmap.Create;
  bmp.Handle := hbmap;
  bmp.Canvas.Refresh;
  bmp.SaveToFile('c:\pippo.bmp');
  bmp.Free;
  DeleteDC( MemDC );
Il risultato NON è quello voluto, quindi c'è qualcosa che non va.
Cosa ?
Mi viene da piangere ....
Andrea

Andrea
