📄 vprinter.pas
字号:
unit vprinter;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
selport: TADOQuery;
rjsado: TADOConnection;
Timer1: TTimer;
Button2: TButton;
prtsetQ: TADOQuery;
Button3: TButton;
prtQ: TADOQuery;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
selportID: TAutoIncField;
selportdjh: TIntegerField;
selportyhh: TStringField;
selporttwbh: TStringField;
selportrq: TDateTimeField;
selportmc: TStringField;
selportgg: TStringField;
selportdj: TBCDField;
selportsl: TBCDField;
selportje: TBCDField;
selportfkbz: TBooleanField;
selportzfbz: TBooleanField;
selportzsbz: TBooleanField;
selportcfdyjhm: TStringField;
selportccjdyjhm: TStringField;
selporttype: TStringField;
ADOQuery3: TADOQuery;
selportmemo: TStringField;
procedure Button1Click(Sender: TObject);
function writ(port:string;disp_info:string):integer;
function writcf(port:string;disp_info:string):integer;
function truc(port:string;disp_info:string):integer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
function initprt(port:string;disp_info:string):integer;
private
computer_name:string;
pprrtt,prtno,djh:string;
dwmc:string;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;
function Tform1.writ(port:string;disp_info:string):integer;
var
comport_display:string;
hcom:Thandle;
lpdcb:Tdcb;
sendnumber:dword;
display:string[48];
hxqlen,ii:integer;
xxjj:real;
begin
//票打驱动 收银或送菜间
if pos(computer_name,port)>0 then
begin
ii:=pos(computer_name,port);
comport_display:=copy(port,1,ii-1)+'.'+copy(port,ii+length(computer_name),length(port));
end
else comport_display:=port;
hxqlen:=0;
while comport_display=comport_display do
begin
hcom:=createfile(pchar(comport_display), generic_write,0,Nil,OPEN_EXISTING,
file_attribute_normal,0);
if hcom<>4294967295 then break;
hxqlen:=hxqlen+1;
if hxqlen>1000 then
begin
messagedlg('打开 '+comport_display+'端口失败!'+#13+'请检查打印机及其线路!',mtwarning,[mbok],0);
exit;
end;
end;
getcommstate(hcom,lpdcb);
lpdcb.baudrate:=9600;
lpdcb.DCBlength:=48;
lpdcb.Parity:=0;
lpdcb.ByteSize:=8;
lpdcb.StopBits:=1;
lpdcb.XonLim:=2048;
lpdcb.XoffLim:=512;
lpdcb.XonChar:=#17;
lpdcb.XoffChar:=#19;
setcommstate(hcom,lpdcb);
if selport.Active then selport.Close;
selport.SQL.Clear;
if pprrtt='' then selport.SQL.Add('select * from dcddy where (djh = :cs1) and type='+''''+'SY'+'''')
else begin
selport.SQL.Add('select * from dcddy where (djh = :cs1) and ('+pprrtt+'=:cs2) and type='+''''+'CC'+'''');
selport.Parameters.ParamByName('cs2').Value:=prtno;
end;
selport.Parameters.ParamByName('cs1').Value:=djh;
selport.Open;
if selport.RecordCount>0 then
begin
{ hxqlen:=length(dwmc);
disp_info:=copy(' ',1,10 - round(hxqlen/2))+dwmc;//' 罗杰斯餐饮连锁机构';
display:=#27#97#1+disp_info+#27#64;
hxqlen:=length(display);
writefile(hcom,display,hxqlen,sendnumber,nil);
disp_info:=datetimetostr(date+time)+' 单号:'+selportdjh.AsString+' ';
}
if pprrtt='' then disp_info:='单号:'+selportdjh.AsString+' '+datetimetostr(date+time)
else disp_info:='单号:'+selportdjh.AsString+' (传菜)'+datetimetostr(date+time);
display:=#27#97#1+disp_info+#27#64;
hxqlen:=length(display);
writefile(hcom,display,hxqlen,sendnumber,nil);
disp_info:=' 餐台号:'+selporttwbh.AsString;
display:=#27#97#1+disp_info+#27#64;
hxqlen:=length(display);
writefile(hcom,display,hxqlen,sendnumber,nil);
disp_info:='-----------------------------------';
display:=#27#97#1+disp_info+#27#64;
hxqlen:=length(display);
writefile(hcom,display,hxqlen,sendnumber,nil);
disp_info:='序号 商 品 名 称 数量 单价 金额';
display:=#27#97#1+disp_info+#27#64;
hxqlen:=length(display);
writefile(hcom,display,hxqlen,sendnumber,nil);
ii:=1;
xxjj:=0;
while not selport.Eof do
begin
// 以下为打印正文
if ii<10 then disp_info:=' '+copy(inttostr(ii),1,1)+' '
else disp_info:=copy(inttostr(ii),1,2)+' ';
disp_info:=disp_info +copy(selportmc.AsString,1,18)+copy(' ',1,18-length(selportmc.AsString));
disp_info:=disp_info+copy(' ',1,2-length(selportsl.AsString)) +selportsl.AsString;
disp_info:=disp_info+copy(' ',1,5-length(selportdj.AsString)) +selportdj.AsString;
disp_info:=disp_info+copy(' ',1,5-length(selportje.AsString))+selportje.AsString+'元';
if selportzfbz.AsBoolean then disp_info:=disp_info+'退';
display:=#27#97#1+disp_info+#27#64;
hxqlen:=length(display);
writefile(hcom,display,hxqlen,sendnumber,nil);
xxjj:=xxjj+selportje.AsFloat;
ii:=ii+1;
selport.Next;
end;
// 打印页尾
disp_info:='-----------------------------------';
display:=#27#97#1+disp_info+#27#64;
hxqlen:=length(display);
writefile(hcom,display,hxqlen,sendnumber,nil);
if pprrtt='' then
begin
disp_info:=' 收银: '+copy(selportyhh.AsString,1,6)+' ';
disp_info:=disp_info+' 合计: '+ floattostr(xxjj)+'元';
display:=#27#64+#27#97#1+disp_info+#27#64;
hxqlen:=length(display);
writefile(hcom,display,hxqlen,sendnumber,nil);
end;
selport.First;
while not selport.Eof do selport.Delete;
selport.Close;
closehandle(hcom);
truc(comport_display,'');
end
else begin
selport.Close;
closehandle(hcom);
end;
result:=0;
end;
//
function Tform1.writcf(port:string;disp_info:string):integer;
var
comport_display:string;
hcom:Thandle;
lpdcb:Tdcb;
sendnumber:dword;
display:string[48];
hxqlen,ii:integer;
xxjj:real;
begin
//票打驱动 厨房
if pos(computer_name,port)>0 then
begin
ii:=pos(computer_name,port);
comport_display:=copy(port,1,ii-1)+'.'+copy(port,ii+length(computer_name),length(port));
end
else comport_display:=port;
hxqlen:=0;
while comport_display=comport_display do
begin
hcom:=createfile(pchar(comport_display), generic_write,0,Nil,OPEN_EXISTING,
file_attribute_normal,0);
if hcom<>4294967295 then break;
hxqlen:=hxqlen+1;
if hxqlen>1000 then
begin
messagedlg('打开 '+comport_display+'端口失败!'+#13+'请检查打印机及其线路!',mtwarning,[mbok],0);
exit;
end;
end;
getcommstate(hcom,lpdcb);
lpdcb.baudrate:=9600;
lpdcb.DCBlength:=48;
lpdcb.Parity:=0;
lpdcb.ByteSize:=8;
lpdcb.StopBits:=1;
lpdcb.XonLim:=2048;
lpdcb.XoffLim:=512;
lpdcb.XonChar:=#17;
lpdcb.XoffChar:=#19;
setcommstate(hcom,lpdcb);
if selport.Active then selport.Close;
selport.SQL.Clear;
selport.SQL.Add('select * from dcddy where id = :cs1 and type='+''''+'CF'+'''');
selport.Parameters.ParamByName('cs1').Value:=pprrtt;
selport.Open;
if selport.RecordCount>0 then
begin
{ hxqlen:=length(dwmc);
disp_info:=copy(' ',1,10 - round(hxqlen/2))+dwmc;
display:=#27#97#1+disp_info+#27#64;
hxqlen:=length(display);
writefile(hcom,display,hxqlen,sendnumber,nil);
disp_info:=datetimetostr(date+time)+' 单号:'+selportdjh.AsString+' ';
display:=#27#97#1+disp_info+#27#64;
hxqlen:=length(display);
writefile(hcom,display,hxqlen,sendnumber,nil);
} disp_info:='台号:'+selporttwbh.AsString+'(厨房)'+datetimetostr(date+time);
display:=#27#97#1+disp_info+#27#64;
hxqlen:=length(display);
writefile(hcom,display,hxqlen,sendnumber,nil);
while not selport.Eof do
begin
// 以下为打印加工描述
if not selportmemo.IsNull then
begin
display:=#27#97#1+selportmemo.AsString+#27#64;
hxqlen:=length(display);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -