Текущий архив: 2007.01.21;
Скачать: CL | DM;
Вниз
Печать на матричном принтере. Найти похожие ветки
← →
иван8511 (2006-09-03 22:37) [0]Для печати на матричном принтере Epson LX-300 (в обход Windows) использую код
procedure TForm1.Button3Click(Sender: TObject);
var
Lst: TextFile;
begin
AssignFile(Lst, "LPT1");
Rewrite(Lst);
Label1.Caption := WinToDos("Привет мир!!!");
WriteLn(Lst, Label1.Caption);
CloseFile(Lst);
end;
Если использовать другие способы печати, то после напечатанной строки лист бумаги полностью выезжает, а мне нужно печатать на РУЛОННОЙ бумаге талончики.
Но при этом коде не знаю как послать на принтер управляющий символ типа уплотнения печати – ESC M, и другие тоже. Подскажите как можно послать управляющий символ.
← →
Ketmar © (2006-09-03 22:43) [1]громко. можно матом. а можно по коду, который #27. а потом остальные. ибо тут не "управляющий символ", а "управляющая последовательность".
← →
иван8511 (2006-09-03 22:46) [2]Спасибо, а можно маленький примерчик? Пожалуйста.
← →
Ketmar © (2006-09-03 23:11) [3]как тяжео-то сегодня...
#27"M"
← →
иван8511 (2006-09-04 01:10) [4]Извините, но не работает... Может еще чего подскажите
← →
Ketmar © (2006-09-04 01:12) [5]подскажу пользоваться поиском, потому что подобная тема была совсем недавно.
← →
Slym © (2006-09-04 04:24) [6]
unit Unit1;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
ComObj,SysUtils, DirectPrintLib_TLB, StdVcl;
type
TDirectPrint = class(TAutoObject, IDirectPrint)
protected
procedure PrintStr(const Str: WideString); safecall;
end;
implementation
uses Windows,WinSpool,ComServ,Consts;
function GetDefaultPrinterName:string;
function FetchStr(var Str: PChar): PChar;
var P: PChar;
begin
Result := Str;
if Str = nil then Exit;
P := Str;
while P^ = " " do Inc(P);
Result := P;
while (P^ <> #0) and (P^ <> ",") do Inc(P);
if P^ = "," then
begin
P^ := #0;
Inc(P);
end;
Str := P;
end;
var
ByteCnt, StructCnt: DWORD;
DefaultPrinter: array[0..1023] of Char;
Cur: PChar;
PrinterInfo: PPrinterInfo5;
begin
result:="";
ByteCnt:=0;
StructCnt:=0;
if not EnumPrinters(PRINTER_ENUM_DEFAULT,nil,5,nil,0,ByteCnt,StructCnt) and (GetLastError<>ERROR_INSUFFICIENT_BUFFER) then
begin
if GetLastError = ERROR_INVALID_NAME then
raise Exception.Create(SNoDefaultPrinter)
else
RaiseLastOSError;
end;
PrinterInfo:=AllocMem(ByteCnt);
try
if not EnumPrinters(PRINTER_ENUM_DEFAULT,nil,5,PrinterInfo,ByteCnt,ByteCnt,StructCnt) then
RaiseLastOSError;
if StructCnt>0 then
result:=PrinterInfo.pPrinterName
else begin
GetProfileString("windows","device","",DefaultPrinter,SizeOf(DefaultPrinter)-1);
Cur:=DefaultPrinter;
result:=FetchStr(Cur);
end;
finally
FreeMem(PrinterInfo);
end;
if result="" then
raise Exception.Create(SNoDefaultPrinter);
end;
procedure TDirectPrint.PrintStr(const Str: WideString);
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;
initialization
TAutoObjectFactory.Create(ComServer, TDirectPrint, Class_DirectPrint,
ciMultiInstance, tmApartment);
end.
← →
isasa © (2006-09-04 15:25) [7]Я думаю этого будет мало. На LX 300 сзади есть рычаг переключения типа подачи трактор-листовая. Если не переключать, то отсчитав, где-то 66 линий, будет автовыброс страницы при страничной подаче. Рычаг на трактор, и выключить-включить(это обязательно). Далее Руководство пользователя в руки, раз эскейп-последовательностями пользуешься.
← →
isasa © (2006-09-04 15:38) [8]Да, забыл добавить, как всегда.
Для простоты(чтобы не морочить голову третьими компонентами), в системных настройках принтера -Advanced (Дополнительно(?), сорри у меня на работе анг. винда) включить флаг Print directly to the printer Spool print documents .... По идее, это выключит спулер печати (spoolsv.exe) и все пойдет напрямую в принтер, правда приложение будет ждать конца печати.
← →
isasa © (2006-09-04 15:40) [9]включить флаг Print directly to the printer Spool print documents ....
читать как
включить флаг Print directly to the printer и выключить Spool print documents ....
Страницы: 1 вся ветка
Текущий архив: 2007.01.21;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.034 c