Обсуждение:DLM для работы с буфером обмена терминала и печати на принтер терминала

0 (0)
  • Развернуть Обсуждение:DLM для работы с буфером обмена терминала и печати на принтер терминала ( Обсуждение примера  28.01.2008 12:26 )
    0(0)
    DLM для работы с буфером обмена терминала и печати на принтер терминала
    Посмотреть пример
    >> Ответить
    • Развернуть практическое применение данного примера?! ( 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;
                

                >> Ответить
              • Развернуть структура 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)
                там все прозрачно.
                >> Ответить
    • Развернуть Посмотрел пример, вобще-то задача терминальной печати нас интересует (+) ( 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
            >> Ответить