![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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-последовательности - тоже подойдет.