📄 vprinter.pas
字号:
writefile(hcom,display,hxqlen,sendnumber,nil);
end;
selport.Next;
end;
selport.First;
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);
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.initprt(port:string;disp_info:string):integer;
var
comport_display:string;
hcom:Thandle;
lpdcb:Tdcb;
sendnumber:dword;
display:string[48];
hxqlen,ii:integer;
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);
disp_info:=dwmc+port+'打印机测试';
display:=#27#97#1+disp_info+#27#64;
hxqlen:=length(display);
writefile(hcom,display,hxqlen,sendnumber,nil);
closehandle(hcom);
truc(comport_display,'');
result:=0;
end;
function Tform1.truc(port:string;disp_info:string):integer;
var
comport_display:string;
hcom:Thandle;
lpdcb:Tdcb;
sendnumber:dword;
display:string[40];
begin
//票打切纸
comport_display:=port;
hcom:=createfile(pchar(comport_display), generic_write,0,Nil,open_always,
file_attribute_normal,0);
getcommstate(hcom,lpdcb);
lpdcb.baudrate:=9600;
if lpdcb.ByteSize=7 then lpdcb.ByteSize:=8;
setcommstate(hcom,lpdcb);
display:=#27#97+#6+disp_info+ #13;
writefile(hcom,display,length(display)+1,sendnumber,nil);
display:=#27#100+#1;
writefile(hcom,display,length(display)+1,sendnumber,nil);
closehandle(hcom);
result:=0;
end;
procedure TForm1.FormCreate(Sender: TObject);
var dwSize:DWord;
flnm:string;
lpBuffer: array[0..MAX_PATH] of char;
begin
if not rjsado.Connected then
begin
flnm:=ExtractFilePath(Application.ExeName)+'rjscygl.udl';
rjsado.ConnectionString:='FILE NAME='+flnm;
RJSADO.Connected:=true;
end;
dwSize:= MAX_PATH;
if not GetComputerName(lpBuffer, dwSize) then
raise Exception.Create(SysErrorMessage(GetLastError()));
computer_name:= StrPas(lpBuffer);
form1.WindowState:=wsminimized;
adoquery3.Open;
dwmc:=adoquery3.FieldByName('GS_OFFICE').AsString;
adoquery3.Close;
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('select * from prtset where port like '+''''+'%'+computer_name+'%'+'''');
adoquery2.Open;
while not adoquery2.Eof do
begin
initprt(adoquery2.FieldByName('port').AsString,'');
adoquery2.Next;
end;
adoquery2.Close;
timer1.Enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
timer1.Enabled:=false;
adoquery2.Open;
while not adoquery2.Eof do
begin
adoquery1.Close;
adoquery1.Open;
while not adoquery1.Eof do
begin
djh:=adoquery1.FieldByName('djh').AsString;
prtno:=adoquery2.FieldByName('bh').AsString;
Button2Click(sender);
Button3Click(sender);
adoquery1.Next;
end;
adoquery1.Close;
adoquery2.Next;
end;
adoquery2.Close;
timer1.Enabled:=true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//
prtsetq.Close;
prtsetq.SQL.Clear;
prtsetq.SQL.Add('select * from prtset where type='+''''+'S'+''''+' and port like '+''''+'%'+computer_name+'%'+''''+' order by bh');
prtsetq.Open;
if prtsetq.RecordCount>0 then
begin
pprrtt:='';
writ(prtsetq.fieldbyname('port').AsString,'');
end;
prtsetq.Close;
end;
procedure TForm1.Button3Click(Sender: TObject);
var dyj:string;
begin
//通过系统设置打印到传菜间
prtsetq.Close;
prtsetq.SQL.Clear;
prtsetq.SQL.Add('select * from prtset where type='+''''+'P'+''''+' and port like '+''''+'%'+computer_name+'%'+'''' +' order by bh');
prtsetq.Open;
while not prtsetq.Eof do
begin
prtq.Close;
prtq.SQL.Clear;
prtq.SQL.Add('select ccjdyjhm from dcddy where djh=:cs1 and ccjdyjhm=:cs2 group by ccjdyjhm order by ccjdyjhm');
prtq.Parameters.ParamByName('cs1').Value:=djh;
prtq.Parameters.ParamByName('cs2').Value:=prtsetq.FieldByName('bh').Value;
prtq.Open;
if prtq.RecordCount>0 then
begin
pprrtt:='ccjdyjhm';
dyj:=prtsetq.FieldByName('port').AsString;
prtno:=prtq.Fieldbyname('ccjdyjhm').AsString;
writ(dyj,'');
end;
prtsetq.Next;
end;
prtq.Close;
prtsetq.Close;
//
prtsetq.Close;
prtsetq.SQL.Clear;
prtsetq.SQL.Add('select * from prtset where type='+''''+'C'+''''+' and port like '+''''+'%'+computer_name+'%'+''''+' order by bh');
prtsetq.Open;
while not prtsetq.Eof do
begin
prtq.Close;
prtq.SQL.Clear;
prtq.SQL.Add('select id from dcddy where djh=:cs1 and cfdyjhm=:cs2 and type='+''''+'CF'+'''');
prtq.Parameters.ParamByName('cs1').Value:=djh;
prtq.Parameters.ParamByName('cs2').Value:=prtsetq.FieldByName('bh').Value;
prtq.Open;
if prtq.RecordCount>0 then
begin
while not prtq.Eof do
begin
pprrtt:=prtq.Fieldbyname('id').AsString;
dyj:=prtsetq.FieldByName('port').AsString;
writcf(dyj,'');
prtq.Next;
end;
end;
prtsetq.Next;
end;
prtq.Close;
prtsetq.Close;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
timer1.Enabled:=false;
rjsado.Connected:=false;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -