Обсуждение:DLM для работы с буфером обмена терминала и печати на принтер терминала
0 (0)
Обсуждение:DLM для работы с буфером обмена терминала и печати на принтер терминала ( Обсуждение примера 28.01.2008 12:26 )
0(0)практическое применение данного примера?! ( ErshovSP 30.01.2008 10:42 )
0(0)планы дальнейшего развития?
>> Ответитьбуфер обмен для работы по переводам Migom ( EpBuLaT 04.02.2008 11:03 )
0(0)а печать пока не применяем.
кстати если кто знает как увязаться с Migom буду очень рад услышать.
Очень нада, потому что через буфер обмена не очень нравится мне.
>> ОтветитьС отчетностью немного разберемся, свисти, числа после 10-го. Я тоже с МИГОМом наелся :-) ( sokols 04.02.2008 16:39 )
0(0)Not specified
>> ОтветитьВкратце о МИГОМ (+) ( sokols 08.02.2008 09:27 )
0(0)Меня тоже не устроил обмен через клипбоард. Работаю через текстовый файл.
1. Отправка. После сохранения перевода появляются еще 2 кнопочки - "Выгрузить в текстовый файл" и "Настроить формат выгрузки". Настройка - операция тупая, малоприятная и трудоемкая, причем делать ее приходится на каждой рабочей станции, ибо хранятся настройки в cookies. После настройки файл можно выгружать. Далее - операционистка засасывает его в РС, распечатывает необходимые документы, клиент оплачивает в кассе, возвращается, девочка жмет на исполнение перевода.
2. Выплата. Начинаем тоже с МИГОМ. Опять же, если выгрузка настроена, девочка, выбрав выплачиваемый перевод, жмякает на экспорт в текстовый файл, потом засасывает его из РС. Клиенту - расходник, и в кассу его.
Вроде повеселее так, хотя бы твердые копии остаются. Девочки лишь следят, чтобы комиссии, рассчитанные МИГОМом и РС, совпадали.
>> Ответитьспасибо, видимо придется тоже так делать ( EpBuLaT 15.02.2008 14:03 )
0(0)я думал может кто знает способ как напрямую с их сервером работать а то что-то сам не дотумкиваюсь.
видимо придется юзерам бегать туда сюда (из одной софтины в другую) :)
>> ОтветитьДа фиг там (+) ( sokols 18.02.2008 14:25 )
0(0)Напрямую с сервером, даже если у тебя весь API будет, - это ведь еще и работу с криптобиблиотекой придется реализовывать. Вряд ли овчинка стоит выделки.
>> Ответить
Работа с буфером ( kocher 23.11.2011 13:15 )
0(0)Добрый день. Есть ли кто живой в этой ветке (спустя-то столько лет)?
У меня компилятор ругается на import aetrm; говорит - невозможно открыть файл! (файл лежит в той-же папке)
Правда без этого файла нормально компилится, но не делает, что нужно!
пишу:
//import aetrm;
import aesrv;
ob=TaeClipBoard();
ob.set("2232333333");
[###########################] (ob.Get());
и он мне ничего не выводит. Должен же выводить 2232333333 ?!?
>> Ответить
Пожалоста раскажи как работает печати на принтер терминала ( KroshkaRU 06.02.2008 17:26 )
0(0)Какая из DLM нужна для печати и как она работает?
>> Ответитьне вопрос ( EpBuLaT 07.02.2008 06:17 )
0(0)DLM aesrv.32 должна лежать на сервере приложений в любой из папок MACRODIR
aetrm.d32 должна лежать в папке терминала.
ну а далее дело техники создаешь макрофайл в нем пишешь
import aesrv; ob=TaePrinter; - создаешь объект принтера на терминале ob.BeginDoc(); - инициализация принтера ob.PrintText(200, 500, toANSI("Привет из RSL!")); - вывод строки первые параметры координаты Х,У в пикселах ob.EndDoc; - после вызова этого метода начинается печать
>> ОтветитьМожешь дать исходники? ( KroshkaRU 07.02.2008 10:35 )
0(0)Not specified
>> Ответитьисходники чего DLM? ( EpBuLaT 07.02.2008 10:44 )
0(0)Not specified
>> ОтветитьДа ( KroshkaRU 07.02.2008 11:06 )
0(0)Not specified
>> Ответитьвот функции терминальной части для работы с принтером ( EpBuLaT 07.02.2008 11:33 )
0(0){********************************************************************** Функции для работы с принтером ***********************************************************************} function aeBeginPrint(inMes:Pointer; outMes:Pointer):LongInt; Begin Printer.BeginDoc(); Result:=0; end; function aeEndPrint(inMes:Pointer; outMes:Pointer):LongInt; Begin //MessageBox(0, inMes, 'End Print', 0); Printer.EndDoc(); Result:=0; end; function aePrintText(inMes:Pointer; outMes:Pointer):LongInt; var buff:PPrintBuffer; Begin buff:=inMes; Printer.Canvas.TextOut(buff.X, buff.Y, buff.data); Result:=0; //возвращать ничего не нужно end; function aeGetPrinters(inMes:Pointer; outMes:Pointer):LongInt; var buff:PTextBuffer; Begin buff:=outMes; StrCopy(buff.data, PChar(Printer.Printers.Text)); Result:=SizeOf(TTextBuffer); //возвращаем размер данных end; function aeNewPage(inMes:Pointer; outMes:Pointer):LongInt; Begin //MessageBox(0, inMes, 'End Print', 0); Printer.NewPage(); Result:=0; end; function aeGetPrinterCount(inMes:Pointer; outMes:Pointer):LongInt; var buff:PIntBuffer; Begin buff:=outMes; buff.int:=Printer.Printers.Count; Result:=SizeOf(TIntBuffer); //возвращаем размер данных end; function aeGetPrinter(inMes:Pointer; outMes:Pointer):LongInt; var ibuff:PIntBuffer; obuff:PSmallTxtBuffer; i:Integer; s:String; Begin Result:=0; ibuff:=inMes; i:=ibuff.int; obuff:=outMes; if ((i >= 0) and (i < Printer.Printers.Count)) Then Begin StrCopy(obuff.data, PChar(Printer.Printers[i])); Result:=SizeOf(TSmallTxtBuffer); //возвращаем размер данных End; //MessageBox(0, '11111', 'End Print', 0); end; function aeSetPrinterIndex(inMes:Pointer; outMes:Pointer):LongInt; var buff:PIntBuffer; Begin buff:=inMes; Printer.PrinterIndex:=buff.int; Result:=0; //возвращаем размер данных end; function aeGetPrinterIndex(inMes:Pointer; outMes:Pointer):LongInt; var buff:PIntBuffer; Begin buff:=outMes; buff.int:=Printer.PrinterIndex; Result:=SizeOf(TIntBuffer); //возвращаем размер данных end;
>> Ответитьзабыл еще две структуры ( EpBuLaT 07.02.2008 11:39 )
0(0)PIntBuffer=^TIntBuffer; TIntBuffer=Packed Record int:LongInt; End; PSmallTxtBuffer=^TSmallTxtBuffer; TSmallTxtBuffer=Packed Record data:Packed Array[0..256] of Char; End;
>> ОтветитьБольшое спасибо! ( KroshkaRU 07.02.2008 12:14 )
0(0)Not specified
>> Ответить
структура PPrintBuffer ( EpBuLaT 07.02.2008 11:34 )
0(0)PPrintBuffer=^TPrintBuffer; TPrintBuffer=Packed Record X, Y:Integer; data:Packed Array[0..512] of Char; End;
>> Ответитьcтруктура PTextBuffer ( EpBuLaT 07.02.2008 11:36 )
0(0)PTextBuffer=^TTextBuffer; TTextBuffer=Packed Record data:Packed Array[0..15000] of Char; End;
>> Ответитьну а как собирать длм-ки под delphi ты найдешь здесь на форуме один парень выкладывал исходники. ( EpBuLaT 07.02.2008 11:38 )
0(0)там все прозрачно.
>> ОтветитьМожешь дать ссылку на форум как собирать длм-ки под delphi? ( KroshkaRU 08.02.2008 12:57 )
0(0)Not specified
>> Ответить
Посмотрел пример, вобще-то задача терминальной печати нас интересует (+) ( Sergey 13.02.2008 16:22 )
0(0)А вернее хочется иметь какую-то процедурку, аналогичную RSLевской Exit(2), но чтобы макрос не прерывал своего выполнения. Т.е. - просто отправить набор текстовых символов в указанный в настройках принтер.
Казалось бы, ваш PrintText именно это все и делает, но есть незадача. Как с его помощью отправить на принтер текстовую строку без преобразования?
Например - строка содержит ESC последовательность и немного символов, которые мы хотим напечатать "как в DOS".
Ваш же пример преобразует символы в графику, в отличие от Exit рсл-я.
Нет перспектив по дополнению библиотеки в данном направлении?
Спасибо.
>> Ответитьдлм задумывалася как возможность печати на каком либо шаге операции, ( EpBuLaT 15.02.2008 14:11 )
0(0)без вывода на экран самого отчета а просто в макросе спрашиваешь печатать ордер? да нет, если да выберите принтер пжт. и сразу на печать.
по поводу доработок сейчас пока некогда, переходим на 6.20 так что я думаю что займусь ею только после успешного внедрения новой системы.
то что вы спрашиваете это относится к управлению принтера с помощью ESC послед. как я понял
но метод PrintText не сможет такого сделать так как он изначально задумывался именно для печати строки.
управлением принтером ESC послед. как нибудь займусь думаю как освобожусь.
и сразу вопрос может быть можно будет обойтись без последовательностей, напишите вкратце что ваши последовательности должны делать я подумаю как реализовать.
>> ОтветитьИменно это и нужно - печать прямо на принтер без вывода на экран ( Sergey 15.02.2008 15:01 )
0(0)только нужен аналог процедуры Exit(2), но не прерывающую выполнение макроса.
Алгоритм - определяем принтеры, выбираем нужный - например тот, который установлен как DEF, связываем его с файловой переменной (AssignPrn - да?) и пишем в эту переменную как в файл указанную строку (строки...?) (writeln() ?). В этой строке могут быть какие хочешь символы - это и ESC последовательности и коды символов для знакогенератора принтера.
Ну вот...
>> Ответитьне совсем так :) ( EpBuLaT 15.02.2008 15:13 )
0(0)я не пользвовался стандартными функциями наследства Pascal (Assign, WriteLn и т.д.)
принцип работы примерно следующий
функция BeginDoc подготоваливает так называемую канву (canvas), по сути это электронный холст.
функция PrintText рисует строку имеено на этот холст
функция EndDoc отправляет холст на принтер.
собственно поэтому и нельзя воспользоваться ESC последовательностями, нужно будет поискать
либо отправку ESC послед. на принтер либо вобще ими не пользоваться а сделать все что делают ESC-послед. в виде отдельных методов объекта.
>> Ответитьвыше я публиковал исходный код DLM ( EpBuLaT 15.02.2008 15:14 )
0(0)Not specified
>> ОтветитьДа, я видел, спасибо.. ( Sergey 15.02.2008 15:36 )
0(0)Not specified
>> Ответить