espon300a的问题,急!!!!!!!(100分)

Y

yvh

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好,我想请你们帮我一个忙!搞定100分!
我用espon 300a写了一个打印程序,打印一张票时可以,可是连打印二张时,就在第二张中出现有二行数据重叠!这是怎么回事啊! 还有就是打印多条几记时中间也会出现这问题!
var
line:integer;
tf:system.text;
begin
for line:=0 to 1do
begin

assignprn(tf);
//将PRNTEST分配给打印机
printer.canvas.font:=memo1.font;
printer.canvas.font.Size:=15;
ReWrite(TF);
Writeln(TF,'单号:' + memo1.lines[2]);
if line=0 then
Writeln(TF, ' 第一张票 ')
else
Writeln(TF, ' 第二张票 ') ;
Writeln(TF,'人数:' + memo1.lines[0]);
Writeln(TF,'日期:'+datetostr(Date )+''+timetostr(Time));
Writeln(TF, '----------------------');
writeln(TF,'名称:'+ memo1.lines[3]+' '+memo1.lines[4]);
Writeln(TF, '----------------------');
Writeln(TF, '单号:' + memo1.lines[2]);
Writeln(TF, ' ');
Writeln(TF, ' ');
Writeln(TF, ' ');
Writeln(TF, ' ');
Writeln(TF, ' ');
//把MEMO的内容写到打印机对象
system.close(tf);
//关闭打印文件
end;
 
printer.canvas.font:=memo1.font;
printer.canvas.font.Size:=15;
既然你用了printer说明你用到了windows的驱动,
为什么下面的程序却写成Writeln??
直接用Printer.Canvas.TextOut();
with Printerdo
begin
begin
Doc;
Canvas.Font.Size:=10;
Canvas.Font.Name:='宋体';
Canvas.TextOut(10,0,'Your String');
EndDoc;
end;

或者试试我的这个函数
function lptprint(prnStr:String):string;
Var
F:TextFile;
begin
AssignFile(F, 'LPT1');
Rewrite(F);
Writeln(F, prnStr);
CloseFile(F);
end;

如你的程序:Writeln(TF,'人数:' + memo1.lines[0]);
可以直接写成:lptprint('人数:' + memo1.lines[0]);
 
不好意思,我是第一次后台打印程序,请多指点
 
用那个直接写LPT1的方法有没有问题啊?
关于TextOut
Writes a string on the canvas, starting at the point (X,Y), and then
updates the PenPos to the end of the string
procedure TextOut(X, Y: Integer;
const Text: string);
Canvas.TextOut(10,0,'Your String1');
Canvas.TextOut(10,12,'Your String2');
Canvas.TextOut(10,24,'Your String3');
……后面的Y就是垂直距离
 
是的,我后来用了这个方法,还是不行啊,急死我也!
 
我是用串口写的,在WINDOWS2000下。如果这里可以了,我还写成联网的,也就是服务器+路由器的那种,那种要注意一些什么,你给我一点见意吧!先谢啦!
 
用windows的驱动打印的话,最好的方法是用Printer.Canvas.TextOut();
要是用直接操作端口的话,可以调用硬字库,速度也快,可是只能在win9x下使用,
我有一个直接操作端口的DEMO,要吗?
 
我要!谢谢!
 
我是用串口写的,在WINDOWS2000下。如果这里可以了,我还写成联网的,也就是服务器+路由器的那种,那种要注意一些什么,你给我一点见意吧!先谢啦!
这个问题难倒各位啦!
 
要是用直接操作端口的话,可以调用硬字库,速度也快,可是只能在win9x下使用
????????
我不太同意噢!我就是在win2000 server上试过的!
串口没办法试验啊!
把我函数中的AssignFile(F, 'LPT1');改成你的串口号试试啊!
我有个用spcomm写的API_COMD.DLL;
var
Form1: TForm1;
{加入下面三行声明}
function com_init(com:Integer;
baud:Dword):Boolean;stdcall;external 'api_com.dll';
function com_rest:Boolean;stdcall;external 'api_com.dll';
function com_send(buf:pChar;
len:Integer):Boolean;stdcall;external 'api_com.dll';
implementation
{$R *.DFM}
Com_init(1,2400)是打开串口进行通讯,1是打开COM1,波特率为2400。如果打开成功,它会返回逻辑真告知串口打开。
Com_rest是关闭串口。
Com_send(命令,长度)是发送数据到串口。
PDStr:=’Delphi Printer on COM1’+chr(10);
if com_send(Pchar(PDStr),Length(PDStr)) then
begin
Label1.Caption :='已经发送命令';
end
else
begin
Label1.Caption :='发送失败';
end;

联网的话
函数中AssignFile(F,'//打印机所在计算机名称/打印机共享名')这样试试呢?
理论上也可行的啊!
 
我是用COM1串写的可是还是一样的。直气死人啊,有那高手帮我一下,急!!!!!1………我用espon 300B写了一个打印程序,打印一张票时可以,可是连打印二张时,就在第二张中出现有二行数据重叠!这是怎么回事啊! 还有就是打印多条几记时中间也会出现数据重叠这问题!我在测试ESPON TM-300B时,测试开始打印出来的没有问题,后面就会出现,隔几行就出现数据重叠现象,是不是打印机设置有问题啊!如是应如何设置,才可以正常运行!
 
to yvh:
E-MAIL 是多少!
 
谢谢你,我的e_mail:yvhliu@hongen.com
 
2000下要自定义一张发票的格式就可以,然后在程序中调用这个格式,这样打印就没有问题,
因为2000不象98下有自定义的格式.所以要你自已建立.调用方式参见如何调用API打印.
 
to hjx38
你有没有例子啊!我写了几种都不行啊,还是一样的!同时请高手解'难'!
 
我发了好几次了,还不给我分呀?
 
to duancy:
非常谢谢你的代码!不好意思我收到你的一封!还有一个问题没有解决!好象不能切纸,请问如何办!还我帮一把!!!!thank you!!!!!!!!!!!
 
to duancy:
非常谢谢你的代码!不好意思我收到你的一封!还有一个问题没有解决!好象不能切纸,请问如何办!还帮我一把,解决就给分!!!!thank you!!!!!!!!!!!
 
切纸!那你的切纸命令是怎样的?
不会吧!那应该知道举一反三吧,可以派分了。
 
to duancy
我就是不知啦,你告诉我吗,我就好给分啦!记的还有字体大小,切纸的命令哦!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
719
import
I
顶部