Re: HELP! Принтер замучал.

From
Sergei Meleshko ()
To
All ()
Date
1998-07-24T13:04:15Z
Area
RU.TRADESOFT
From: "Sergei Meleshko" <msd@pnsjkh.belpak.brest.by>
Reply-To: msd@pnsjkh.belpak.brest.by

  Привет Max!

  Max Slobodski сообщает, что его замучал принтер :-)))

[...]
>>>Господа, помогите!
>>>Кто знает, можно ли вообще из-под окошек печатать на матричном принтере
>>>(Epson) на рулоне так,
>>>чтобы он не делал прогонов страниц и не делал промежутков между ними.
>>Пример
>>>использования - печать кассовых чеков - должна выползти одна длинная
>лента.
>
>>Можно, можно в delphi.ru  постоянно обсуждается проблемы печати на
>>матричномпринтере из под windows .
>
>Alex,  если знаете что-либо по этому вопросу, напишите пожалуйста. Посмотред
>последние 300 заголовков в fido7.ru.delphi и ничегл похожего не втдел.

  Я знаю, как это (печать из винды в draft mode на матричном принтере)
сделать и уже полгода успешно применяю. Кидаю процедурку, которая у
меня печатает текст:

[cut here...]
procedure TDocument.Print;
var
  Handle: THandle;
  N: DWORD;
  DocInfo1: TDocInfo1;
  Device,Driver,Port: PChar;
  DeviceMode: Integer;
  i,j: Integer;
const
  PageDivider: PChar = chr(12);
begin
  Device := StrAlloc(255);
  Driver := StrAlloc(255);
  Port := StrAlloc(255);
  Printer.GetPrinter(Device,Driver,Port,DeviceMode);  // определяем принтер
  try
    if not OpenPrinter(Device, Handle, nil) then begin
      MessageDlg('Ошибка принтера ' + IntToStr(GetLastError),mtError,[mbOk],0);
      Abort;
    end;
  finally
    StrDispose(Device);
    StrDispose(Driver);
    StrDispose(Port);
  end; // try finally
  with DocInfo1 do begin
    pDocName := PChar(Caption);
    pOutputFile := nil;
    pDataType := 'RAW';
  end;
  StartDocPrinter(Handle, 1, @DocInfo1);
  for i := 1 to Copies do begin
    for j := 0 to Pages.Count-1 do begin
      StartPagePrinter(Handle);
      WritePrinter(Handle,PChar(StrToOEM((Pages[j] as TStringList).Text)),Length((Pages[j] as TStringList).Text),N);
      if j < Pages.Count-1 then WritePrinter(Handle,PageDivider,StrLen(PageDivider),N);
      EndPagePrinter(Handle);
    end; // for
  end; // for
  EndDocPrinter(Handle);
  ClosePrinter(Handle);
end;
[...and cut here]

  Если тебе доводилось работать с WinAPI, то этот пример ты должен
разобрать без проблем. Если не получится - пишите письма.
--
            Сергей Мелешко  <msd@pnsjkh.belpak.brest.by>
            

--- ifmail v.2.14dev2
 * Origin: Пинское ГПО ЖКХ (2:5020/400@fidonet)