-
Код 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');
System.CloseFile(MyFile);
End;
То все печатает.
-
Если есть другой способ, достучаться до принтера, с возможностью посылать ESC-последовательности - тоже подойдет.
-
OpenPrinter + WritePrinter
-
-
> Последовательност <ESC>+'M' описана в мануале принтера
Ох уж эти мануалы. AssignPrn сам посылает контролирующие последовательности, так что команда пройдёт через драйвер. Используй WritePrinter если принтер LPT или WriteFile если COM.
-
маленький пример: 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:='TEXT';
if StartDocPrinter(hPrinter,1,@DocInfo)=0 then RaiseLastOSError;
if not WritePrinter(hPrinter,PChar(s),Len,writed) then RaiseLastOSError;
if writed<>Len then RaiseLastOSError;
if not EndDocPrinter(hPrinter) then RaiseLastOSError;
finally
ClosePrinter(hPrinter);
end;
end;
-
> //if not EndPagePrinter(hPrinter) then RaiseLastOSError;
Принтеры этикеток режим страниц держат довольно редко. Убрал бы , чтобы не смущать.
-
Пробуй не AssignPrn, AssignFile на порт принтера.
-
tesseract © (13.05.08 12:02) [6] //они почти убраны :)
-
Принтер подключен через COM-порт (именно так).
ESC-последовательности проблему все равно не решили.
Всем спасибо.
з.ы. нужно было напечатать на краю листочка, а принтер это не позволяет т.к. имеет два датчика края страницы перед и за головкой. А вертикальный текст печатает криво.
-
Вообще то я не утверждал, что порт принтера именно LPT1 - назначай реальный, если CОM27 то именно его и назначай. Главно, что бы был назначен реальный порт и тогда поток из текстового файла пойдет без преобразований.
|