通过操作,将一些需要的信息,写入了TListBox中并显示在屏幕上,现在需要打印该如何写代码?

解决方案 »

  1.   

    uses
      Printers;procedure PrintListBox(const ListBox: TListBox);
    var
      i, iLeft, iTop: Integer;
      CalRect: TRect;
    begin
      with Printer do
      begin
        BeginDoc;
        try
          Canvas.Font.Assign(ListBox.Font);
          iLeft := 10;//可以根据调节
          iTop := 10;//可以根据调节
          for i := 0 to ListBox.Items.Count - 1 do
          begin
            FillChar(CalRect, SizeOf(CalRect), 0);
            DrawText(
              Canvas.Handle,
              PAnsiChar(PChar(ListBox.Items[i])),
              -1 ,
              CalRect,
              DT_SINGLELINE or DT_CALCRECT or DT_LEFT or DT_EXPANDTABS);
            CalRect.Left := iLeft;
            CalRect.Right := CalRect.Right + iLeft;
            CalRect.Top := iTop;
            CalRect.Bottom := CalRect.Bottom + iTop;
            Inc(iTop, CalRect.Bottom - CalRect.Top);
            DrawText(
              Canvas.Handle,
              PAnsiChar(PChar(ListBox.Items[i])),
              -1 ,
              CalRect,
              DT_SINGLELINE or DT_LEFT or DT_EXPANDTABS);
          end;
        finally
          EndDoc;
        end;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      PrintListBox(ListBox1);
    end;
      

  2.   

    blazingfire(烈焰)(对.net极度憎恨中....) :非常好,但是不能对打印机进行操作,如设置纸张、打印份数、预览等。
      

  3.   

    收藏就太台举我了,呵呵~~
    关键你要知道原理就不用去收藏了,其实很简单,就是向Canvas上画东西而已和一般的Bitmap
    一样。从此可见开发Delphi人员的高明,抽象出一个TCanvas类就很好的封装了Window的HDC的东西,这才是真正的OOP!!弓虽!!!!!!!
    这也就是这几年来,我为什么不去学其它的语言的原因,因为整个VCL设计得太让人心动了!!
    又说了一堆废话,刚才就有一个人骂我了!呵呵~~~至于设置纸张的东东你可以看TPrintDialog的用法,可以看看帮助等相关资料,应该不难的!
    注意解决问题靠自己!