我想按一定的格式打印memo或richedit中的文字,怎样实现?怎样做打印预览?

解决方案 »

  1.   

    这是打印stringgrid,你把它修改一下就可以了procedure PrintGrid(sGrid: TStringGrid; sTitle: String);varX1, X2 : Integer;Y1, Y2 : Integer;TmpI : Integer;F : Integer;TR : TRect;beginPrinter.Title:=sTitle;Printer.BeginDoc;Printer.Canvas.Pen.Color:=0;Printer.Canvas.Font.Name:='Times New Roman';Printer.Canvas.Font.Size:=12;Printer.Canvas.Font.Style:=[fsBold, fsUnderline];Printer.Canvas.TextOut(0, 100, Printer.Title);For F:=1 to sGrid.ColCount-1 do beginX1:=0;For TmpI:=1 to (F-1) doX1:=X1+5*(sGrid.ColWidths[TmpI]);Y1:=300;X2:=0;For TmpI:=1 to F doX2:=X2+5*(sGrid.ColWidths[TmpI]);Y2:=450;TR:=Rect(X1, Y1, X2-30, Y2);Printer.Canvas.Font.Style:=[fsBold];Printer.Canvas.Font.Size:=7;Printer.Canvas.TextRect(TR, X1+50, 350, sGrid.Cells[F, 0]);Printer.Canvas.Font.Style:=[];For TmpI:=1 to sGrid.RowCount-1 do beginY1:=150*TmpI+300;Y2:=150*(TmpI+1)+300;TR:=Rect(X1, Y1, X2-30, Y2);Printer.Canvas.TextRect(TR, X1+50, Y1+50, sGrid.Cells[F, TmpI]);end;end;Printer.EndDoc;end;
      

  2.   

    procedure PrintGrid(sGrid: TStringGrid; sTitle: String);
    var
      X1, X2 : Integer;    //x1,x2,y1,y2代表什么?
      Y1, Y2 : Integer;
      TmpI : Integer;
      F : Integer;
      TR : TRect;
    begin
      Printer.Title:=sTitle;
      Printer.BeginDoc;
      Printer.Canvas.Pen.Color:=0;
      Printer.Canvas.Font.Name:='Times New Roman';
      Printer.Canvas.Font.Size:=12;
      Printer.Canvas.Font.Style:=[fsBold, fsUnderline];
      Printer.Canvas.TextOut(0, 100, Printer.Title);  
      For F:=1 to sGrid.ColCount-1 do 
      begin
        X1:=0;
        For TmpI:=1 to (F-1) do
        X1:=X1+5*(sGrid.ColWidths[TmpI]);     //为什么x1,x2采取这样的一个算法?
        Y1:=300; 
        X2:=0;
        For TmpI:=1 to F do
        X2:=X2+5*(sGrid.ColWidths[TmpI]);
        Y2:=450;
        TR:=Rect(X1, Y1, X2-30, Y2);
        Printer.Canvas.Font.Style:=[fsBold];    //这里是不重复定义?
        Printer.Canvas.Font.Size:=7;
        Printer.Canvas.TextRect(TR, X1+50, 350, sGrid.Cells[F, 0]);
        Printer.Canvas.Font.Style:=[];
        For TmpI:=1 to sGrid.RowCount-1 do 
          begin
            Y1:=150*TmpI+300;
            Y2:=150*(TmpI+1)+300;
            TR:=Rect(X1, Y1, X2-30, Y2);
            Printer.Canvas.TextRect(TR, X1+50, Y1+50, sGrid.Cells[F, TmpI]);
          end;
      end;
      Printer.EndDoc;
    end;
    我有点菜,谢谢指导!如果要做打印预览,怎么做呀?