Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Stampanje ListViewa

[es] :: Pascal / Delphi / Kylix :: Stampanje ListViewa

[ Pregleda: 4326 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mikap
Miroslav Petrovic
none
Vranje

Član broj: 3538
Poruke: 86
*.ptt.yu

ICQ: 279012758
Sajt: www.dzeki.net


Profil

icon Stampanje ListViewa24.04.2003. u 13:28 - pre 255 meseci
Da li zna neko kako da ostamtam ListView kolone i ostalo...
by samadhi
Let there be Pascal and God made Lazarus and blessed Linux
 
Odgovor na temu

mikap
Miroslav Petrovic
none
Vranje

Član broj: 3538
Poruke: 86
*.ptt.yu

ICQ: 279012758
Sajt: www.dzeki.net


Profil

icon Re: Stampanje ListViewa30.04.2003. u 02:55 - pre 255 meseci
Evo da odgovorim sam sebi ko sto rece covek sa yudelphi news servera

skinite komponentu sa www.tmssoftware.com za source cete morati da
izdvojite neku paru...
by samadhi
Let there be Pascal and God made Lazarus and blessed Linux
 
Odgovor na temu

nnn
Tech Lead
Haxr.io
Beograd

Član broj: 16743
Poruke: 679
*.yubc.net.



+87 Profil

icon Re: Stampanje ListViewa29.04.2005. u 23:06 - pre 230 meseci
Ova komponenta treba da se plati. Ima li neko kod koji bi odstampao listview? Ja sam nasao sledeci
Code:

procedure TMainForm.FormCreate(Sender: TObject);
var
  RReg: TRegIniFile;
  Status: Integer;
begin
  Caption := produktname;
  RReg := TRegIniFile.Create(Reg);
  try
    with RReg do
    begin
      Status := ReadInteger('Window', 'State', 1);
      case Status of
        1:
          begin
            MainForm.WindowState := wsNormal;
            MainForm.ClientWidth := ReadInteger('Window', 'Width', 610);
            MainForm.ClientHeight := ReadInteger('Window', 'Height', 366);
            MainForm.Top := ReadInteger('Window', 'Top', 10);
            MainForm.Left := ReadInteger('Window', 'Left', 10);
          end;
        2: PostMessage(MainForm.Handle, wm_SysCommand, sc_Minimize, 0);
        3: MainForm.WindowState := wsMaximized;
      end;
    end;
  finally
    RReg.Free;
  end;
end;

procedure TMainForm.FormDestroy(Sender: TObject);
var
  RReg: TRegIniFile;
begin
  RReg := TRegIniFile.Create(Reg);
  try
    with RReg do
    begin
      case MainForm.WindowState of
        wsNormal:
          begin
            WriteInteger('Window', 'Width', MainForm.ClientWidth);
            WriteInteger('Window', 'Height', MainForm.ClientHeight);
            WriteInteger('Window', 'Top', MainForm.Top);
            WriteInteger('Window', 'Left', MainForm.Left);
            WriteInteger('Window', 'State', 1);
          end;
        wsMinimized: WriteInteger('Window', 'State', 2);
        wsMaximized: WriteInteger('Window', 'State', 3);
      end;
    end;
  finally
    RReg.Free;
  end;
end;

procedure TMainForm.PrintListview(oListView: TListView);
//-----------------------------------------------------
var
  pWidth, pHeight, i: Integer;
  v, h: Real;
  CurItem, iColumnCount: Integer;
  //aCols: array[0..50] of Integer; // Delphi 3
  aCols: array of Integer; // Delphi 5
  iTotColsWidth, iInnerWidth, TopMarg, LinesOnPage, CurLine, TekstHeight, CurCol: Integer;
  CurRect: TRect;
  CurStr: string;
  CurLeft, NumPages, TmpPos: Integer;

begin
  if PrintDialog1.Execute then
  begin
    iColumnCount := oListview.Columns.Count;
    SetLength(aCols, iColumnCount + 1); // + 1 nodig ??? Delphi 5
    Printer.Title := 'Listview Print';
    Printer.Copies := 1;
    Printer.Orientation := poPortrait;
    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 := 10;
      Font.Style := [];
      Font.Name := 'Times New Roman';
      Font.Color := RGB(0, 0, 0);
      TekstHeight := Printer.Canvas.TextHeight('dummy');
      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));
          LineTo(aCols[iColumnCount] + Round(0.1 * h), TopMarg + TekstHeight - Round(0.05 * v));

          // print date and page number
          Font.Size := 8;
          Font.Style := [];
          TmpPos := (TextWidth('Date: ' + DateToStr(Date) + ' Page: ' +
            IntToStr(Printer.PageNumber) + ' / ' + IntToStr(NumPages))) div 2;

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

          Font.Size := 8;
          Font.Style := [];
          TextOut(TmpPos, Round(0.5 * v), 'Date: ' + DateToStr(Date) +
            ' Page: ' + IntToStr(Printer.PageNumber) + ' / ' + IntToStr(NumPages));

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

          Font.Size := 10;
          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;

procedure TMainForm.BtnQuitClick(Sender: TObject);
begin
  Close;
end;

procedure TMainForm.BtnPrintClick(Sender: TObject);
begin
  PrintListview(Listview);
end;

ali imam gdesku kad ga pozivam "list index out of bounds (5)" Ima li neko neku ideju?
 
Odgovor na temu

bancika
Branislav Stojkovic

Član broj: 24844
Poruke: 631
213.244.208.*

Sajt: www.diy-fever.com


+1 Profil

icon Re: Stampanje ListViewa30.04.2005. u 00:04 - pre 230 meseci
a da recimo generises html kod u kome ces lepo da napravs tabelu i iskoristis internet explorer da odstampas to?
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
 
Odgovor na temu

nnn
Tech Lead
Haxr.io
Beograd

Član broj: 16743
Poruke: 679
*.yubc.net.



+87 Profil

icon Re: Stampanje ListViewa30.04.2005. u 12:05 - pre 230 meseci
Kako to da uradim?

Nasao sam jednostavan kod koji od listview pravi bitmap. Kako da odstampam taj bitmap?
 
Odgovor na temu

mikap
Miroslav Petrovic
none
Vranje

Član broj: 3538
Poruke: 86
*.vdial.verat.net.

ICQ: 279012758
Sajt: www.dzeki.net


Profil

icon Re: Stampanje ListViewa30.04.2005. u 19:10 - pre 230 meseci
Nemase li neka funcija scanlines ili nesto da pristupas na bitmapu
pa to kad imas prekopiras sve piksele na printer canvas
i to bi trebalo da radi malo sam ispao iz delfija ali trebalo bi
da radi...
by samadhi
Let there be Pascal and God made Lazarus and blessed Linux
 
Odgovor na temu

bancika
Branislav Stojkovic

Član broj: 24844
Poruke: 631
213.244.208.*

Sajt: www.diy-fever.com


+1 Profil

icon Re: Stampanje ListViewa30.04.2005. u 21:12 - pre 230 meseci
a da jednostavno prekopiras Bitmap.Canvas u Printer.Canvas? Mislim da ima Printer direktno da se pristupa Canvasu. Kopiranje moze sa BitBlt, tako je najbrze
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
 
Odgovor na temu

nnn
Tech Lead
Haxr.io
Beograd

Član broj: 16743
Poruke: 679
*.yubc.net.



+87 Profil

icon Re: Stampanje ListViewa30.04.2005. u 22:06 - pre 230 meseci
Prepravio sam ceo program i umesto listview koristim modifikovani stringgrid koji ima opciju print.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Stampanje ListViewa

[ Pregleda: 4326 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.