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