Delphi 调用打印机指令ZPL实例--并口

来源:互联网 发布:怎么做好淘宝网店 编辑:程序博客网 时间:2024/06/03 01:20
// 通过指令发送数据到打印机function TForm1.SendToPrinter():Boolean;var   hHandle: THandle;   hModule: THandle;   hEObject: THandle;   WOverlapped: OVERLAPPED;   DataStr: string;   Buffer: PChar;   nLength: Integer;   writedbyte: DWORD;   Func: TFnthex32;   count,K: Integer;   HexBuf: Ppchar;   tmpstr0,tmpstr1: string;   MidDataStr: string;   SNBar:string;   S1:Integer;begin              hHandle:= CreateFile('LPT1',GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE,Nil,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);  if(hHandle = INVALID_HANDLE_VALUE) then    begin      Result:= False;      Exit;    end;  hModule:= LoadLibrary('Fnthex32.dll');  if(hModule <=0) then    begin      CloseHandle(hHandle);      Result:= False;      Exit;    end;  @Func:= GetProcAddress(hModule,'GETFONTHEX');  if Assigned(@Func) then    begin      {***********************初始化变量**************************}          S1:=CartonId;      SNBar:='BE'+format('%0.4d',[s1]); //需打印的内容      count := Func(SNBar,'Arial',0,45,0,1,0,HexBuf);      SNBar := HexBuf;      tmpstr0 := copy(SNBar,0,3);      tmpstr1 := copy(SNBar,12,count -1 -11);      SNBar := tmpstr0 + 'ImgAword' + tmpstr1;    end  else    begin      if(hModule > 0) then      FreeLibrary(hModule);      CloseHandle(hHandle);      Result := False;      exit;    end;  //扫描HDD SN条码打印指令  //Zebra Z4M 300 dpi 打印机的指令  DataStr:= '^XA^JMA^FS' //Start Format and Set Dots per Millimeter           + '^MD12^FS'   //Media Darkness           + '^DFFORMAT^FS' //Download and store Format           + '^LH0,0' //set label home postion           + '^LL2000'  //set label length // 14.92 * 12   (12dot/mm)           + '^PW2000'  // > 60 * 12           +SNBAR +'^FO110 ,0^XGImgAword^FS'         //  +'^FO110,150,^BY3,5,^B3N,60,N,N^FD'+'6'+'^FS'           + '^PQ1'           +'^XZ';   MidDataStr:= '^XA^JMA^FS'   //Start Format                + '^XFFORMAT^FS' //Recall store format                + '^XZ' ;   DataStr:= DataStr + MidDataStr;   hEObject := CreateEvent(Nil,TRUE,TRUE,'');   WOverlapped.hEvent := hEObject;   WOverlapped.Offset := 0;   WOverlapped.OffsetHigh := 0;   Buffer := Nil;   try     nLength :=Length(DataStr);     Buffer := PChar(AllocMem(nLength + 1));     StrPCopy(Buffer,DataStr);     for K := 1 to 1 do       begin         if ( WriteFile(hHandle,Buffer^,nLength,writedbyte,POVERLAPPED(@WOverlapped)) ) then           begin           end;       end;   finally     if Buffer <> Nil then       FreeMem(Buffer);   end;   if (hModule > 0) then   FreeLibrary(hModule);   CloseHandle(hEObject);   CloseHandle(hHandle);   Result := True;end;

// 注意:需将名为“Fnthex32.dll” 的文件放在目录下,方可打印
0 0
原创粉丝点击