listview

0

Moze ktos mi pomoze i napisze w jaki sposob wydrukowac zawartosc listview

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...:).

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