Форум: "Начинающим";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
ВнизПечать без прокрутки страницы Найти похожие ветки
← →
иван8511 (2006-08-28 01:00) [0]Подскажите, пожалуйста, как сделать что б когда печатаешь несколько строчек на матричном принтере Epson LX-300, после этого страница автоматически не выезжала из принтера, а там же и оставалась что б на ней можно было верхний кусочек оторвать, а на остальной печатать дальше. Это особенно актуально при печати на рулоне, а то он так весь рулон перекрутит в пустую.
Для печати использую следующий код
procedure TForm1.Button1Click(Sender: TObject);
var
To_Prn : TextFile;
begin
Button1.Enabled:=False;
AssignPrn(To_Prn);
Rewrite(To_Prn);
Writeln(To_Prn, Label1.Caption);
CloseFile(To_Prn);
end;
Спасибо.
← →
Германн © (2006-08-28 01:14) [1]
> иван8511 (28.08.06 01:00)
>
> Подскажите, пожалуйста, как сделать что б когда печатаешь
> несколько строчек на матричном принтере Epson LX-300, после
> этого страница автоматически не выезжала из принтера, а
> там же и оставалась что б на ней можно было верхний кусочек
> оторвать, а на остальной печатать дальше. Это особенно актуально
> при печати на рулоне, а то он так весь рулон перекрутит
> в пустую.
Хороший вопрос. Вот только ответ на него, похоже, мало кто знает. :-(
Сам пару раз сталкивался. В первый раз спасло то, что принтер был подключен к СОМ-порту. Во-второй, спасло то, что количество строк всегда было одинаково. (Подогнал юзер размер страницы).
← →
Ketmar © (2006-08-28 01:29) [2]когда-то печатал путём прямого обращения к порту. %-)
← →
Германн © (2006-08-28 01:31) [3]
> Ketmar © (28.08.06 01:29) [2]
>
> когда-то печатал путём прямого обращения к порту. %-)
>
Это мой первый раз. Давно это было! На одном из "Ижевских" заводов.
← →
guav © (2006-08-28 01:33) [4]Сам не пробовал, и не могу (нет матричника сейчас), но есть подозрение, что это
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/prntspol_93g2.asp
будет работать. Причём, если будет работать, то быстрее чем приведенный код, т.к. можно будет печатать текст как текст, а не как графику.
← →
иван8511 (2006-08-28 01:42) [5]А что это такое? И как этим пользоваться?
← →
Германн © (2006-08-28 01:44) [6]
> guav © (28.08.06 01:33) [4]
Есть подозрения (сам не пробовал конкретно этот вариант), что принцип Windows печати документов (а страница - это структурная единица документа, имхо) тут остаётся! Что быстрее - уже не важно, всё равно механика - наиболее медленный узел при печати.
← →
Ketmar © (2006-08-28 01:47) [7]да валить прямо в порт и не усложнять. это ж не лазерник.
← →
иван8511 (2006-08-28 01:47) [8]Я понимаю. Но мне нужно печатать отрывные талоны. А на лазерном не напечатаешь. На бумаге разоришься.
← →
иван8511 (2006-08-28 01:48) [9]А как валить то?
← →
guav © (2006-08-28 01:50) [10]> [4] guav ©
Я имел ввиду, не вызывать EndPagePrinter и StartPagePrinter в том примере.
Кстати, если печатать через GDI обычным способом (StartDoc, вывод на DC, EndDoc) и не вызывать EndPage/StartPage не будет ли требуемый результат ?
> Что быстрее - уже не важно, всё равно механика - наиболее
> медленный узел при печати.
Вы в DOS текст наверное печатали, и знаете, что используется знаки, встроенные в принтер, и это быстрее чем печать графики, вот я про это говорю.
← →
guav © (2006-08-28 01:51) [11]> Есть подозрения (сам не пробовал конкретно этот вариант)
> , что принцип Windows печати документов (а страница - это
> структурная единица документа, имхо) тут остаётся!
Осознал. Наверное таки да.
← →
guav © (2006-08-28 01:53) [12]Хотя в верху того примера написано
"It is sometimes necessary to bypass the driver and send printer-specific data directly to a printer.
The following code shows how this can be done for both local and networked printers. This method can be used to replace the PASSTHROUGH escape and SpoolFile methods. ", т.е. вроде бы как раз то
← →
иван8511 (2006-08-28 01:56) [13]Но как этим пользоваться? Куда и как вставлять. Я ведь самый что ни наесть начинающий. Я не понимаю что это за код.
← →
Ketmar © (2006-08-28 02:03) [14]> [13] иван8511 (28.08.06 01:56)
просто процедура. помедитировать и вставить себе в программу. %-) натурально, переведя на Delphi.
или не ставить драйвер принтера в систему вообще, а общаться с ним путём открытия порта через CreateFile() и дальнейшего отсылания в порт всяких буковок.
← →
guav © (2006-08-28 02:07) [15]
> Я не понимаю что это за код.
Перевёл вроде.
Но я сам сомневаюсь что сработает.function RawDataToPrinter(szPrinterName: LPSTR; lpData:
PByte; dwCount: DWORD): BOOL;
var
hPrinter: THandle;
DocInfo: DOC_INFO_1;
dwJob: DWORD;
dwBytesWritten: DWORD;
begin
Result := False;
// Need a handle to the printer.
if not OpenPrinter( szPrinterName, hPrinter, nil ) then
Exit;
DocInfo.pDocName := "My Document";
DocInfo.pOutputFile := nil;
DocInfo.pDatatype := "RAW";
// Inform the spooler the document is beginning.
dwJob := StartDocPrinter( hPrinter, 1, @DocInfo );
if dwJob = 0 then
begin
ClosePrinter( hPrinter );
Exit;
end;
{
// Start a page.
if not StartPagePrinter( hPrinter ) then
begin
EndDocPrinter( hPrinter );
ClosePrinter( hPrinter );
Exit;
end;
}
// Send the data to the printer.
if not WritePrinter( hPrinter, lpData, dwCount, dwBytesWritten ) then
begin
EndPagePrinter( hPrinter );
EndDocPrinter( hPrinter );
ClosePrinter( hPrinter );
Exit;
end;
{
// End the page.
if not EndPagePrinter( hPrinter ) then
begin
EndPagePrinter( hPrinter );
EndDocPrinter( hPrinter );
ClosePrinter( hPrinter );
Exit;
end;
}
// Inform the spooler that the document is ending.
if not EndDocPrinter( hPrinter ) then
begin
ClosePrinter( hPrinter );
Exit;
end;
// Tidy up the printer handle.
ClosePrinter( hPrinter );
// Check to see if correct number of bytes were written.
if dwBytesWritten <> dwCount then
Exit;
Result := True;
end;
← →
Германн © (2006-08-28 02:15) [16]
> guav © (28.08.06 01:53) [12]
>
> Хотя в верху того примера написано
> "It is sometimes necessary to bypass the driver and send
> printer-specific data directly to a printer.
Ещё раз взгянул на ссылку. Не знаю, надо попробовать. Может быть. В нынешнее время суток - не берусь что-то утверждать.
Кстати
> Сам не пробовал, и не могу (нет матричника сейчас)
не проходит. "Матричник" тут совершенно ни при чем! Всё высказанное в сабже относится напрямую к любому принтеру! Суть только в том, что при "рулонной печати" - наиболее глупо "проматывать" рулон на размер страницы после окончания печати документа.
← →
иван8511 (2006-08-28 02:26) [17]Спасибо, утром попробую, о результатах сообщу.
← →
guav © (2006-08-28 02:35) [18]> не проходит. "Матричник" тут совершенно ни при чем! Всё
> высказанное в сабже относится напрямую к любому принтеру!
Согласен, но
1. Я у себя код успешно выполнил, но у моего принтера (в отличии от матричика) нету "буквогенератора", и он не будет печатать ASCII-текст напрямую, ему графика нужна, а я не знаю что я на него должен подавать для этого.
2. Рулоны впринципе моим принтером не поддерживаются, т.е. я никогда не добъюсь результата, требуемого автором, на нём.
← →
guav © (2006-08-28 02:40) [19]Немного уточнённый код
uses WinSpool;
function RawDataToPrinter(szPrinterName: LPSTR; lpData:
Pointer; dwCount: DWORD): BOOL;
var
hPrinter: THandle;
DocInfo: DOC_INFO_1;
dwJob: DWORD;
dwBytesWritten: DWORD;
begin
Result := False;
// Need a handle to the printer.
if not OpenPrinter( szPrinterName, hPrinter, nil ) then
Exit;
DocInfo.pDocName := "My Document";
DocInfo.pOutputFile := nil;
DocInfo.pDatatype := "RAW";
// Inform the spooler the document is beginning.
dwJob := StartDocPrinter( hPrinter, 1, @DocInfo );
if dwJob = 0 then
begin
ClosePrinter( hPrinter );
Exit;
end;
{
// Start a page.
if not StartPagePrinter( hPrinter ) then
begin
EndDocPrinter( hPrinter );
ClosePrinter( hPrinter );
Exit;
end; }
// Send the data to the printer.
if not WritePrinter( hPrinter, lpData, dwCount, dwBytesWritten ) then
begin
EndPagePrinter( hPrinter );
EndDocPrinter( hPrinter );
ClosePrinter( hPrinter );
Exit;
end;
{
// End the page.
if not EndPagePrinter( hPrinter ) then
begin
EndDocPrinter( hPrinter );
ClosePrinter( hPrinter );
Exit;
end; }
// Inform the spooler that the document is ending.
if not EndDocPrinter( hPrinter ) then
begin
ClosePrinter( hPrinter );
Exit;
end;
// Tidy up the printer handle.
ClosePrinter( hPrinter );
// Check to see if correct number of bytes were written.
if dwBytesWritten <> dwCount then
Exit;
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
line = "The quick brown fox jumped over the lazy dog"#13#10;
begin
// подставить имя своего принтера.
// тут лень пока определять раз непонятно работает ли.
RawDataToPrinter("Samsung ML-1200 Series USB", PChar(line), Length(Line));
end;
← →
Германн © (2006-08-28 02:59) [20]
> > не проходит. "Матричник" тут совершенно ни при чем! Всё
> > высказанное в сабже относится напрямую к любому принтеру!
>
>
> Согласен, но
> 1. Я у себя код успешно выполнил, но у моего принтера (в
> отличии от матричика) нету "буквогенератора", и он не будет
> печатать ASCII-текст напрямую, ему графика нужна,
Ты в этом уверен?
Уверен, что твой принтер не сможет напечать напрямую аглицкую часть ASCII?
← →
guav © (2006-08-28 12:13) [21]> Ты в этом уверен?
> Уверен, что твой принтер не сможет напечать напрямую аглицкую
> часть ASCII?
Да.
Только что специально проверил, подключил к LPT, загрузил DOS, выполнил copy test.txt prn - та же реакция что и на код [19] - данные получил, но не печатает. А "матричник" печатал бы.
← →
Германн © (2006-08-29 02:14) [22]
> guav © (28.08.06 12:13) [21]
>
> > Ты в этом уверен?
> > Уверен, что твой принтер не сможет напечать напрямую аглицкую
> > часть ASCII?
>
> Да.
> Только что специально проверил, подключил к LPT, загрузил
> DOS, выполнил copy test.txt prn - та же реакция что и на
> код [19] - данные получил, но не печатает. А "матричник"
> печатал бы.
Ну раз так - молчу.
На всякий пожарный. Как зовут твоего принтера?
← →
Ketmar © (2006-08-29 02:21) [23]> [22] Германн © (29.08.06 02:14)
когда работает -- "умница". когда слоамлся -- "тварь неблагодарная". %-)
← →
guav © (2006-08-29 02:24) [24]> Как зовут твоего принтера?
Samsung ML 1210
Вообще, в старых прайсах на принтеры часто видел "принтер только под Windows" (это касалось многих принтеров), когда поинтересовался как это, объяснили, что печать из любимого досовского редактора не прокатит. В недавних прайсах подобного не замечал - видимо этот вопрос (печать ASCII) не является актуальным для большинства пользователей сейчас.
Если у тебяcopy test.txt prn
работает, проверь код [19] - мне интересно...
← →
Германн © (2006-08-29 02:30) [25]
> Если у тебя copy test.txt prn работает, проверь код [19]
> - мне интересно...
>
У меня он не работает. Но у меня сейчас принтер подключен через USB. А как работает коммандный процессор с USB я не знаю. :-(
← →
Германн © (2006-08-29 02:42) [26]Т.е. У меня не работает
copy test.txt prn
. Поэтому и [19] я не стал проверять.
Только позавчера купил себе новый принтер. "Окрепло" желание печатать самому фотки. Точнее у моей семьи (Дочка+Жена) оно окрепло. Старый принтер уже удалил из системы, но если ты "очень" хочешь, могу на нём попробовать.
← →
Ketmar © (2006-08-29 02:44) [27]мой HP на работе, кажись, умеет pure ASCII.
← →
Германн © (2006-08-29 02:51) [28]
> Ketmar © (29.08.06 02:44) [27]
>
> мой HP на работе, кажись, умеет pure ASCII.
>
Ну так, если сможешь проверь guav © (29.08.06 02:24) [24]
Если нет, попробую вечером подключить свой старый принтер. Кстати, если мне не изменяет мой склероз, когда я его покупал мне говорили, что под ДОСом он русские символы печатать не умеет.
← →
dolmat (2006-08-29 09:19) [29]Для XP не пробоват, но в 2003 можешь сформировать текстовый файл, затем из программы вызвать "print pass\myfile.txt"? проверь, может print в XP работает.
← →
Ketmar © (2006-08-29 09:46) [30]> [28] Германн © (29.08.06 02:51)
не смогу. принтер без машины, сетевой. %-)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.042 c