在POS机上用下面这段代码打印小票能成功,但很慢:
procedure TPosFrm.PrintFile(AFileToPrint: string);
var
 Port, FileToPrint: TextFile;
 ALine: string;
begin
 AssignFile(FileToPrint, AFileToPrint);
 Reset(FileToprint);
 AssignFile(Port, 'LPT1');
 Rewrite(Port);
 while not Eof(FileToPrint) do
 begin
   Readln(FileToPrint, ALine);
   Writeln(Port, ALine);
 end;
 CloseFile(Port);
 CloseFile(FileToPrint);
end;
-------------------------------------------
如果在DOS模式下:
type pos.prt>lpt1则可以达到每秒12行的速度,比上面的代码快了好几倍,
但我不知道在DELPHI下如何实现直接写端口,,,我在DELPHI下用WINEXEC直接运行
DOS的输出命令又出现乱码,可能是打印机字库有问题!
请各位帮忙呀!!!打印机为TM8II

解决方案 »

  1.   

    var
    F:TEXTFILE;
    BEGIN
     ASSIGNFILE(F,'LPT1');
     REWRITE(F);
     WRITELN(F,chr(27) '@'); //initial the printer
     WRITELN(F,'TEST1 FIRST LINE');你的内容
     WRITELN(F,chr(12)); // move the paper to a new page
     CLOSEFILE(F);
    end;
    试一下这样的速度
      

  2.   

    用API直接打印uses CommDlg;{$IFNDEF WIN32}const MAX_PATH = 144;{$ENDIF}procedure TForm1.Button1Click(Sender: TObject);varPd : TPrintDlg;DocInfo: TDocInfo;beginFillChar(Pd, sizeof(Pd), #0);Pd.lStructSize := sizeof(Pd);Pd.hWndOwner := Form1.Handle;Pd.Flags := PD_RETURNDC;if PrintDlg(pd) then beginFillChar(DocInfo, sizeof(DocInfo), #0);DocInfo.cbSize := SizeOf(DocInfo);GetMem(DocInfo.lpszDocName, 32);GetMem(DocInfo.lpszOutput, MAX_PATH);lStrCpy(DocInfo.lpszDocName, 'My Document');{Add this line to print to a file }lStrCpy(DocInfo.lpszOutput, 'C:.doc');StartDoc(Pd.hDc, DocInfo);StartPage(Pd.hDc);TextOut(Pd.hDc, 100, 100, 'Page 1', 6);EndPage(Pd.hDc);StartPage(Pd.hDc);TextOut(Pd.hDc, 100, 100, 'Page 2', 6);EndPage(Pd.hDc);EndDoc(Pd.hDc);FreeMem(DocInfo.lpszDocName, 32);FreeMem(DocInfo.lpszOutput, MAX_PATH);end;end;