Moze ktos mi pomoze i napisze w jaki sposob wydrukowac zawartosc listview
0
0
Hm...to nie jest taka prosta sprawa..Pokombinowałem trochę i coś skrobnołem w tym głupim delphi ale głowy nie dam że zadziała.Sory, ale sprawdzić nie mogę ponieważ skończył mi się tusz w drukarce i stoi w szafie ;).Ale według wszelkich obliczeń powinno działać.Oto kodzik:
var
b: TBitmap;
r :TRect;
begin
r := Rect (Listview.Left,Listview.Top,Screen.Width-Listview.Left-Listview.Width,Screen.Height-Listview.Top-Listview.Height);
b:= TBitmap.Create;
Listview.Canvas.Brushcopy (r,b,r,clWhite);
var b: tbitmap;
r :trect;
begin
r := Rect(list.Left,list.Top,screen.Width-list.Left-list.Width,screen.Height-list.Top-list.Height);
b:= tbitmap.Create;
list.Canvas.brushcopy (r,b,r,clWhite);
Drawimage(Listview.Canvas,r,b);
PrintImage(Image: TImage;40);
//wcześniej deklarujesz procedury Draw i Print image:
uses
printers;
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);
//jeśli ZoomPercent = 100, obraz zostanie wydrukowany na całej powierzchni strony
var
relHeight, relWidth: integer;
begin
Screen.Cursor := crHourglass; //ustawienie kursora na klepsydrę
Printer.BeginDoc;
with Image.Picture.Bitmap do
begin
if ((Width / Height) > (Printer.PageWidth / Printer.PageHeight)) then
begin
// rozciągniecie obrazka do szerokości strony drukarki
relWidth := Printer.PageWidth;
relHeight := MulDiv(Height, Printer.PageWidth, Width);
end
else
begin
// rozciagniecie obrazka do wysokosci strony drukarki
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;
//możesz popróbować też z:
procedure PrintBitmap(Canvas: TCanvas; DestRect: TRect; Bitmap: TBitmap);
var
BitmapHeader: pBitmapInfo;
BitmapImage: Pointer;
HeaderSize: DWORD;
ImageSize: DWORD;
begin
GetDIBSizes(Bitmap.Handle, HeaderSize, ImageSize);
GetMem(BitmapHeader, HeaderSize);
GetMem(BitmapImage, ImageSize);
try
GetDIB(Bitmap.Handle, Bitmap.Palette, BitmapHeader^, BitmapImage^);
StretchDIBits(Canvas.Handle,
DestRect.Left, DestRect.Top,
DestRect.Right - DestRect.Left,
DestRect.Bottom - DestRect.Top,
0, 0,
Bitmap.Width, Bitmap.Height,
BitmapImage,
TBitmapInfo(BitmapHeader^),
DIB_RGB_COLORS,
SRCCOPY)
finally
FreeMem(BitmapHeader);
FreeMem(BitmapImage)
end
end {PrintBitmap};
Uczciwie przyznaję że drukowanie bitmapy bazowałem na artykule z tego seriwsu, tak więc w razie nie jakichś problemów możesz weść na:
http://4programmers.net/view.html?id=276
Jak by coś nie działało to napisz to pokompinujemy...:).