Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];

Вниз

Печать на матричном принтере.   Найти похожие ветки 

 
иван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 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.045 c
2-1167998104
dddd
2007-01-05 14:55
2007.01.21
конвертация типа integer в Date


3-1162412746
Gunek
2006-11-01 23:25
2007.01.21
Как выполнить запрос на выборку данных из нескольких таблиц?


11-1124270752
L505
2005-08-17 13:25
2007.01.21
Font.Size or FontSize vs FontHeight


8-1148966463
-=Germe$=-
2006-05-30 09:21
2007.01.21
сплайн-интерполяция


2-1167689615
Footballer
2007-01-02 01:13
2007.01.21
TMemo и его Lines





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский