Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
6-1145771824
Junior
2006-04-23 09:57
2006.09.17
Блокировка соединения по ip/MAC адресу


15-1156945347
vecna
2006-08-30 17:42
2006.09.17
Mazda vs Focus


4-1147882094
ChainikDenis
2006-05-17 20:08
2006.09.17
Опять принтер на RS232...


15-1156243964
Ломброзо
2006-08-22 14:52
2006.09.17
Ищется утилита


2-1157025359
Neket
2006-08-31 15:55
2006.09.17
Скрытие программы от посторонних глаз





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский