Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Печать без прокрутки страницы [D6, XP]


Страницы:   1 2

иван8511 ©   (2006-08-28 01:00:00) 

Подскажите, пожалуйста, как сделать что б когда печатаешь несколько строчек на матричном принтере 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;

Спасибо.


Ketmar   (2006-08-29 09:46:00) [1]

> [28] Германн ©   (29.08.06 02:51)
не смогу. принтер без машины, сетевой. %-)


dolmat   (2006-08-29 09:19:00) [2]

Для XP не пробоват, но в 2003 можешь сформировать текстовый файл, затем из программы вызвать 'print pass\myfile.txt'? проверь, может print в XP работает.


Германн   (2006-08-29 02:51:00) [3]


> Ketmar ©   (29.08.06 02:44) [27]
>
> мой HP на работе, кажись, умеет pure ASCII.
>

Ну так, если сможешь проверь guav ©   (29.08.06 02:24) [24]
Если нет, попробую вечером подключить свой старый принтер. Кстати, если мне не изменяет мой склероз, когда я его покупал мне говорили, что под ДОСом он русские символы печатать не умеет.


Ketmar   (2006-08-29 02:44:00) [4]

мой HP на работе, кажись, умеет pure ASCII.


Германн   (2006-08-29 02:42:00) [5]

Т.е. У меня не работает copy test.txt prn. Поэтому и [19] я не стал проверять.
Только позавчера купил себе новый принтер. "Окрепло" желание печатать самому фотки. Точнее у моей семьи (Дочка+Жена) оно окрепло. Старый принтер уже удалил из системы, но если ты "очень" хочешь, могу на нём попробовать.


Германн   (2006-08-29 02:30:00) [6]


> Если у тебя copy test.txt prn работает, проверь код  [19]
> - мне интересно...
>

У меня он не работает. Но у меня сейчас принтер подключен через USB. А как работает коммандный процессор с USB я не знаю. :-(


guav   (2006-08-29 02:24:00) [7]

> Как зовут твоего принтера?

Samsung ML 1210

Вообще, в старых прайсах на принтеры часто видел "принтер только под Windows" (это касалось многих принтеров), когда поинтересовался как это, объяснили, что печать из любимого досовского редактора не прокатит. В недавних прайсах подобного не замечал - видимо этот вопрос (печать ASCII) не является актуальным для большинства пользователей сейчас.

Если у тебя copy test.txt prnработает, проверь код  [19] - мне интересно...


Ketmar   (2006-08-29 02:21:00) [8]

> [22] Германн ©   (29.08.06 02:14)
когда работает -- "умница". когда слоамлся -- "тварь неблагодарная". %-)


Германн   (2006-08-29 02:14:00) [9]


> guav ©   (28.08.06 12:13) [21]
>
> > Ты в этом уверен?
> > Уверен, что твой принтер не сможет напечать напрямую аглицкую
> > часть ASCII?
>
> Да.
> Только что специально проверил, подключил к LPT, загрузил
> DOS, выполнил copy test.txt prn - та же реакция что и на
> код [19] - данные получил, но не печатает. А "матричник"
> печатал бы.

Ну раз так - молчу.
На всякий пожарный. Как зовут твоего принтера?


guav   (2006-08-28 12:13:00) [10]

> Ты в этом уверен?
> Уверен, что твой принтер не сможет напечать напрямую аглицкую
> часть ASCII?

Да.
Только что специально проверил, подключил к LPT, загрузил DOS, выполнил copy test.txt prn - та же реакция что и на код [19] - данные получил, но не печатает. А "матричник" печатал бы.


Германн   (2006-08-28 02:59:00) [11]


> > не проходит. "Матричник" тут совершенно ни при чем! Всё
> > высказанное в сабже относится напрямую к любому принтеру!
>
>
> Согласен, но
> 1. Я у себя код успешно выполнил, но у моего принтера (в
> отличии от матричика) нету "буквогенератора", и он не будет
> печатать ASCII-текст напрямую, ему графика нужна,

Ты в этом уверен?
Уверен, что твой принтер не сможет напечать напрямую аглицкую часть ASCII?


guav   (2006-08-28 02:40:00) [12]

Немного уточнённый код

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;


guav   (2006-08-28 02:35:00) [13]

> не проходит. "Матричник" тут совершенно ни при чем! Всё
> высказанное в сабже относится напрямую к любому принтеру!

Согласен, но
1. Я у себя код успешно выполнил, но у моего принтера (в отличии от матричика) нету "буквогенератора", и он не будет печатать ASCII-текст напрямую, ему графика нужна, а я не знаю что я на него должен подавать для этого.
2. Рулоны впринципе моим принтером не поддерживаются, т.е. я никогда не добъюсь результата, требуемого автором, на нём.


иван8511   (2006-08-28 02:26:00) [14]

Спасибо, утром попробую, о результатах сообщу.


Германн   (2006-08-28 02:15:00) [15]


> guav ©   (28.08.06 01:53) [12]
>
> Хотя в верху того примера написано
> "It is sometimes necessary to bypass the driver and send
> printer-specific data directly to a printer.

Ещё раз взгянул на ссылку. Не знаю, надо попробовать. Может быть. В нынешнее время суток - не берусь что-то утверждать.
Кстати
> Сам не пробовал, и не могу (нет матричника сейчас)
не проходит. "Матричник" тут совершенно ни при чем! Всё высказанное в сабже относится напрямуюк любому принтеру! Суть только в том, что при "рулонной печати" - наиболее глупо "проматывать" рулон на размер страницы после окончания печати документа.


guav   (2006-08-28 02:07:00) [16]


> Я не понимаю что это за код.

Перевёл вроде.
Но я сам сомневаюсь что сработает.

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;


Ketmar   (2006-08-28 02:03:00) [17]

> [13] иван8511   (28.08.06 01:56)
просто процедура. помедитировать и вставить себе в программу. %-) натурально, переведя на Delphi.
или не ставить драйвер принтера в систему вообще, а общаться с ним путём открытия порта через CreateFile() и дальнейшего отсылания в порт всяких буковок.


иван8511   (2006-08-28 01:56:00) [18]

Но как этим пользоваться? Куда и как вставлять. Я ведь самый что ни наесть начинающий. Я не понимаю что это за код.


guav   (2006-08-28 01:53:00) [19]

Хотя в верху того примера написано
"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. ", т.е. вроде бы как раз то


guav   (2006-08-28 01:51:00) [20]

> Есть подозрения (сам не пробовал конкретно этот вариант)
> , что принцип Windows печати документов (а страница - это
> структурная единица документа, имхо) тут остаётся!

Осознал. Наверное таки да.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо