Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.19;
Скачать: CL | DM;

Вниз

ESC-последовательность на принтер - ошибка I/O error 105   Найти похожие ветки 

 
Гость1468   (2008-05-12 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   (2008-05-12 12:18) [1]

Если есть другой способ, достучаться до принтера, с возможностью посылать ESC-последовательности - тоже подойдет.


 
Сергей М. ©   (2008-05-12 12:25) [2]

OpenPrinter + WritePrinter


 
Leonid Troyanovsky ©   (2008-05-12 12:38) [3]


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

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

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

--
Regards, LVT.


 
tesseract ©   (2008-05-12 20:31) [4]


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


Ох уж эти мануалы. AssignPrn сам посылает контролирующие последовательности, так что команда пройдёт через драйвер. Используй WritePrinter если принтер LPT или WriteFile если COM.


 
Slym ©   (2008-05-13 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 ©   (2008-05-13 12:02) [6]


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


Принтеры этикеток режим страниц держат довольно редко. Убрал бы , чтобы не смущать.


 
Anatoly Podgoretsky ©   (2008-05-13 12:28) [7]

Пробуй не AssignPrn, AssignFile на порт принтера.


 
Slym ©   (2008-05-13 14:14) [8]

tesseract ©   (13.05.08 12:02) [6]
//они почти убраны :)


 
Гость1468   (2008-05-13 20:44) [9]

Принтер подключен через COM-порт (именно так).

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

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

з.ы. нужно было напечатать на краю листочка, а принтер это не позволяет т.к. имеет два датчика края страницы перед и за головкой. А вертикальный текст  печатает криво.


 
Anatoly Podgoretsky ©   (2008-05-14 12:31) [10]

Вообще то я не утверждал, что порт принтера именно LPT1 - назначай реальный, если CОM27 то именно его и назначай. Главно, что бы был назначен реальный порт и тогда поток из текстового файла пойдет без преобразований.



Страницы: 1 вся ветка

Текущий архив: 2009.04.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
15-1234855526
Andy BitOff
2009-02-17 10:25
2009.04.19
Покритикуйте =)


1-1210132796
Vladix
2008-05-07 07:59
2009.04.19
Friend-классы


15-1235073067
DmitryG.
2009-02-19 22:51
2009.04.19
UnZip TMemoryStream


15-1234857582
Анна
2009-02-17 10:59
2009.04.19
Уравнение для 8 класса


2-1235991728
ZiZiTop
2009-03-02 14:02
2009.04.19
Немного о звуке