문제점에 대한 답변을 올려 주셔서 이것저것 테스트 해보느라 이제야 해결 내용을 올립니다.
몇가지 문제점은 있지만, 대략 기능은 수행하는 것 같아 보입니다.
폼에 프린터다이얼로그 하나 올리셔야 합니다.
문제점 1. 듀얼스크린 지원문제 : 보조모니터에 프로그램을 올리고 실행하면 출력이 안 됩니다. (빈페이지 출력)
문제점 2. 프린터 해상도(DPI ??) 에 따른 출력 싸이즈 자동 조절 : 전 그냥 테스트 하면서 값을 고정 시켰습니다.
혹시 소스를 보시고 해결 가능한 방법을 알려 주시면 열심히 공부하겠습니다.
깊이 있는 덧글 달아주신 장성호님 감사합니다!!
장성호 님이 쓰신 글 :
: @문제원인
: VCL 자체의 GetFormImage 에 문제가 있는듯 합니다.
: Form의 Print함수도 내부적으로 GetFormImage를 이용하고 있어서 문제가 있는것이구요
:
: @상세분석1
: TComboBox는 화면에 보이는 부분이 두개의 window 입니다.
: 바깥으 Frame은 VCL의 TComboBox이지만 안에 글자부분은 win32-control인 "EDIT" 입니다.
: 이는 VCL의 TControl을 상속받은 control이 아니기 때문에 ComboBox의 안쪽 글자 부분이
: 제대로 Print가 되지 않는것 같습니다.
:
:
: @ 해결방안
:
: 방법1
: ComboBox의 원인을 찾아 GetFormImage의 문제점을 해결하는 방법이 있겠구요
:
: 방법2
: 그냥 Form의 Client영역만 화면캡쳐하는 방법을 이용하여 캡쳐하는 방법 있을것입니다.
: 다음 링크에 두어가지 방법이 나와 있습니다.
:
http://stackoverflow.com/questions/3190777/how-do-i-copy-a-form-as-an-image-to-the-clipboard
:
: 2-1 : GetDC(0) -> BitBlt
:
: 2-2 : PrintWindow
:
:
: @ 비고
:
: 두방법이 모두 똑같지는 않습니다.
: 주의1. GetFormImage는 Form이 화면(모니터,스크린)밖을 벗어나도 캡쳐가 됩니다만
: 2-1번 방법은 Form이 스크린 밖으로 나가면 밖으로 나간 부분이 캡쳐가 되지는 않습니다.
:
: 주의2. 또한 작업관리자 같은 다른 TopMost-Window가 Form 보다 앞에 떠 있는경우
: TopMost-Window와 같이 캡쳐됩니다.
:
: PrintWindow라는 API를 이용하는것이 좀더 좋은데요
: 이놈도 전혀 문제가 없는것으 아니구요
:
:
: 그럼..
:
:
:
: 로더 님이 쓰신 글 :
: : 안녕하세요. 로더입니다.
: :
: : 제목 그대로 폼을 프린트 하려는데
: :
: : 콤보박스에 선택된 내용이 출력 안되는 문제가 발생 되었습니다.
: : (기타 다른 컨트롤들(메모, 에디트박스 등)의 내용은 잘 출력이 됩니다.)
: :
: : 방법은 2가지를 시도해 보았습니다.
: :
: : 1. 폼의 Priint() 사용 (프린터 선택 문제 발생.)
: :
: : form->PrintScale = poPrintToFit;
: : form->Print();
: : ShowMessage("인쇄 완료");
: :
: : 2. GetFormImage() 사용 (Q&A 게시판 참고)
: :
: : Graphics::TBitmap *FormImage = form->GetFormImage();
: : if(PrintDialog->Execute())
: : {
: : Printer()->BeginDoc();
: : Printer()->Canvas->Draw((FormImage->Width),
: : (FormImage->Height),
: : FormImage);
: : Printer()->EndDoc();
: : }
: : delete FormImage;
: : ShowMessage("인쇄 완료");