Q&A

  • 텍스트 인쇄?
으아... 미치겠습니다.



인쇄를 하기 위해서



매핑모드 바꾼거 까지는 좋았습니다.



텍스트를 인쇄하기 전까지는 말이죠... -.-;;



그런데... 텍스트가 지 마음대로 인쇄가 되는 것입니다.



이 난관을 어떻게 극복해야 할까요?



알려 주세용...



저는 델파이의 Printer객체를 사용해서 인쇄를 하려 합니다.



이 질문을 윈도우API로 분류해도 되는지 몰겠네요...



그럼...





- 글을 읽어 주셔서 감사합니다.

7  COMMENTS
  • Profile
    황하강 1999.06.23 04:00
    [질문]기본 프린터의 온라인 상태 체크...

    델파이 2.0 에서 기본 프린터가 켜져있는지, 온라인 상태인지를 체크하는

    명령어가 무엇인가요? (혹, 명령어가 없다면 어떻게 해야하나요?)

  • Profile
    남윤혁 1999.04.16 02:34
    -.-;; 무슨말인지 잘모르겠네요...



    다시 정리해서 올립니다.



    아래의 함수는 그리기 전용함수입니다.

    이곳에서 모든것을 그리죠...



    procedure DrawContent( c: TCanvas );

    begin

    with c do

    begin

    Rectangle( 150, 50, 250, 400 );

    MoveTo( 100, 100 );

    LineTo( 300, 300 );

    Font.Size:= 10;

    TextOut( 200, 200, '테스트' );

    Font.Size:= 20;

    TextOut( 200, 400, '테스트' );

    end;

    end;



    미리보기 버튼을 누르면 다음과 같이 화면에 나옵니다.



    procedure TfrmPrinter04.btnDrawClick(Sender: TObject);

    var

    sWin, sView: TSize;

    begin

    SetMapMode( imgArea.Canvas.Handle, MM_ISOTROPIC );

    SetWindowExtEx( imgArea.Canvas.Handle, 300, 300, @sWin );

    SetViewportExtEx( imgArea.Canvas.Handle, 300, 300, @sWin );



    DrawContent(imgArea.Canvas);

    end;



    여기서 imgArea는 TImage컴포넌트죠...



    그리고 인쇄버튼을 누르면



    procedure TfrmPreview.btnPrintingClick(Sender: TObject);

    var

    XPI, YPI: Integer;

    sWin, sView: Size;

    begin

    if prtDlg.Execute then

    begin

    Printer.BeginDoc;



    XPI:= GetDeviceCaps( Printer.Canvas.Handle, LOGPIXELSX );

    YPI:= GetDeviceCaps( Printer.Canvas.Handle, LOGPIXELSY );



    SetMapMode( Printer.Canvas.Handle, MM_ISOTROPIC );

    SetWindowExtEx( Printer.Canvas.Handle, XPI, YPI, @sWin );

    SetViewportExtEx( Printer.Canvas.Handle, XPI, YPI, @sWin );



    DrawContent( Printer.Canvas );

    Printer.EndDoc;

    end;

    end;



    요렇게 실행을 하죠...



    결과는 인쇄하면 폰트가 무자게 커진다는 말씀... -.-;



    이 문제를 어떻게 해결할까요?



    폰트에 어떤 조작을 가해야 하지 않나요?



    알려주세요...



    프리즈~





  • Profile
    최석기 1999.06.23 17:28
    황하강 께서 말씀하시기를...

    > [질문]기본 프린터의 온라인 상태 체크...

    > 델파이 2.0 에서 기본 프린터가 켜져있는지, 온라인 상태인지를 체크하는

    > 명령어가 무엇인가요? (혹, 명령어가 없다면 어떻게 해야하나요?)



    예전에 김영대님의 팁을 받아 두엇던게 있어서 올려 드립니다..

    참고 하세요..



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

    Dialogs, StdCtrls;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    // 프린터의 상태를 리턴하는 함수

    function PrinterStatus(const APort: Word): Byte; assembler;

    {

    AH 레지스터의 상태값(8 bit) :

    0 - time out

    1 - unused

    2 - unused

    3 - I/O error

    4 - On line selected

    5 - Out of paper

    6 - Acknowledge

    7 - Not Busy

    }

    begin

    asm

    mov ah, 2 { 서비스 2 - Printer Status }

    mov dx, APort { 프린터 포트 - 0 부터 시작 }

    int 17h { 프린터 서비스 인터럽트 }

    mov al, ah { Set function value }

    end;

    end;



    // 프린터의 준비 상태를 리턴하는 함수

    function PrinterReady(APort: Word): Boolean;

    {APort : 0=LPT1, 1=LPT2, etc }

    const

    pTimeOut= $01;

    pIOError= $08;

    pNoPaper= $20;

    pNotBusy= $80;

    pTestAll= pTimeOut + pIOError + pNoPaper;

    begin

    PrinterReady := (PrinterStatus(APort) and pTestAll) = $00;

    end;



    // 프린터 초기화 프로시저

    procedure InitPrinter(const APort: word); assembler;

    begin

    asm

    mov ah, 1

    mov bx, APort

    int 17h

    end;

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    if PrinterReady(1) = True then // LPT1

    ShowMessage('Printer Ready')

    else

    // 에러 발생시 위의 PrinterStatus 함수를 호출하여 에러 상태를

    // 알 수 있습니다

    ShowMessage('Printer off or unplugged');

    end;



    end.





  • Profile
    남윤혁 1999.04.16 00:37
    다시 질문입니다.



    제가



    XPI:= GetDeviceCaps( Canvas.Handle, LOGPIXELSX );

    YPI:= GetDeviceCaps( Canvas.Handle, LOGPIXELSY );

    SetMapMode( Canvas.Handle, MM_ISOTROPIC );

    SetWindowExtEx( Canvas.Handle, 100, 100, @sWin );

    SetViewportExtEx( Canvas.Handle, XPI, YPI, @sWin );



    이 코드를 이용해서 인쇄를 했습니다.



    문제는 화면에 뿌렸을 때는 폰트의 사이즈에 따라



    화면의 비율에 따라 자연스럽게 나오지만



    인쇄로 들어가면 비율에 맞지 않는 이미지가



    나온다는 것이죠...



    이 문제를 해결하려면 어떻게 해야 할까요?



    T.T



    무진장 중요한 문제랍니다.



    그럼.. 고수님들 부탁드립니다.





  • Profile
    황하강 1999.06.24 00:44
    최석기 께서 말씀하시기를...

    > 황하강 께서 말씀하시기를...

    > > [질문]기본 프린터의 온라인 상태 체크...

    > > 델파이 2.0 에서 기본 프린터가 켜져있는지, 온라인 상태인지를 체크하는

    > > 명령어가 무엇인가요? (혹, 명령어가 없다면 어떻게 해야하나요?)

    >

    > 예전에 김영대님의 팁을 받아 두엇던게 있어서 올려 드립니다..

    > 참고 하세요..

    >

    > unit Unit1;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

    > Dialogs, StdCtrls;

    >

    > type

    > TForm1 = class(TForm)

    > Button1: TButton;

    > procedure Button1Click(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > var

    > Form1: TForm1;

    >

    > implementation

    > {$R *.DFM}

    >

    > // 프린터의 상태를 리턴하는 함수

    > function PrinterStatus(const APort: Word): Byte; assembler;

    > {

    > AH 레지스터의 상태값(8 bit) :

    > 0 - time out

    > 1 - unused

    > 2 - unused

    > 3 - I/O error

    > 4 - On line selected

    > 5 - Out of paper

    > 6 - Acknowledge

    > 7 - Not Busy

    > }

    > begin

    > asm

    > mov ah, 2 { 서비스 2 - Printer Status }

    > mov dx, APort { 프린터 포트 - 0 부터 시작 }

    > int 17h { 프린터 서비스 인터럽트 }

    > mov al, ah { Set function value }

    > end;

    > end;

    >

    > // 프린터의 준비 상태를 리턴하는 함수

    > function PrinterReady(APort: Word): Boolean;

    > {APort : 0=LPT1, 1=LPT2, etc }

    > const

    > pTimeOut= $01;

    > pIOError= $08;

    > pNoPaper= $20;

    > pNotBusy= $80;

    > pTestAll= pTimeOut + pIOError + pNoPaper;

    > begin

    > PrinterReady := (PrinterStatus(APort) and pTestAll) = $00;

    > end;

    >

    > // 프린터 초기화 프로시저

    > procedure InitPrinter(const APort: word); assembler;

    > begin

    > asm

    > mov ah, 1

    > mov bx, APort

    > int 17h

    > end;

    > end;

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > begin

    > if PrinterReady(1) = True then // LPT1

    > ShowMessage('Printer Ready')

    > else

    > // 에러 발생시 위의 PrinterStatus 함수를 호출하여 에러 상태를

    > // 알 수 있습니다

    > ShowMessage('Printer off or unplugged');

    > end;

    >

    > end.

    >

    >

    [다시 질문]

    프로그램 예제 잘 받아서 테스트를 해보았습니다.

    그런데 PrinterStatus function 문에서 뭔가 문제가 있는것 같은데...

    제가 분석을 잘못한것인지 아니면 테스트 환경이 잘못되었는지를

    알려주세요.( 나 원참 줘도 못먹네여...)

    감사합니다.



  • Profile
    이정욱 1999.04.16 01:06
    화면 출력 후



    XPI := GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSX);

    YPI := GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSY);



    로 다시 계산 하신후 출력해 보세요.





    남윤혁 wrote:

    > 다시 질문입니다.

    >

    > 제가

    >

    > XPI:= GetDeviceCaps( Canvas.Handle, LOGPIXELSX );

    > YPI:= GetDeviceCaps( Canvas.Handle, LOGPIXELSY );

    > SetMapMode( Canvas.Handle, MM_ISOTROPIC );

    > SetWindowExtEx( Canvas.Handle, 100, 100, @sWin );

    > SetViewportExtEx( Canvas.Handle, XPI, YPI, @sWin );

    >

    > 이 코드를 이용해서 인쇄를 했습니다.

    >

    > 문제는 화면에 뿌렸을 때는 폰트의 사이즈에 따라

    >

    > 화면의 비율에 따라 자연스럽게 나오지만

    >

    > 인쇄로 들어가면 비율에 맞지 않는 이미지가

    >

    > 나온다는 것이죠...

    >

    > 이 문제를 해결하려면 어떻게 해야 할까요?

    >

    > T.T

    >

    > 무진장 중요한 문제랍니다.

    >

    > 그럼.. 고수님들 부탁드립니다.

    >

    >





  • Profile
    안치봉 1999.04.15 23:28
    남윤혁 wrote:

    > 으아... 미치겠습니다.

    >

    > 인쇄를 하기 위해서

    >

    > 매핑모드 바꾼거 까지는 좋았습니다.

    >

    > 텍스트를 인쇄하기 전까지는 말이죠... -.-;;

    >

    > 그런데... 텍스트가 지 마음대로 인쇄가 되는 것입니다.

    >

    > 이 난관을 어떻게 극복해야 할까요?

    >

    > 알려 주세용...

    >

    > 저는 델파이의 Printer객체를 사용해서 인쇄를 하려 합니다.

    >

    > 이 질문을 윈도우API로 분류해도 되는지 몰겠네요...

    >

    > 그럼...

    >

    >

    > - 글을 읽어 주셔서 감사합니다.



    안녕하세요!.



    질문의 범위가 너무 광범위 합니다. 질문을 하실때는 되도록 이면



    이런 이런 코드가 있는데 이런 부분에서 문제가 생기더라 식으로 작성 해주시면



    감사하겠습니다.





    • 안창주
    • 1999.06.23 20:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.06.23 21:02
      안창주 께서 말씀하시기를... > 저는 델파이 책을 처음보는 초보자입니다. > 1데이타베이스에서Alias라는...
    • 최석기
      1999.06.23 20:25
      이종진 께서 말씀하시기를... > DBGrid에서 text값을 다른값으로 바꿔주는 방법을 알고 싶습니다. > ...
    • VMNT
    • 1999.06.23 15:12
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 이슬
      1999.04.15 03:34
      1. ParamByName과 FieldByName의 차이점이 무엇인지요? 2. 폼에 성별(남,여:radiobutton) 체크가 있는데...
    • 김영해
      1999.04.17 08:00
      이슬 wrote: > 1. ParamByName과 FieldByName의 차이점이 무엇인지요? > > 2. 폼에 성별(남,여:radiobu...
    • 신호성
      1999.04.16 01:36
      > 2. 폼에 성별(남,여:radiobutton) 체크가 있는데, DB는 Alpha로 2자리 만들었습니다. > 근데, DBGrid에...
    • 박종모
      1999.04.15 04:44
      이슬 wrote: > 1. ParamByName과 FieldByName의 차이점이 무엇인지요? > > 2. 폼에 성별(남,여:radiobu...
    • 글쎄요
      1999.04.15 05:41
      추가로 답변합니다. 2번째 건데 답변이 잘 못된 것 같아요. 가장 좋은 방법은 DBGRID 대신에 STRINGGRID...
    • 이용민
    • 1999.06.23 12:51
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하남수
      1999.06.23 19:46
      이용민 께서 말씀하시기를... > 안녕하십니까 ? (주) 천의무봉의 이용민입니다. > 작업하다 간간히 의문...
    • 정남용
    • 1999.04.16 01:29
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김정선
      1999.04.23 00:51
      저두 같은 문제로 올렸는데 고맙게도 web@ns.nilex.co.kr라는 분이 메일을 보내왔더라구요.. Autoexec.bat...
    • 이정욱
      1999.04.17 02:26
      저도 역시 이런 문제 때문에 고생을 한적이 있었습니다. 전 엑세스 DB를 사용했을때 문제였죠. 그래서 결...
    • 김정선
      1999.04.16 22:56
      저두 같은 문제가 있었어요.. 아시는 분 꼭좀 가르쳐 주세요 전 델파이4.0 오라클 8.0.5버젼을 가지고 ...
    • francis
    • 1999.06.23 12:22
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 아무게
      1999.06.23 19:58
      이용민 께서 말씀하시기를... > 다음과 같은 의문을 정리해 보겠습니다. > > 1. 그렇다면 참조가 ...
    • 이용민
      1999.06.24 11:23
      (주) 천의무봉의 이용민입니다. 선생의 말씀 고맙습니다. 그런데 깨끗한 정리는 안되는 군요. 자질을 말...
    • 이정욱
      1999.04.16 02:17
      아무래도 케이블을 그냥 두갈래로 뽑으신것 같군요. 그렇게 하면 아마도 제데로 안될것 같네요... 그것보...
    • 화랑
      1999.04.16 03:06
      답변 감사합니다.. 문제는 제가 그 서버를 건드릴수가 없습니다. 지금 현재 나와있는 것은 프린터로 가...
    • 이정욱
      1999.04.16 05:08
      프린터포트를 제어하는것은 문제가 없습니다. 그것을 지원하는 컴포넌트를 본적이 있는데.... 아마도 찾아...
    • 화랑
      1999.04.17 18:11
      매번 감사합니다.. 저기 한가지만 더 하고 싶은데.. 프린트는 앱슨을 쓰거든요.. 혹시 서로 전달되는 ...
    • 강민주
    • 1999.06.23 09:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박흥태
      1999.06.25 03:38
      강민주 께서 말씀하시기를... > 안녕하세요.^^; > 외상장부처리를 위해 외상테이블과 수금 테이블로 > 2...
    • 남윤혁
    • 1999.04.15 22:13
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 남윤혁
      1999.04.16 02:34
      -.-;; 무슨말인지 잘모르겠네요... 다시 정리해서 올립니다. 아래의 함수는 그리기 전용함수입니다. ...
    • 남윤혁
      1999.04.16 00:37
      다시 질문입니다. 제가 XPI:= GetDeviceCaps( Canvas.Handle, LOGPIXELSX ); YPI:= GetDeviceCaps( ...
    • 이정욱
      1999.04.16 01:06
      화면 출력 후 XPI := GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSX); YPI := GetDeviceCaps(Printe...
    • 안치봉
      1999.04.15 23:28
      남윤혁 wrote: > 으아... 미치겠습니다. > > 인쇄를 하기 위해서 > > 매핑모드 바꾼거 까지는 좋았...
    • 박성훈
    • 1999.06.23 05:39
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이용민
      1999.06.23 12:56
      질문에 대한 답은 아니지만 얼핏보이기에... 선생이 쓰시는 이코드는 다음과 같이 간단히 할 수 있거든...
    • 고부성
    • 1999.04.16 00:05
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.04.16 01:04
      음.. 두가지 가능성이 있습니다. 먼저 첫째, Path가 잘못되어있을 경우이죠. 실제로 C:sample.txt 에 저...
    • 이현옥
    • 1999.06.23 05:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영해
      1999.06.23 08:22
      이현옥 께서 말씀하시기를... > 급하게 도사님들의 처방을 기다립니다. > > 프로그램을 실행시키면 > ...
    • 이정석
    • 1999.04.16 00:10
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.04.16 00:56
      이정석 wrote: > 안녕하십니까? > ActvieX Form으로 웹에서 데이타베이스를 사용하는 프로그램을 > 만...
    • 류성호
      1999.06.23 05:13
      변상준 께서 말씀하시기를... > 델파이4 프로페셔널 버전에서 오라클 7.3.2 연결을 하는데 준비 사항 및 ...
    • 남윤혁
    • 1999.04.15 22:13
    • 7 COMMENTS
    • /
    • 0 LIKES
    • 황하강
      1999.06.23 04:00
      [질문]기본 프린터의 온라인 상태 체크... 델파이 2.0 에서 기본 프린터가 켜져있는지, 온라인 상태인지...
    • 남윤혁
      1999.04.16 02:34
      -.-;; 무슨말인지 잘모르겠네요... 다시 정리해서 올립니다. 아래의 함수는 그리기 전용함수입니다. ...
    • 최석기
      1999.06.23 17:28
      황하강 께서 말씀하시기를... > [질문]기본 프린터의 온라인 상태 체크... > 델파이 2.0 에서 기본 프...
    • 남윤혁
      1999.04.16 00:37
      다시 질문입니다. 제가 XPI:= GetDeviceCaps( Canvas.Handle, LOGPIXELSX ); YPI:= GetDeviceCaps( ...
    • 황하강
      1999.06.24 00:44
      최석기 께서 말씀하시기를... > 황하강 께서 말씀하시기를... > > [질문]기본 프린터의 온라인 상태 체크...
    • 이정욱
      1999.04.16 01:06
      화면 출력 후 XPI := GetDeviceCaps(Printer.Canvas.Handle,LOGPIXELSX); YPI := GetDeviceCaps(Printe...
    • 안치봉
      1999.04.15 23:28
      남윤혁 wrote: > 으아... 미치겠습니다. > > 인쇄를 하기 위해서 > > 매핑모드 바꾼거 까지는 좋았...
    • 김민오
    • 1999.06.23 02:49
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정석
      1999.04.16 00:10
      안녕하십니까? ActvieX Form으로 웹에서 데이타베이스를 사용하는 프로그램을 만들려고 합니다. 아시겠...
    • 신인재
      1999.04.16 00:56
      이정석 wrote: > 안녕하십니까? > ActvieX Form으로 웹에서 데이타베이스를 사용하는 프로그램을 > 만...
    • 고부성
    • 1999.04.16 00:05
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김민오
      1999.06.23 02:45
      네트웍으로 연결된 파라독스가 엑세스 바이올레이션과 파라이 일치하지 않느다고 에러가 나옵니다. sql문...
    • 이정욱
      1999.04.16 01:04
      음.. 두가지 가능성이 있습니다. 먼저 첫째, Path가 잘못되어있을 경우이죠. 실제로 C:sample.txt 에 저...