Godex DT2x печать через Delphi

Страницы: 1
RSS
Godex DT2x печать через Delphi
 
Добрый день! Не могу заставить принтер печатать. Написал код, вроде соответствует мануалам, но принтер молчит. Вот пример кода:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


const
TestLib = 'ezweb.dll';


procedure openport(name:PChar); stdcall; external TestLib ;
procedure beginjob(a, b, c, d, e, f:Integer); stdcall; external TestLib;
procedure endjob; stdcall; external TestLib;
procedure sendcommand(command:PChar); stdcall; external TestLib;
procedure closeport; stdcall; external TestLib;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
openport('USB001'); // 0-> LPT1; 1-> COM1; 2->COM2
beginjob(40, 7, 2, 0, 2, 0);
sendcommand('^XSET,CODEPAGE,16');
sendcommand('^Q719,3');
sendcommand('^W27');
sendcommand('^H10');
sendcommand('^P1');
sendcommand('^S2');
sendcommand('^AD');
sendcommand('^C1');
sendcommand('^R0');
sendcommand('~Q+0');
sendcommand('^O0');
sendcommand('^D0');
sendcommand('^E12');
sendcommand('~R200');
sendcommand('^L');
sendcommand('Dy2-me-dd');
sendcommand('Th:m:s');
sendcommand('BE,30,42,3,7,100,0,1,123456789012');
sendcommand('E');
endjob();
closeport();
end;

end.
 
1. Функция openport возвращает результат своей работы. Посмотрите, у Вас порт не открывается. В качестве параметра нужно передавать имя принтера, а не порта. Что-то типа openport('GODEX EZ-DT-2');.
2. Это старая dll, производитель давно использует новую - ezio.dll. Внутри архива масса примеров.
 
Цитата
Олег Плюснин написал:
1. Функция openport возвращает результат своей работы. Посмотрите, у Вас порт не открывается. В качестве параметра нужно передавать имя принтера, а не порта. Что-то типа openport('GODEX EZ-DT-2');.
2. Это старая dll, производитель давно использует новую - ezio.dll . Внутри архива масса примеров.
Спасибо огромное! Буду разбираться)
 
По большей части разобрался. но появился вопрос, надеюсь, что последний...
Я передаю принтеру задание mPrinter.PrintBarCode_Detail(mPrinter.BarCode_Code128_Subset, 203, 1, 1, 3, 95, 1, 1,PChar('F1D'+ORG+'000'+IntToStr(p))); Не могу понять, как мне сделать более широким штрих-код
 
Играйтесь с параметром Narrow.
 
Цитата
Олег Плюснин написал:
Играйтесь с параметром Narrow.
Интересный какой-то параметр получается... Ставлю ему значение 1 - штрих-код маленький, ставлю 2 - уже не влезает в этикетку. Иных путей нет?
Изменено: Алексей Халецкий - 01.12.2017 15:13:18
 
Это не просто параметр от балды, это ГОСТ (ISO). Есть ширина тонкой полоски и соотношение толстой к тонкой. Второй параметр для CODE128 не изменяется, только первый параметр.
Поставьте GoLabel, поиграйтесь в нем. А потом формат и настройки можно будет использовать.
Я бы вообще не трогал никакие библиотеки (а мы их и не используем никогда, т.к. ущербные), а средствами языка (в данном случае Дельфи) открываете порт и туда посылаете набор команд. Этот набор команд можно сделать шаблоном. Отдельно сервисная утилита, которая общается с принтером - настраивает и открывает порты, шлет данные, получает ответы и т.д. И отдельно шаблоны, которые можно наготовить в GoLabel, причем даже не вникая в язык принтера. Хотя там очень просто разобраться даже без документации.
 
Цитата
Олег Плюснин написал:
Это не просто параметр от балды, это ГОСТ (ISO). Есть ширина тонкой полоски и соотношение толстой к тонкой. Второй параметр для CODE128 не изменяется, только первый параметр.
Поставьте GoLabel, поиграйтесь в нем. А потом формат и настройки можно будет использовать.
Я бы вообще не трогал никакие библиотеки (а мы их и не используем никогда, т.к. ущербные), а средствами языка (в данном случае Дельфи) открываете порт и туда посылаете набор команд. Этот набор команд можно сделать шаблоном. Отдельно сервисная утилита, которая общается с принтером - настраивает и открывает порты, шлет данные, получает ответы и т.д. И отдельно шаблоны, которые можно наготовить в GoLabel, причем даже не вникая в язык принтера. Хотя там очень просто разобраться даже без документации.
Я понимаю, что использование библиотеки не всегда "есть хорошо", но сильно разбираться и вникать времени нет. Последний вопрос к Вам остался, теперь точно последний :D Как передать принтеру задание отрезать этикету?
 
^Dx, где х = 0 нет отреза, х от 1 до 32767 - число этикеток по сколько отрезать. Нужно заметить, что при печати двух заданий по 5 этикеток нарезаны будут 8 по две и 2 по одной. Т.е. 2.2.2.2.1.2.2.2.2.1.
Режим отрезания задается командой ^XSETCUT.
Страницы: 1