drukowanie LIstView

0

czy ktos wie jak przerobic te oto funkcje aby dodatkowo drukowalo linie rozdzielajace wiersze:

procedure PrintListView(oListView: TListView);
  var
    v, h: Real;
    CurRect: TRect;
    CurStr: string;
    aCols: array of Integer; 
    CurItem, iColumnCount,pWidth, pHeight, i,CurLeft, NumPages, TmpPos: Integer;
    iTotColsWidth, iInnerWidth, TopMarg, LinesOnPage, CurLine, TekstHeight, CurCol: Integer;
  begin
    if PrintDialog.Execute then
      begin
        iColumnCount := oListview.Columns.Count;

        SetLength(aCols, iColumnCount + 1); // + 1 nodig ??? Delphi 5
        Printer.Title := 'Wydruk podsumowania za okres od ' + DateToStr(odDatePicker.Date) + ' do ' +
                          DateToStr(doDatePicker.date);

        Printer.Copies := 1;
        Printer.Orientation := poLandscape;

        Printer.BeginDoc;
        pHeight := Printer.PageHeight;
        pWidth := Printer.PageWidth;

        v := (pHeight + (2 * GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY))) / (29.7 * 0.95);
        //0.95 is a strange correction factor on the clients printer
        h := (pWidth + (2 * GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX))) / 21;

        // calculate total width
        iTotColsWidth := 0;
        for i:=0 to iColumnCount-1 do
          iTotColsWidth := iTotColsWidth + oListView.Columns[i].Width;

        // calculate space between lMargin and rMargin
        aCols[0] := Round(1.5 * h); //left margin
        aCols[iColumnCount + 0] := pWidth - Round(1.5 * h); //rigth margin
        iInnerWidth := aCols[iColumnCount + 0] - aCols[0]; // space between margins

        //calculate start of each column
        for i := 0 to iColumnCount - 1 do
          aCols[i + 1] := aCols[i] + Round(oListView.Columns[i].Width / iTotColsWidth * iInnerWidth);
        TopMarg := Round(2.5 * v);
        with Printer.Canvas do
          begin
            Font.Size := 8;
            Font.Style := [];
            Font.Name := 'Times New Roman';
            Font.Color := RGB(0, 0, 0);
            TekstHeight := Printer.Canvas.TextHeight('ddmmyyyy');
            LinesOnPage := Round((PHeight - (5 * v)) / TekstHeight);
            NumPages := 1;

          // gather number of pages to print
          while (NumPages * LinesOnPage) < oListView.Items.Count do
            inc(NumPages);
          // start
          CurLine := 0;
          for CurItem := 0 to oListView.Items.Count - 1 do
            begin
              if (CurLine > LinesOnPage) or (CurLine = 0) then
                begin
                  if (CurLine > LinesOnPage) then Printer.NewPage;
                  CurLine := 1;
                  if Printer.PageNumber = NumPages then
                    begin
                      MoveTo(aCols[1], topMarg);
                      for i := 1 to iColumnCount - 1 do
                      begin
                        LineTo(aCols[i], TopMarg + (TekstHeight * (oListView.Items.Count - CurItem + 2)));
                        MoveTo(aCols[i + 1], topMarg);
                      end;
                    end
                  else
                  begin

                    // draw vertical lines between data
                    for i := 1 to iColumnCount - 1 do
                      begin
                        MoveTo(aCols[i], topMarg);
                        LineTo(aCols[i], TopMarg + (TekstHeight * (LinesOnPage + 1)));
                      end;
                  end;

                Font.Style := [fsBold];
                // print column headers
                for i := 0 to iColumnCount - 1 do
                  begin
                    TextRect(Rect(aCols[i] + Round(0.1 * h), TopMarg - Round(0.1 * v), aCols[i + 1] - Round(0.1 * h)
                    , TopMarg + TekstHeight - Round(0.1 * v)), ((aCols[i + 1] - aCols[i]) div 2) +
                    aCols[i] - (TextWidth(oListview.Columns.Items[i].Caption) div 2),
                    TopMarg - Round(0.1 * v), oListview.Columns.Items[i].Caption);
                    //showmessage('print kolom: '+IntToStr(i));
                  end;

          // draw horizontal line beneath column headers

          MoveTo(aCols[0] - Round(0.1 * h), TopMarg + TekstHeight - Round(0.05 * v) +i);
          LineTo(aCols[iColumnCount] + Round(0.1 * h), TopMarg + TekstHeight - Round(0.05 * v));

          Font.Size := 8;
          Font.Style := [];
          TmpPos := (TextWidth('Podsumowanie: Wszystkich kursów: ' + kursyRazemEdit.Text +
                    ' w tym pudła: ' + pudlaRazemEdit.Text + '| Razem kursów płatnych: ' +
                    platneRazemEdit.Text + ' | Koszt: ' + zaplataRazemEdit.Text + ' zł' +
                    ' | Data: ' + DateToStr(Date) + '                     Strona: ' +
                   IntToStr(Printer.PageNumber) + ' / ' + IntToStr(NumPages))) div 2;

          TmpPos := PWidth - Round(1.5 * h) - (TmpPos * 2);

          Font.Size := 9;
          Font.Style := [];

          TextOut(TmpPos, Round(0.5 * v), 'Podsumowanie: Wszystkich kursów: ' + kursyrazemEdit.Text +
                    ' w tym pudła: ' + pudlaRazemEdit.Text + ' | Razem kursów płatnych: ' +
                    platneRazemEdit.Text + ' | Koszt: ' + zaplataRazemEdit.Text + ' zł' +
                    '         Data: ' + DateToStr(Date) + ' Strona: ' +
                    IntToStr(Printer.PageNumber) + ' / ' + IntToStr(NumPages));

          // print report title
          Font.Size := 18;
          if TmpPos < ((PWidth + TextWidth(tytulLabel.Caption)) div 2 + Round(0.75 * h)) then
            TextOut((PWidth - TextWidth(tytulLabel.Caption)) div 2, Round(1 * v), tytulLabel.Caption)
          else
            TextOut(Round(3 * h), Round(1 * v), przegladLabel.Caption);

          Font.Size := 9;
          Font.Style := [];
        end;

        CurRect.Top := TopMarg + (CurLine * TekstHeight);
        CurRect.Bottom := TopMarg + ((CurLine + 1) * TekstHeight);

        // print contents of Listview
        for CurCol := -1 to iColumnCount - 2 do
        begin
          CurRect.Left := aCols[CurCol + 1] + Round(0.1 * h);
          CurRect.Right := aCols[CurCol + 2] - Round(0.1 * h);
          try
            if CurCol = -1 then
              CurStr := oListView.Items[CurItem].Caption
            else
              CurStr := oListView.Items[CurItem].SubItems[CurCol];
          except
            CurStr := '';
          end;
          CurLeft := CurRect.Left; // align left side
          // write string in TextRect
          TextRect(CurRect, CurLeft, CurRect.Top, CurStr);
        end;
        Inc(CurLine);
      end;
    end;
    Printer.EndDoc;
  end;
end;
0

Czy myslisz, ze komus bedzie chcialo sie czytac Twoje zrodlo i jeszcze na dodatek dopisywac kolejne linie tylko po to, abys mogl pokazac kumplom ze napisales to i to? Mnie osobiscie sie nie wydaje...

0

Czy myslisz, ze komus bedzie chcialo sie czytac Twoje zrodlo i jeszcze na dodatek dopisywac kolejne linie tylko po to, abys mogl pokazac kumplom ze napisales to i to? Mnie osobiscie sie nie wydaje...

mi sie chce ale nie zrobie tego wystarczy dodac tylko jedna gora 2 linie pomysl troche ten kod i tak jest z faq sam go tam umiescilem :D

0

Jak już jest poruszany tan tamat, to jak w Delphi można drukować ??

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