Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 02.03.2012
Сообщений: 66
1

Спецификация драйвера

08.04.2015, 08:48. Показов 1243. Ответов 10
Метки нет (Все метки)

Доброго времени суток! В спецификации к драйверу описано 2 функции для печати чека на ФР:

Delphi
1
function GetDocSize : Integer; stdcall;
Функция возвращает размер в байтах образа документа, предназначенного для печати.

Delphi
1
function GetDocImage(Buf : PChar; var Critical : Boolean) : Boolean; stdcall;
Если функция GetDocSize возвращает положительное значение, то АСУ выделяет
буфер памяти такого размера и вызывает данную функцию, чтобы получить образ
документа, предназначенного для печати. Образ документа – это завершенная нулем
строка символов (для России в кодировке Windows-1251), строки разделяются
символами перевода строки и возврата каретки (коды 0DH, 0AН). Полученный таким
образом образ документа распечатывается на фискальном регистраторе.

Ни как не получается напечатать на ФР!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2015, 08:48
Ответы с готовыми решениями:

спецификация COM порта
Такая фишка. На Ком порту 2 проводка соеденены. Если их соединения размыкается, то мне нужно...

Спецификация протокола
Извените, ненашол раздела для Pascal D7 поэтому пришлось написать тут. хрень такая, я принимаю...

Спецификация Компонента TTimer
Вот задался вопросом в какой момент выпоняеца событие OnTimer Поясняю Вот таймер закончил отсчёт,...

Спецификация изделия
Добрый день! Запутался и не могу понять как правильно сделать базу данных состава изделия по...

10
Модератор
3476 / 2600 / 740
Регистрация: 19.09.2012
Сообщений: 7,966
08.04.2015, 09:09 2
Все это очень познавательно), но фразы
Цитата Сообщение от zurprog Посмотреть сообщение
Ни как не получается
для получения какого-либо ответа/совета явно не достаточно.
Нужен код, да и спецификацию драйвера можно приложить.
0
2 / 2 / 0
Регистрация: 02.03.2012
Сообщений: 66
08.04.2015, 09:22  [ТС] 3
Кода нет.... т.к. я не понимаю что такое Buf – указатель на буфер, в который копируется образ документа, а спецификация и есть эти 2 функции и еще несколько функций таких как :
Инициализация драйвера
Delphi
1
function Open(Com : Integer; CommParams : PChar) : Boolean; stdcall;
Наименование устройства
Delphi
1
function DeviceName : PChar; stdcall;
0
Модератор
3476 / 2600 / 740
Регистрация: 19.09.2012
Сообщений: 7,966
08.04.2015, 10:53 4
Цитата Сообщение от zurprog Посмотреть сообщение
Кода нет
Так поэтому и не получается напечатать)
0
5049 / 3935 / 1303
Регистрация: 14.04.2014
Сообщений: 18,130
Записей в блоге: 18
08.04.2015, 12:29 5
buf это буфер размером GetDocSize
который нужно выделить в памяти и ссылку передать в GetDocImage
на выходе мы получим в буфере текстовую строку в кодировке win1251
ее нужно тупо послать на печать
0
13074 / 5859 / 1706
Регистрация: 19.09.2009
Сообщений: 8,807
08.04.2015, 13:26 6
Начать можно с такого кода:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
uses
  StrUtils, Printers;
 
function GetDocSize : Integer; stdcall;
  external 'driver.dll' name 'GetDocSize';
 
function GetDocImage(Buf : PChar; var Critical : Boolean) : Boolean;
  stdcall; external 'driver.dll' name 'GetDocImage';
 
procedure TForm1.Button1Click(Sender: TObject);
var
  PCh : PChar;
  S : String;
  Size : Integer;
  FPrn : TextFile;
  Critical : Boolean;
begin
  //Запрос размера образа. Будем считать, что размер получаем с учётом терминального нуля.
  Size := GetDocSize;
  if Size = 0 then
  begin
    MessageBox(Handle, 'Нет документов для печати.',
      'Отмена', MB_OK + MB_ICONEXCLAMATION + MB_APPLMODAL);
    Exit;
  end;
 
  //Выделение памяти для нуль-терминальной строки. Size - с учётом терминального нуля.
  PCh := StrAlloc(Size);
  try
    //Запрос содержания образа. Без действий с Critical.
    if not GetDocImage(PCh, Critical) then
    begin
      MessageBox(Handle, 'GetDocImage(). Не удалось получить текст. Действие отменено.',
        'Ошибка!', MB_OK + MB_ICONERROR + MB_APPLMODAL);
      Exit; //При этом перед выходом из метода управление перейдёт в раздел finally - end.
    end;
    S := PCh;
  finally
    //Освобождение памяти, выделенной ранее для нуль-терминальной строки.
    StrDispose(PCh);
  end;
 
  //Печать на принтере в текстовом режиме.
  Printer.BeginDoc;
  try
    AssignPrn(FPrn);
    Rewrite(FPrn);
    try
      Write(FPrn, S);
    finally
      CloseFile(FPrn);
    end;
  finally
    Printer.EndDoc;
  end;
end;
0
5049 / 3935 / 1303
Регистрация: 14.04.2014
Сообщений: 18,130
Записей в блоге: 18
08.04.2015, 13:39 7
у ФР своя функция печати строки
без Printer...
0
2 / 2 / 0
Регистрация: 02.03.2012
Сообщений: 66
08.04.2015, 15:26  [ТС] 8
Спасибо Mawrat за ответ! Только мне нужно именно в DLL эту функцию реализовать что-бы АРМ при ее "вызове" напечатала строку (завершенную нулевым символом)которая написана в dll. Я не знаю как это делать, в моем представлении это как то так :
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function GetDocImage(Buf : PChar; var Critical : Boolean) : Boolean;
begin
PCh:='Hello word';
 Size := GetDocSize;
  if Size = 0 then
  begin
    MessageBox(Handle, 'Нет документов для печати.',
      'Ошибка', MB_OK + MB_ICONEXCLAMATION + MB_APPLMODAL);
    Exit;
  end else begin
buf:= PCh;
result:= true;
end;
end;
0
4085 / 1799 / 211
Регистрация: 06.10.2010
Сообщений: 4,030
08.04.2015, 16:05 9
Лучший ответ Сообщение было отмечено zurprog как решение

Решение

Попробуй это
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
library DLL;
 
function GetDocSize: Integer; stdcall;
begin
  result:=13;
end;
 
function GetDocImage(Buf: PChar; var Critical : Boolean) : Boolean; stdcall;
begin
  move('Hello world!'#0,Buf^,13);
  result:=true;
end;
 
exports
  GetDocSize,
  GetDocImage;
  
begin
end.
1
2 / 2 / 0
Регистрация: 02.03.2012
Сообщений: 66
08.04.2015, 16:52  [ТС] 10
Спасибо murderer! Все получилось! Строка печатается на УРА!!!
0
5049 / 3935 / 1303
Регистрация: 14.04.2014
Сообщений: 18,130
Записей в блоге: 18
08.04.2015, 17:15 11
первый раз слышу про печать на фискальном регистраторе через драйвер принтера...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2015, 17:15

Паттерн Спецификация
Нужен легкий пример использования паттерна Спецификация. Желательно на с++ или с#

Спецификация, обозначения
Привет други и подруги и прочие Тьюринги :curtsy:. Ситуация такова есть структура алгоритма, в...

Спецификация FIFO
Собираюсь подружить FTDI (DLP-USB1232) и контроллер по параллельной шине, но ни как не могу найти...

Спецификация на GPS карты
Всем привет. Ищу спцецификацию на GPS карты разных форматов для использования одной из карт в своей...

Спецификация MVVM паттерна
Доброго времени суток форумчане! Возникло затруднение с пониманием реализации MVVM паттерна....

Спецификация оборудования AutoCad2010
Всем доброго времени суток. Я занимаюсь проектированием систем безопасности, и хотел-бы от Вас...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.