📄 initprinter.pas
字号:
unit initprinter;
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;
function truc(port:string;disp_info:string):integer;
procedure FormCreate(Sender: TObject);
function initprt(port:string;disp_info:string):integer;
private
computer_name:string;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
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('打开 '+port+'端口失败!'+#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:='打印机测试';
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;
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,'a');
adoquery2.Next;
end;
rjsado.Connected:=false;
application.Terminate;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -