Форум: "Основная";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.049 c