|
울상 님이 쓰신 글 :
:
: 제목 그대로입니다.
: 리스트박스의 내용을 메인메뉴에서
: 프린트항목의 인쇄를 누르면
: 프린트되는 방법을 모르겠습니다.
프린트는 TPrinter 객체를 사용하면 됩니다.
이 객체의 Canvas 속성을 사용하여
폼의 Canvas 속성을 사용하여 그림을 그리거나 문자를 출력하는 작업과 동일한 방법으로
프린터에 출력을 할 수 있습니다.
메뉴에 명령을 넣는 방법을 살펴보죠.
빌더 4이하에서는 TMainMenu나 TPopupMenu, TToolBar 각각의 OnClick 이벤트 핸들러만을 사용하는 방법을 주로 썼었지만,
빌더 5의 VCL이나 빌더 6의 CLX 프로그래밍에서는
TActionList를 같이 사용하는 방법을 씁니다.
액션 리스트안에 있는 각각의 액션(TAction)의 Execute 이벤트 핸들러에 코딩을 하고,
메뉴(TMainMenu, TPopupMenu)나 툴바(TToolBar)에 ActionList 속성을 동일하게 지정하면 됩니다.
빌더 6의 VCL에서는 여기서 한 걸음 더 나아가서
TActionManager와 TActionMainMenuBar 또는 TActionToolBar 등의 액션 밴드(ActionBand)라는 것을 사용하는 방법을 씁니다.
액션 리스트를 쓰는 방법보다 조금 더 편리한 방법입니다.
물론 액션 매니져 안에 있는 각각의 액션의 Execute 이벤트 핸들러를 사용한다는 것은 동일합니다.
다음은 FilePrint라는 TAction 객체의 Execute 이벤트 핸들러에 인쇄 기능을 코딩한 예제입니다.
#include <vcl.h>
#include <printers.hpp> // TPrinter를 쓰려면 인클루드 해야 합니다.
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FilePrintExecute(TObject *Sender)
{
TPrinter *p = Printer();
p->BeginDoc();
AnsiString S = "[Text Print]";
int h = p->Canvas->TextHeight(S);
for (int i = 0; i < ListBox1->Items->Count; i++)
p->Canvas->TextOut(1, h * i, ListBox1->Items->Strings[i]);
p->EndDoc();
}
//---------------------------------------------------------------------------
: 그리고 그것보다는
: 리스트박스에 표시가 되면서
: 자동으로 프린트에도 프린트가 되는
: 방법이면 더 좋겠습니다.
이 말은 무슨 뜻인지요?
: 프린터는 옛날 도트프린터를
: 이용해야 되겠지요?
: 그래야 종이가 끊이지 않고
: 연속해서 프린트 될 테니까요...
: 방법을 아시는 분은 꼭 부탁드립니다.
: 그럼 이만... 꾸벅..
|