Drukowanie w Delphi

0

Kolejny problem mam z drukowaniem.

Robie sobie w delphi (rysuje na canvasie) plan miasta.

"wyskakuje" sobie forma z narysowanym planem - forma jest 800x600
i mam zamiar to wydrukowac. Jak mam to wydrukowac na kartce A4, i zeby wszystko bylo rozmieszczone jak trza. :D

Kto bawił sie w drukowanie, takie szczegółowe, nie interesuje mnie drukowanie z notatnika lub worda??

0

TForm + F1

help rządzi, i pokaże Ci, że TForm ma metodę Print.

Vendro: czy na pewno zrozumiałeś pytanie? poza tym jak sobie wyobrażasz zrzucenie obrazu formy do pliku .doc???

0

A ja polecam moduł printers, w którym jest taki fajny obiekt printer. Ma własny canvas, na którym można rysować, a potem go wydrukować.

0

Drukowanie obrazkow:
1 sposob:

with Printer do
  begin
    BeginDoc;
    try
      ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
      ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
      RR := Rect(0, 0, Image1.picture.Width * scaleX, Image1.Picture.Height * ScaleY);
      Canvas.StretchDraw(RR, Image1.Picture.Graphic);

    finally
      EndDoc;  
    end;
  end;

2 sposob:

procedure DrawImage(Canvas: TCanvas; DestRect: TRect; ABitmap: TBitmap);
var
  Header, Bits: Pointer;
  HeaderSize: DWORD;
  BitsSize: DWORD;
begin
  GetDIBSizes(ABitmap.Handle, HeaderSize, BitsSize);
  Header := AllocMem(HeaderSize);
  Bits := AllocMem(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, HeaderSize);
    FreeMem(Bits, BitsSize);
  end;
end;

procedure PrintImage(Image: TImage; ZoomPercent: Integer);
//100 zoomu to cala kartka
var
  relHeight, relWidth: integer;
begin
  Screen.Cursor := crHourglass;
  Printer.BeginDoc;
  with Image.Picture.Bitmap do
  begin
    if ((Width / Height) > (Printer.PageWidth / Printer.PageHeight)) then
    begin
      relWidth := Printer.PageWidth;
      relHeight := MulDiv(Height, Printer.PageWidth, Width);
    end
    else
    begin
      relWidth  := MulDiv(Width, Printer.PageHeight, Height);
      relHeight := Printer.PageHeight;
    end;
    relWidth := Round(relWidth * ZoomPercent / 100);
    relHeight := Round(relHeight * ZoomPercent / 100);
    DrawImage(Printer.Canvas, Rect(0, 0, relWidth, relHeight), Image.Picture.Bitmap);
  end;
  Printer.EndDoc;
  Screen.cursor := crDefault;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1