我要打印表中一条记录,怎样做?

解决方案 »

  1.   

    先读出一条记录,再打印呀,
    没什么不同的var x,y:single;
        PPix,ppiy,pagen:integer;
    begin
        with datamodule1.Query1 do
        begin
         close;
         sql.Clear;
         sql.Add('select id,name,ip,adr,mny,sta from datauser where mny<0');
         execsql;
         active:=true;
        end;
        pagen:=1;
        PPIX:=GetDeviceCaps(Printer.Handle,LOGPIXELSX);
        PPIY:=GetDeviceCaps(Printer.Handle,LOGPIXELSY);
        printer.BeginDoc;
        x:=7;
        y:=0.5;
        printer.Canvas.Font.Size:=15;
        printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),'欠费用户单');
        x:=0.5;
        y:=1.5;
        printer.Canvas.Font.Name:='Courier New';
        printer.Canvas.Font.Style:=[fsBold];
        printer.Canvas.Font.Size:=10;
        printer.Canvas.Font.Color:=clblack;
        printer.Canvas.Font.PixelsPerInch:=
        getdevicecaps(printer.canvas.handle,LOGPIXELSY);
        printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),'用户号码');
        x:=x+3;
        printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),'姓名');
        x:=x+2;
        printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),'状态');
        x:=x+1;
        printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),'数字地址');
        x:=x+3;
        printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),'金额');
        x:=x+1;
        printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),'用户地址');
        x:=0.5;
        y:=y+0.5;
        with datamodule1.query1 do
        begin
             first;
             while not eof do
               begin
                  if (fieldbyname('mny').asinteger<0) and (fieldbyname('sta').asinteger=3) then
                      begin
                          if y>=27 then
                            begin
                               printer.Canvas.TextOUT(trunc(9.5/2.54*PPIX),trunc(28/2.54*PPIY),IntToStr(pagen));
                               printer.EndDoc;
                               pagen:=pagen+1;
                               y:=0.5;
                               printer.BeginDoc;
                               printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),'用户号码');
                               x:=x+3;
                               printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),'姓名');
                               x:=x+2;
                               printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),'状态');
                               x:=x+1;
                               printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),'数字地址');
                               x:=x+3;
                               printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),'金额');
                               x:=x+1;
                               printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),'用户地址');
                               x:=0.5;
                               y:=y+0.5;
                            end;
                          printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),fieldbyname('id').asstring);
                          x:=x+3;
                          printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),fieldbyname('name').asstring);
                          x:=x+2;
                          printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),fieldbyname('sta').asstring);
                          x:=x+1;
                          printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),fieldbyname('ip').asstring);
                          x:=x+3;
                          printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),fieldbyname('mny').AsString);
                          x:=x+1;
                          printer.Canvas.TextOut(trunc(x/2.54*PPIX),trunc(y/2.54*PPIY),fieldbyname('adr').asstring);
                          y:=y+0.5;
                          x:=0.5;
                      end;
               next;
               end;
        end;
        printer.Canvas.TextOUT(trunc(9.5/2.54*PPIX),trunc(28/2.54*PPIY),IntToStr(pagen));
        printer.EndDoc;
      

  2.   

    procedure TTfrm_DYBB.BtnDesignClick(Sender: TObject);
    begin
     try
       ppDesigner.Caption:='笔记本打印单';//打印模式
       ppDetailData.DataSource:=DHdate.DataSource1;//数据模块中的   DataSource1
       ppMasterData.DataSource:=BJBSource;//窗体的数据源
       ppReport.template.Description:=sPrintReportPath+'\笔记本打印单.RTM';//报表的存储位置
       ppReport.template.LoadFromFile;
       ppReport.DeviceType :='Sreen';//全屏方式
       except
       end;
       ppDesigner.showModal;
    end;
    (这里用到四个组件:如果你没有的话也不能,它们都是RBuider里的,你要打印的是一条记录,那么你在ppDetailData中把RangeBegin和RangeEnd都设置为rbCurrentRecord就可以了,要打印多条的话就是为rbFirstRecord和reLastRecord就可以了。)
    又些地方也许我讲的不怎么清楚,在联系!
      

  3.   

    TO: buchanren(逋蝉人)  呵呵,老大,我以前就是这么做的,感觉应该还有其它的方法,所以才提问!!!