::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2003-03-06 22:03:03, Hit : 4939, Vote : 1196
 ASCII printing

Jerry: >>This works fine on my system and on several others.  However, I am
getting some reports that some printers never get the output.  They may
or may not light up that they are receiving data, but they don't print.
<<

Then, it would seem you need the following code from Joe Hecht ?

    PhR

--------Joe C. Hecht --------------

Note that you have to include WinSpool in the uses clause.


procedure PrintFile(const sFileName: string);
const
  BufSize = 16384;
type
  TDoc_Info_1 = record
    pDocName: pChar;
    pOutputFile: pChar;
    pDataType: pChar;
  end;
var
  Count, BytesWritten: integer;
  hPrinter: THandle;
  Device : array[0..255] of char;
  Driver : array[0..255] of char;
  Port   : array[0..255] of char;
  hDeviceMode: THandle;
  DocInfo: TDoc_Info_1;
  f: file;
  Buffer: Pointer;
begin
  Printer.PrinterIndex := -1;
  Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
  if not WinSpool.OpenPrinter(@Device, hPrinter, nil) then
    exit;
  DocInfo.pDocName := 'MyDocument';
  DocInfo.pOutputFile := nil;
  DocInfo.pDatatype := 'RAW';
  if StartDocPrinter(hPrinter, 1, @DocInfo) = 0 then
  begin
    WinSpool.ClosePrinter(hPrinter);
    exit;
  end;
  if not StartPagePrinter(hPrinter) then
  begin
    EndDocPrinter(hPrinter);
    WinSpool.ClosePrinter(hPrinter);
    exit;
  end;

  System.Assign(f, sFileName);
  try
    Reset(f, 1);
    GetMem(Buffer, BufSize);
    while not eof(f) do
    begin
      Blockread(f, Buffer^, BufSize, Count);
      if Count > 0 then
      begin
        if not WritePrinter(hPrinter, Buffer, Count, BytesWritten) then
        begin
          EndPagePrinter(hPrinter);
          EndDocPrinter(hPrinter);
          WinSpool.ClosePrinter(hPrinter);
          FreeMem(Buffer, BufSize);
          exit;
        end;
      end;
    end;
    FreeMem(Buffer, BufSize);
    EndDocPrinter(hPrinter);
    WinSpool.ClosePrinter(hPrinter);
  finally
    System.Closefile(f);
  end;
end;

*************************************
procedure WriteRawStringToPrinter(PrinterName: String; S: String);
var
  Handle: THandle;
  N: DWORD;
  DocInfo1: TDocInfo1;
begin
  if not OpenPrinter(PChar(PrinterName), Handle, nil) then
  begin
    ShowMessage('error ' + IntToStr(GetLastError));
    Exit;
  end;

  with DocInfo do
  begin
    pDocName := PChar('test doc');
    pOutputFile := nil;
    pDataType := 'RAW';
  end;

  StartDocPrinter(Handle, 1, ocInfo);
  StartPagePrinter(Handle);
  WritePrinter(Handle, PChar(S), Length(S), N);
  EndPagePrinter(Handle);
  EndDocPrinter(Handle);
  ClosePrinter(Handle);
end;

The PrinterName parameter must be the name of the printer as it is
installed. For example, if the name of the printer
is "HP LaserJet 5MP" then that is what you should pass.





491   [윈도우즈 API] 화면캡처하기 Delphi3.0에서...  김영대 2003/03/04 4886 1327
490   [일반/컴포넌트] Outlook Express 설치여부 알아내기  김영대 2003/03/07 4886 1128
489   [알고리즘] 임의의 밑수(radix)를 사용한 진법변환  김영대 2004/12/08 4886 1215
488   [일반/컴포넌트] ListBox.Items.Add 는 느리고 깜박거린다(?)  김영대 2003/03/05 4888 1139
487   [윈도우즈 API] 탐색기와 같은 BrowseFolder 열기  김영대 2003/03/05 4888 1317
486   [윈도우즈 API] 메모(TMemo)의 커서(캐럿)모양 바꾸기  김영대 2003/03/05 4888 1913
485   [시스템] 설치된 modem 리스트 구하기  김영대 2003/03/07 4888 1416
484   [COM/OLE] Registering *.tlb files without Delphi  김영대 2003/03/06 4891 1127
483   [네트웍/인터넷] 네트워크 컴퓨터가 존재하는지 검사하기  김영대 2003/03/07 4892 1261
482   [윈도우즈 API] 휴지통이 비어있는지 확인하기  김영대 2004/08/05 4896 1242
481   [윈도우즈 API] 다른 프로그램의 구동 디렉토리 알아내기  김영대 2003/03/07 4898 1336
480   [일반/컴포넌트] 문자열 역으로 만들기(reverse a string)  김영대 2003/03/06 4899 1486
479   [일반/컴포넌트] ListBox의 내용을 클립보드로 복사하기  김영대 2003/03/05 4903 1134
478   [일반/컴포넌트] TRichEdit 콤포넌트 없이 RTF파일 인쇄하기  김영대 2003/03/05 4903 1420
477   [네트웍/인터넷] 인터넷에 LAN 또는 Modem으로 접속중인지 검사  김영대 2003/03/07 4905 1300
476   [일반/컴포넌트] 프린터로 escape 문자 출력하기(raw print)  김영대 2003/03/07 4907 1231
475   [네트웍/인터넷] IP로 이름 구하기 또는 이름으로 IP 구하기  김영대 2003/03/30 4908 1286
474   [일반/컴포넌트] Convert between a DFM and a TXT file  김영대 2003/03/05 4909 1428
473   [데이터베이스] DBGrid 에서 선택된 필드의 타이틀을 굵게  김영대 2003/03/04 4911 1356
472   [시스템] CD-ROM 문 열기/닫기  김영대 2003/03/04 4915 1413
471   [알고리즘] 32bit CRC (cyclic redundancy check)  김영대 2004/09/17 4918 1233
470   [일반/컴포넌트] Bitmap(BMP) 크기를 변경(Stretch)하여 저장하기  김영대 2003/03/07 4919 1299
469   [시스템] 프로그램 제거(Uninstall) 목록 구하기  김영대 2004/08/05 4922 1308
468   [일반/컴포넌트] 동적으로 프로젝트의 Main form 바꾸기  김영대 2003/04/11 4924 1188
467   [일반/컴포넌트] StrToFloatDef  김영대 2003/11/13 4927 1258
466   [시스템] CPU의 사용률 구하기  김영대 2003/03/07 4929 1275
465   [일반/컴포넌트] Memo의 커서를 특정 위치로 보낸후 scroll 시키기  김영대 2003/03/05 4933 1158
464   [시스템] 마우스 포인터 속도 바꾸기  김영대 2003/03/06 4933 1250
463   [일반/컴포넌트] ListView 의 column header 오른쪽에 이미지 넣기  김영대 2003/03/07 4937 1209
462   [일반/컴포넌트] PageControl 에서 미리 이동하려는 Sheet 알아내어 제어하기  김영대 2004/09/13 4938 1260
  [일반/컴포넌트] ASCII printing  김영대 2003/03/06 4939 1196
460   [일반/컴포넌트] MIME 타입에 해당하는 파일 확장자 구하기  김영대 2004/11/18 4941 1326
459   [네트웍/인터넷] Read/Write to COM Port  김영대 2003/03/07 4943 1173
458   [일반/컴포넌트] Multi-Line Hints  김영대 2003/03/05 4948 1487
457   [윈도우즈 API] '알려진 파일 형식의 파일 확장명 숨김' 여부  김영대 2004/08/25 4954 1250
456   [일반/컴포넌트] URL 을 각 part로 분리하기  김영대 2003/03/30 4955 1272
455   [윈도우즈 API] IE 임시 인터넷 파일 폴더 비우기2  김영대 2004/08/11 4958 1299
454   [COM/OLE] How to register an OCX  김영대 2003/03/06 4959 1169
453   [일반/컴포넌트] 파일의 변경/생성/사용한 날짜 바꾸기  김영대 2003/03/07 4959 1260
452   [윈도우즈 API] 현재 키보드 입력 언어 구하기  김영대 2004/07/24 4962 1347

[이전 10개] [1]..[11][12] 13 [14][15][16][17][18][19][20]..[25] [다음 10개]
 

Copyright 1999-2021 Zeroboard / skin by zero