Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

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

 
maddognt   (2004-11-27 14:19) [0]

Здравствуйте Уважаемые мастера
Я печатаю на матричном принтере (Epson LX 300) из Delphi следующим способом:

  with Printer do
  begin
     BeginDoc;
     Canvas.TextRect(Rect(20,20,PageWidth-10,PageHeight-10),
     20, 20, "Some text");
     EndDoc;
  end;

Проблема в том, что принтер печатает текст в два прохода каретки.
А я хочу в один. Если на принтере принудительно выставить шрифт Draft, то при посылке на печать он все равно переходит в режим Roman.
Как заставить принтер печатать текст в один проход каретки?
Пробовал способ из FAQ, но он тоже не помог.

Заранее благодарен.


 
programania ©   (2004-11-27 23:17) [1]

Матричный принтер таким способом
печатает в графическом режиме т.е. по точкам, очень медленно
и за 1 проход, если у него хватит иголок на высоту шрифта,
а шрифт берется из printer.canvas.font и
выставлять что-то на принтере бесполезно,
можно попробовать уменьшить font.size или
поставить черновое качество.
Но быстрее всего печать будет, если писать
символы в LPT как в DOS.
Если NT,XP то смотрите http://www.specosoft.com


 
maddognt   (2004-11-28 11:20) [2]

font.size я менял, это не помогло.
А как поставить черновое качество?
В драйвере для lx 300 под winxp я нашел какие то дополнительные возможности печати и добился чтобы принтер печатал в один проход, а в драйвере под win98 ничего подобного нет. Сделал минимальное качество печати, но он все равно печатает в несколько проходов.


 
KSergey ©   (2004-11-28 14:15) [3]

Хоть что с нимделай - все равно будет печатать в графическом режиме. Т.е. медленно и не в один проход. Вы же, думаю, хотите в текстовом, родными шрифтами принтера.

Посмотрите PReport, там это есть. (ручками - ф-ции, увы, не помню. есть желание - шлите мыло, отпишу краткий примерчик)


 
KSergey ©   (2004-11-29 06:58) [4]

Особо чистить было лень

var
   DocInfo : DOC_INFO_1;
   h : Cardinal;
   PrinterOpened,DocStarted,PageStarted : boolean;

   // вывести строку
   procedure OutStr (AStr: String);
   var
     BytesWritten : cardinal;
   begin
     AStr := AStr + #13#10;
     WritePrinter (h, PChar(AStr), Length(AStr), BytesWritten);
   end;

   // выкинуть страницу
   procedure EjectPage;
   const
     EJECT_PAGE_CODE: String = #12;
   var
     BytesWritten : cardinal;
   begin
     WritePrinter (h, PChar(EJECT_PAGE_CODE), Length(EJECT_PAGE_CODE), BytesWritten);
   end;

   procedure InitPrinter;
   begin
     // подготовка
     PrinterOpened:=false;
     DocStarted   :=false;
     PageStarted  :=false;

     if not OpenPrinter(PChar(PrName),h,nil) then
       raise Exception.Create (SysErrorMessage(GetLastError ));
     PrinterOpened := TRUE;
     DocInfo.pDocName   := PChar(Application.MainForm.Caption);
     DocInfo.pOutputFile:=nil;
     DocInfo.pDatatype  :="RAW";
     if StartDocPrinter(h,1,@DocInfo)=0 then
       raise Exception.Create (SysErrorMessage(GetLastError ));
     DocStarted := TRUE;
     PageStarted := StartPagePrinter(h);
     if not PageStarted then
       raise Exception.Create (SysErrorMessage(GetLastError ));
   end;

-------- собственно пример печати ----------

 try
   InitPrinter;

 // здесь пошла печать по строкам
 OutStr("Текст");
 OutStr("Текст 2");
 OutStr("Текст 3");
//  EjectPage;  // если надо выкинуть страницу
 finally
   // завершающие действия
   if PageStarted then EndPagePrinter(h);
   if DocStarted then EndDocPrinter(h);
   if PrinterOpened then ClosePrinter(h);
 end;



Страницы: 1 вся ветка

Текущий архив: 2005.01.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.031 c
1-1104314237
denis24
2004-12-29 12:57
2005.01.16
Поток и переменная


3-1102329250
Yurij-7
2004-12-06 13:34
2005.01.16
Коректировка структуры DBF файла


6-1096999575
Ezhik
2004-10-05 22:06
2005.01.16
TClientSocket и TServerSocket


1-1103792518
SbtON
2004-12-23 12:01
2005.01.16
PopUpMenu в StringGrid


14-1103913597
olookin
2004-12-24 21:39
2005.01.16
Какова роль общества в прогрессе?