Конференция "Основная" » ESC-последовательность на принтер - ошибка I/O error 105
 
  • Гость1468 (12.05.08 09:44) [0]
    Код
    procedure TForm1.Button2Click(Sender: TObject);
    var
     MyFile: TextFile;
    begin
     AssignPrn(MyFile);
     Rewrite(MyFile);
     Write(MyFile, 'Print this text1');
     Write(#27+'M');
     System.CloseFile(MyFile);
    End;



    Последовательност <ESC>+'M' описана в мануале принтера
    Принтер матричный Star SP298
    Ошибка "EInOutError 'I/O error 105'"

    Если посылать просто текст
    begin
     AssignPrn(MyFile);
     Rewrite(MyFile);
     Write(MyFile, 'Print this text1');
    //  Write(#27+'M');
     System.CloseFile(MyFile);
    End;


    То все печатает.
  • Гость1468 (12.05.08 12:18) [1]
    Если есть другой способ, достучаться до принтера, с возможностью посылать ESC-последовательности - тоже подойдет.
  • Сергей М. © (12.05.08 12:25) [2]
    OpenPrinter + WritePrinter
  • Leonid Troyanovsky © (12.05.08 12:38) [3]

    > Гость1468   (12.05.08 12:18) [1]

    > Если есть другой способ, достучаться до принтера,

    http://groups.google.com/group/fido7.ru.delphi.chainik/msg/c68e79b088787eab

    --
    Regards, LVT.
  • tesseract © (12.05.08 20:31) [4]

    > Последовательност <ESC>+'M' описана в мануале принтера


    Ох уж эти мануалы. AssignPrn сам посылает контролирующие последовательности, так что команда пройдёт через драйвер. Используй WritePrinter если принтер LPT или WriteFile если COM.
  • Slym © (13.05.08 08:24) [5]
    маленький пример:

    procedure TDirectPrint.PrintStr(const Str: string);
    var
     s,PrinterName:string;
     hPrinter:THandle;
     DocInfo:TDocInfo1;
     Len,Writed:DWORD;
    begin
     s:=Str;
     Len:=Length(s);
     if Len=0 then exit;
     if s[Len]<>#12 then
     begin
       s:=s+#12;
       inc(Len);
     end;
     PrinterName:=GetDefaultPrinterName;
     if not OpenPrinter(PChar(PrinterName),hPrinter, nil) then RaiseLastOSError;
     try
       DocInfo.pDocName:='DirectPrint';
       DocInfo.pOutputFile:=nil;
       //DocInfo.pDatatype:='RAW';
       DocInfo.pDatatype:='TEXT';

       if StartDocPrinter(hPrinter,1,@DocInfo)=0 then RaiseLastOSError;
       //if not StartPagePrinter(hPrinter) then RaiseLastOSError;
       if not WritePrinter(hPrinter,PChar(s),Len,writed) then RaiseLastOSError;
       if writed<>Len then RaiseLastOSError;
       //if not EndPagePrinter(hPrinter) then RaiseLastOSError;
       if not EndDocPrinter(hPrinter) then RaiseLastOSError;
     finally
       ClosePrinter(hPrinter);
     end;
    end;

  • tesseract © (13.05.08 12:02) [6]

    >    //if not EndPagePrinter(hPrinter) then RaiseLastOSError;


    Принтеры этикеток режим страниц держат довольно редко. Убрал бы , чтобы не смущать.
  • Anatoly Podgoretsky © (13.05.08 12:28) [7]
    Пробуй не AssignPrn, AssignFile на порт принтера.
  • Slym © (13.05.08 14:14) [8]
    tesseract ©   (13.05.08 12:02) [6]
    //они почти убраны :)
  • Гость1468 (13.05.08 20:44) [9]
    Принтер подключен через COM-порт (именно так).

    ESC-последовательности проблему все равно не решили.

    Всем спасибо.

    з.ы. нужно было напечатать на краю листочка, а принтер это не позволяет т.к. имеет два датчика края страницы перед и за головкой. А вертикальный текст  печатает криво.
  • Anatoly Podgoretsky © (14.05.08 12:31) [10]
    Вообще то я не утверждал, что порт принтера именно LPT1 - назначай реальный, если CОM27 то именно его и назначай. Главно, что бы был назначен реальный порт и тогда поток из текстового файла пойдет без преобразований.
 
Конференция "Основная" » ESC-последовательность на принтер - ошибка I/O error 105
Есть новые Нет новых   [134491   +8][b:0][p:0.001]