我通过下面的办法打印
var
lines:integer;
prntext:system.text;
begin
  assignprn(prntext); //将PRNTEST分配给打印机
  rewrite(prntext); //调用REWRITE函数,为输出打开已分配的文件
  printer.canvas.font:=memo1.font;
  //把当前MEMO1的字体指定给打印对象的CANVAS的字体属性
  for lines:=0 to memo1.lines.count-1 do
    writeln(prntext,memo1.lines[lines]);
  //把MEMO的内容写到打印机对象
  system.close(prntext); //关闭打印文件
end;
可却只能从纸张的最左边、最顶部开始打印
无法设置页边距等等如果采用这种办法
var
richedit:TRichEdit;
begin
  richedit := TRichEdit.Create(self);
  richedit.Visible := false;
  richedit.Parent := self;
  richedit.Left := memo5.Left;
  richedit.Top := memo5.Top;
  richedit.Height := memo5.Height;
  richedit.Width := memo5.Width;
  richedit.Text := memo5.Text;
  richedit.Font := memo5.Font;
  richedit.Print('test');
  richedit.Free;
  richedit := nil;
end;
打印出来的效果仍然一样  都是很难看请问各位有没有好的办法能够设置页边距等参数
让我不从纸张的左上脚开始打印谢谢~
同时我也不想用form.print
再次表示感谢

解决方案 »

  1.   

    var
      h,w,i:Integer;
    begin
      Screen.Cursor := crHourGlass; { <-- nice detail }
          try
            Printer.PrinterIndex:=PrinterCB.ItemIndex;
            Printer.Orientation:=TPrinterOrientation(LandscapeRB.Checked);
            Printer.BeginDoc;        Printer.Canvas.Font.Name:='Arial';
            Printer.Canvas.Font.Size:=12;             { <-- set the font size }
            Printer.Canvas.Font.Style:=[];
            Printer.Canvas.TextOut(0,Printer.Canvas.TextHeight('注释:'),'注释:');
            for i:=0 to Memo.Lines.Count-1 do
              Printer.Canvas.TextOut(0,(i+2)*Printer.Canvas.TextHeight(Memo.Lines.Strings[i]),Memo.Lines.Strings[i]);   { <-- print some text }        Printer.EndDoc;
          except
            on Exception do  { just in case an error happens... }
            begin
              Printer.Abort;
              Printer.EndDoc;
              raise;       { <-- raise up the exception !!! }
            end;
          end;
      Screen.Cursor:=crDefault; { <-- restore cursor }
      

  2.   

    注意这两句:
            Printer.Canvas.TextOut(0,Printer.Canvas.TextHeight('注释:'),'注释:');
            Printer.Canvas.TextOut(0,(i+2)*Printer.Canvas.TextHeight只要改成
            Printer.Canvas.TextOut(X,Y+Printer.Canvas.TextHeight('注释:'),'注释:');
            Printer.Canvas.TextOut(X,Y+(i+2)*Printer.Canvas.TextHeight
    既可以写在任何点(X,Y)处
      

  3.   

    各位大侠:如何将字符串直接发送到LPT1打印?
      

  4.   

    好像
    form1.memo1.print('your string');
    就可以了