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

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


Category

  김영대(2003-03-07 20:20:14, Hit : 4519, Vote : 1219
 DOS-matrix 프린터에 인쇄하기

Question:
How do I write a raw string of a data to the printer?

The following unit "PrtRaw.pas" demonstrates a 16/32 bit
raw printing unit for Delphi and Borland C Builder.

Following the unit, is an exmaple on using the
PrtRaw unit.

Notes:

1) You are responsible for embedding all necessary
control codes that the printer may require (including
form feed codes).

2) You must specify a valid printer and port name.



unit PrtRaw;

{Copyright (c) 1998 by Joe C. Hecht - All rights Reserved}
{joehecht@gte.net You may use and share this unit}
{providing my name and the copyright notice stays intact.}

interface

uses
  WinTypes;

{$IFDEF WIN32}
type SpoolInt = DWORD;
{$ELSE}
type SpoolInt = integer;
{$ENDIF}

function StartRawPrintJob(PrinterName : pChar;
                          Port : pChar;
                          DocName : pChar) : THandle;

function StartRawPrintPage(hPrn : THandle) : integer;

function PrintRawData(hPrn : THandle;
                      Buffer : pointer;
                      NumBytes : SpoolInt) : integer;

function EndRawPrintPage(hPrn : THandle) : integer;

function EndRawPrintJob(hPrn : THandle) : integer;


implementation
uses
   WinProcs,
{$IFDEF WIN32}
WinSpool;
{$ELSE}
Print;
{$ENDIF}


function StartRawPrintJob(PrinterName : pChar;
                          Port : pChar;
                          DocName : pChar) : THandle;
{$IFDEF WIN32}
var
   hPrn : THandle;
   DocInfo1 : TDocInfo1;
{$ENDIF}
begin
{$IFDEF WIN32}
   if (OpenPrinter(PChar(PrinterName),
                   hPrn,
                   nil) = FALSE)  then begin
     Result := THandle(-1);
     Exit;
   end;
   DocInfo1.pDocName := DocName;
   DocInfo1.pOutputFile := Port;
   DocInfo1.pDataType := 'RAW';
   if (StartDocPrinter(hPrn,
                       1,
                       @DocInfo1) = 0) then begin
     Result := THandle(-1);
     exit;
   end;
   Result := hPrn;
{$ELSE}
  result := OpenJob(Port,
                    DocName,
                    0);
{$ENDIF}
end;

function StartRawPrintPage(hPrn : THandle) : integer;
begin
{$IFDEF WIN32}
   if (StartPagePrinter(hPrn) = FALSE) then begin
     Result := -1;
     exit;
   end;
   result := 1;
{$ELSE}
  result := StartSpoolPage(hPrn);
{$ENDIF}
end;


function PrintRawData(hPrn : THandle;
                      Buffer : pointer;
                      NumBytes : SpoolInt) : integer;
{$IFDEF WIN32}
var
  BytesWritten : DWORD;
{$ENDIF}
begin
  if (NumBytes = 0) then begin
    Result := 1;
    exit;
  end;
{$IFDEF WIN32}
   if (WritePrinter(hPrn,
                    Buffer,
                    NumBytes,
                    BytesWritten) = FALSE) then begin
     Result := -1;
     exit;
   end;
   if (NumBytes <> BytesWritten) then begin
     Result := -1;
     exit;
   end;
   Result := 1;
{$ELSE}
  result := WriteSpool(hPrn,
                       Buffer,
                       NumBytes);
{$ENDIF}
end;


function EndRawPrintPage(hPrn : THandle) : integer;
begin
{$IFDEF WIN32}
   if (EndPagePrinter(hPrn) = FALSE) then begin
     Result := -1;
     exit;
   end;
   Result := 1;
{$ELSE}
  result := EndSpoolPage(hPrn);
{$ENDIF}
end;


function EndRawPrintJob(hPrn : THandle) : integer;
begin
{$IFDEF WIN32}
   if (EndDocPrinter(hPrn) = FALSE) then begin
     Result := -1;
     exit;
   end;
   if (ClosePrinter(hPrn) = FALSE) then begin
     Result := -1;
     exit;
   end;
   Result := 1;
{$ELSE}
  result := CloseJob(hPrn);
{$ENDIF}
end;


end.

Example of use:

uses
  PrtRaw;


procedure TForm1.Button1Click(Sender: TObject);
var
  hPrn : THandle;
  Data : array[0..31] of char;
begin

  hPrn := StartRawPrintJob('Generic / Text Only',
                           'LPT1:',
                           'My Document');
  if (integer(hPrn) < 0) then begin
    ShowMessage('StartRawPrintJob Failed');
    exit;
  end;

  if (StartRawPrintPage(hPrn) < 0) then begin
    ShowMessage('StartRawPrintPage Failed');
    EndRawPrintJob(hPrn);
    exit;
  end;

  Data[0] := 'P';
  Data[1] := 'a';
  Data[2] := 'g';
  Data[3] := 'e';
  Data[4] := #32;
  Data[5] := '1';
  Data[6] := #13;
  Data[7] := #10;

  if (PrintRawData(hPrn,
                   @data,
                   8) < 0) then begin
    ShowMessage('PrintRawData Failed');
    EndRawPrintPage(hPrn);
    EndRawPrintJob(hPrn);
    exit;
  end;

  if (EndRawPrintPage(hPrn) < 0) then begin
    ShowMessage('EndRawPrintPage Failed');
    EndRawPrintJob(hPrn);
    exit;
  end;

  if (StartRawPrintPage(hPrn) < 0) then begin
    ShowMessage('StartRawPrintPage Failed');
    EndRawPrintJob(hPrn);
    exit;
  end;
  Data[0] := 'P';
  Data[1] := 'a';
  Data[2] := 'g';
  Data[3] := 'e';
  Data[4] := #32;
  Data[5] := '2';
  Data[6] := #13;
  Data[7] := #10;

  if (PrintRawData(hPrn,
                   @data,
                   8) < 0) then begin
    ShowMessage('PrintRawData Failed');
    EndRawPrintPage(hPrn);
    EndRawPrintJob(hPrn);
    exit;
  end;

  if (EndRawPrintPage(hPrn) < 0) then begin
    ShowMessage('EndRawPrintPage Failed');
    EndRawPrintJob(hPrn);
    exit;
  end;

  if (EndRawPrintJob(hPrn) < 0) then begin
    ShowMessage('EndRawPrintJob Failed');
    exit;
  end;

end;

end.





411   [COM/OLE] 내 프로그램에서 선택한 text를 다른 프로그램에 Drag&Drop으로 주기  김영대 2004/12/10 5805 1225
410   [COM/OLE] TWebBrowser에서 JavaScript 호출하기  김영대 2004/10/09 5565 1225
409   [일반/컴포넌트] Task bar 에 나타나는 프로그램 아이콘 바꾸기  김영대 2004/08/11 5067 1225
408   [데이터베이스] DB에서 자음(ㄱ,ㄴ,ㄷ....)으로 SELECT 하기  김영대 2003/03/12 5168 1225
407   [일반/컴포넌트] 한글이 포함된 문자열 자르기 - 반쪽 한글  김영대 2003/03/04 6355 1225
406   [윈도우즈 API] 실행중인 모든 프로그램 Minimized 시키기  김영대 2003/03/06 4606 1224
405   [윈도우즈 API] 원도우 이동시 다시 그리기 설정/해제  김영대 2003/03/07 4500 1223
404   [데이터베이스] 테이블,인덱스 복사하기  김영대 2003/03/07 4078 1223
403   [시스템] 윈도우즈 서비스 목록 구하기  김영대 2004/07/22 4521 1222
402   [네트웍/인터넷] Winsock WriteFile and Overlapped IO  김영대 2003/11/18 5384 1222
401   [시스템] 윈도우즈 전체의 키보드 입력 금지  김영대 2003/03/07 4558 1222
400   [멀티미디어] JPEG, WAVE 를 resource 파일에 넣고 읽어오기  김영대 2003/03/06 5137 1222
399   [윈도우즈 API] 정의되지 않은 Alt+키 입력시 Beep음 제거  김영대 2003/03/07 4336 1221
398   [윈도우즈 API] 작업관리자의 task switching 금지시키기  김영대 2003/03/07 4637 1221
397   [일반/컴포넌트] TForm을 BMP파일로 저장하기  김영대 2003/03/05 4809 1221
396   [일반/컴포넌트] 한 장당 두 페이지 인쇄하기  김영대 2003/03/05 4759 1221
395   [윈도우즈 API] 떠다니는 윈도우  김영대 2003/03/05 4540 1220
394   [일반/컴포넌트] LZExpand를 사용한 파일 복사하기  김영대 2003/03/04 4045 1220
  [시스템] DOS-matrix 프린터에 인쇄하기  김영대 2003/03/07 4519 1219
392   [시스템] Locking/ Unlocking floppy driver or CD  김영대 2003/03/07 4267 1218
391   [시스템] 현재 내 PC의 비디오 정보  김영대 2003/03/04 4565 1218
390   [일반/컴포넌트] Image의 90도 회전  김영대 2003/03/04 5429 1218
389   [시스템] 윈도우즈 캡션의 높이 읽기/설정  김영대 2003/03/07 4436 1217
388   [알고리즘] 임의의 밑수(radix)를 사용한 진법변환  김영대 2004/12/08 4889 1216
387   [일반/컴포넌트] 문자열 프로시저명으로 실제 프로시저 호출하기2  김영대 2004/10/08 4767 1216
386   [윈도우즈 API] Active Desktop 활성화 여부  김영대 2004/08/25 4638 1216
385   [일반/컴포넌트] IE Toolbar 에 버튼 올리기  김영대 2003/03/26 4751 1215
384   [윈도우즈 API] 휴지통에 파일을 버리는 법  신훈재 2003/03/10 4578 1215
383   [윈도우즈 API] Window Handle 로 실행파일명 구하기  김영대 2003/03/07 4700 1215
382   [윈도우즈 API] Taskbar 감추기/보이기  김영대 2003/03/05 4655 1215
381   [일반/컴포넌트] 주어진 문자열에 잘못된 숫자값이 들어있는지 검사  김영대 2003/03/04 4182 1215
380   [일반/컴포넌트] ListView 의 item 을 강제로 편집상태로 만들기  김영대 2003/03/07 4604 1213
379   [일반/컴포넌트] ListBox의 내용을 파일로 저장하고 불러오기  김영대 2003/03/04 4333 1213
378   [시스템] 윈도우즈 부팅 모드(정상, 안전)  김영대 2004/08/05 4250 1212
377   [일반/컴포넌트] Windows의 사용자이름, 작업그룹 구하기  김영대 2003/04/01 4854 1212
376   [일반/컴포넌트] Form이 생성되어 있는지 검사하기  김영대 2003/03/05 4113 1212
375   [윈도우즈 API] 윈도우즈 "시작" 메뉴 표시하기/감추기  김영대 2003/03/07 4532 1211
374   [시스템] 기본 프린터가 있어야 실행하지 ?  김영대 2003/03/05 4568 1211
373   [일반/컴포넌트] TEdit의 OnChange에서 Text 바꾸기  김영대 2003/03/04 4171 1211
372   [일반/컴포넌트] StringGrid의 Column의 크기(width) 자동 조절  김영대 2003/03/04 6628 1211

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

Copyright 1999-2021 Zeroboard / skin by zero