Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Гость1468 ©   (2008-05-12 09:44:00) 

Код
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;

То все печатает.


Anatoly Podgoretsky   (2008-05-14 12:31:00) [1]

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


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

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

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

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

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


Slym   (2008-05-13 14:14:00) [3]

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


Anatoly Podgoretsky   (2008-05-13 12:28:00) [4]

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


tesseract   (2008-05-13 12:02:00) [5]


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


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


Slym   (2008-05-13 08:24:00) [6]

маленький пример:

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-12 20:31:00) [7]


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


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


Leonid Troyanovsky   (2008-05-12 12:38:00) [8]


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

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

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

--
Regards, LVT.


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

OpenPrinter + WritePrinter


Гость1468   (2008-05-12 12:18:00) [10]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо