Newsgroup: it.comp.lang.delphi
Titolo: Printer.Canvas

Allora ragazzi...sto impazzendo da circa 2 giorni. Ho provato e
riprovato...ma nulla da fare.
Il mio problema è questo:
Prima di inviare la stampa, vorrei visualizzare un'anteprima.
Allora io mi sono creato il Canvas dell'oggetto TPrinter.
Da quanto ho potuto leggere nei precedenti post, è possibile visualizzare il
Canvas dell'oggetto TPrinter associandolo al Canvas di un oggetto Image. Il
problema è che non ci riesco...non ci riesco e non ci riesco.
Io uso queste istruzioni:
1 - Image1.Width:= oPrinter.PageWidth;
      Image1.Height:= oPrinter.PageHeight;
      Image1.Canvas.CopyRect(Image1.ClientRect, oPrinter.Canvas,
oPrinter.Canvas.ClipRect);
      Praticamente ho disegnato un oggetto Image. Dopo la creazione del
Canvas del TPrinter, lo assegno al Canvas dell'Image settando le sue
dimensioni  con  quelle dell'oggetto TPrinter. Questa prima soluzione mi fa
uscire solo l'oggetto Image bianco. Forse sarà troppo grande l'oggetto
TPrinter? Ho provato a vedere le dimensioni del Width ed Height del TPrinter
ed effettivamente tali proprietà sono settati con un valore numerico che
corrisponde al doppio di quelle dell'oggetto Image.
2 - Image1.Canvas.StretchDraw(Image1.ClientRect,
oPrinter.Canvas.Brush.Bitmap);
     Per ovviare all'ipotetico problema delle dimensioni eccessive
dell'oggetto TPrinter, ho provato a fare lo stretch dell'oggetto Image ma
non mi fa assolutamente nulla.
Qualcuno ha già risolto questo problema?
Sto impazzendo...spero che qualcuno mi possa aiutare.

 problema è che non ci riesco...non ci riesco e non ci riesco.
Ti scrivo un pò di codice (non molto elegante a dire il vero ;) ), che
potrebbe fare al caso tuo.
Il Form1 è semplice semplice, contiene solo un bottone il cui evento OnClick
è:
procedure TForm1.Button1Click(Sender: TObject);
var
  bmap      : TBitmap;
  Info      : PBitmapInfo;
  InfoSize  : DWORD;
  Image     : Pointer;
  ImageSize : DWORD;
  Bits      : HBITMAP;
  DIBWidth, DIBHeight: Longint;
  PrintWidth, PrintHeight: Longint;
  OPrintHeight           : Longint;
begin
    bmap:=TBitMap.Create;
        bmap.LoadFromFile('Immagine_da_stampare.bmp');
        Bits := bmap.Handle;
        GetDIBSizes(Bits, InfoSize, ImageSize);
        Info := AllocMem(InfoSize);
        Image := AllocMem(ImageSize);
        GetDIB(Bits, 0, Info^, Image^);
        with Info^.bmiHeader do
        begin
            DIBWidth := biWidth;
            DIBHeight := biHeight;
        end;
        PrintWidth := MulDiv(DIBWidth,
GetDeviceCaps(Printer.Handle,LOGPIXELSX), Self.PixelsPerInch);
        PrintHeight := MulDiv(DIBHeight,
GetDeviceCaps(Printer.Handle,LOGPIXELSY), Self.PixelsPerInch);
//   (A)     PrintWidth := MulDiv(DIBWidth,
GetDeviceCaps(Printer.Handle,LOGPIXELSX), 1000);
//   (A)    PrintHeight := MulDiv(DIBHeight,
GetDeviceCaps(Printer.Handle,LOGPIXELSY), 1000);
        OPrintHeight:=PrintHeight;
        StretchDIBits(Form1.Canvas.Handle, 0,0, PrintWidth, PrintHeight, 0,
0, DIBWidth, DIBHeight, Image, Info^, DIB_RGB_COLORS, SRCCOPY);
        FreeMem(Image, ImageSize);
        FreeMem(Info, InfoSize);
        Form1.Canvas.Font.Size:=12;
        Form1.Canvas.Font.Style:=[fsBold];
        Form1.Canvas.TextOut(0,OPrintHeight+50,'CIAOOooo!!!');
        bmap.FreeImage;
    FreeAndNil(bmap);
end;
Le linee commentate con (A) riducono di 1000 volte la dimensione
dell'immagine, puoi sperimentare per ottenere fattori di ingrandimento
diversi.
Scusa se non mi dilungo con la spiegazione ma non ho molto tempo, il tasto
magico "F1" sulle varie funzioni ti chiarirà ogni dubbio.
Saluti,
Carmine

 ha scritto nel messaggio
news:9i8w9.54869$aL4.1...@news1.tin.it...


Ciao Nek2000,
Mi dispiace di non esserti stato di grande aiuto purtroppo, non ho visto nel
messaggio
che utilizzi CLX. Io ho Delphi5 Enterprise in ufficio, perciň temo che per
la CLX non
posso esserti di supporto.
In bocca al lupo.

 ha scritto nel messaggio
news:apqub0$47pph$4...@ID-134361.news.dfncis.de...


 che utilizzi CLX. Io ho Delphi5 Enterprise in ufficio, perciò temo che per


 ha scritto nel messaggio
news:iAww9.59044$aL4.1...@news1.tin.it...
