Delphi4.0을 사용하여 Word97을 직접 제어
번호: QA003053
작성일 : 2000년 6월 15일 최종 수정일 : 2000년 6월 15일
범주:
기사 :
요약: PowerBuilder를 플레이한 친구들은 PB에서 가장 중요한 기술이 DataWindow 기술이라는 것을 알아야 합니다. 이를 사용하여 양식을 디자인하고, 데이터 입력을 처리하고, 보고서를 디자인하는 것이 매우 편리합니다. 하지만 델파이의 리포트 지원 기능은 PB에 비해 많이 부족합니다. Delphi의 전문가 버전에는 QuickReport가 포함되어 있지만 이는 QSD AS(노르웨이 회사)에서 라이센스를 받은 보고서 구성 요소 모음입니다. 물론 ReportSmith나 Cristal Report와 같은 외부 보고 도구를 사용할 수도 있습니다. 그러나 컨트롤이 약간 복잡하고 컨트롤과 Delphi 간의 통합이 부족합니다.
우리는 "공문서 관리 시스템"의 온라인 버전을 개발할 때 공식 문서를 인쇄할 때 다양한 방법을 시도했습니다. 우리의 요구 사항은 일반 공식 문서를 공식 문서 형식으로 인쇄하는 것이며 사용자는 조판에 대한 간단한 제어를 수행할 수 있습니다. Xiaohui는 처음에 QuickReport를 사용해 보았지만 효과가 매우 만족스럽지 않았습니다. 특히 일부 중국어 형식에 대한 지원 측면에서 Xiaohui는 그것에 너무 집착하여 디자인 도구에 의존하지 않고 단순히 인쇄 프로그램을 직접 작성했는데 이는 아쉽습니다. 샤오후이는 실력이 부족했고, 글쓰기가 반쯤 되었을 때 계속해서 플레이할 수 없어서 다른 방법을 찾아야 했습니다. 그날 우연히 "중국 컴퓨터 뉴스" 사본이 왔고 VB에서 Excel을 사용하는 방법에 대한 기사가있었습니다. Xiaohui는 이렇게 생각했습니다. Delphi를 사용하여 데이터를 Word로 보내고 Word에서 편집 및 조판 작업을 완료하도록 하면 어떨까요? 직설적으로 말하면 OLE 자동화 기술을 사용합니다.
Xiaohui가 시도해 보았는데 효과는 괜찮은 것으로 나타났습니다. ——프로그래머의 경우 자신이 작성한 프로그램이 자신의 기능을 완전히 구현하려면 다른 사람의 응용 프로그램에 연결되어야 하지만 이는 마치 닭 떼에 오리를 집어넣는 것과 같으며 그의 마음에는 항상 무언가가 있습니다. 하지만 빡빡한 개발 업무 때문에 감독님이 3~4번에 한 번씩 그를 재촉하러 오셨는데, 결과적으로는 별 설명이 없었지만 샤오후이는 신경을 덜 쓰게 되었습니다. 좋아요, 더 이상 고민하지 말고 Xiaohui가 어떻게 이를 달성했는지 살펴보겠습니다.
링크: http://www.xiaohui.com
진행자: 원래 링크가 만료되었기 때문입니다. 여기에 원본 텍스트를 제공합니다.
1. 서문
파워빌더를 플레이해본 친구들이라면 PB에서 가장 중요한 기술이 데이터윈도우(DataWindow) 기술이라는 사실을 아실 겁니다. 양식 디자인, 데이터 입력 처리, 보고서 디자인 등에 활용하면 매우 편리합니다. 하지만 델파이의 리포트 지원 기능은 PB에 비해 많이 부족합니다. Delphi의 전문가 버전에는 QuickReport가 포함되어 있지만 이는 QSD AS(노르웨이 회사)에서 라이센스를 받은 보고서 구성 요소 모음입니다. 물론 ReportSmith나 Cristal Report와 같은 외부 보고 도구를 사용할 수도 있습니다. 그러나 컨트롤이 약간 복잡하고 컨트롤과 Delphi 간의 통합이 부족합니다.
우리는 "공문서 관리 시스템"의 온라인 버전을 개발할 때 공식 문서를 인쇄할 때 다양한 방법을 시도했습니다. 우리의 요구 사항은 일반 공식 문서를 공식 문서 형식으로 인쇄하는 것이며 사용자는 조판에 대한 간단한 제어를 수행할 수 있습니다. Xiaohui는 처음에 QuickReport를 사용해 보았지만 효과가 매우 만족스럽지 않았습니다. 특히 일부 중국어 형식에 대한 지원 측면에서 Xiaohui는 그것에 너무 집착하여 디자인 도구에 의존하지 않고 단순히 인쇄 프로그램을 직접 작성했는데 이는 아쉽습니다. 샤오후이는 실력이 부족했고, 글쓰기가 반쯤 되었을 때 계속해서 플레이할 수 없어서 다른 방법을 찾아야 했습니다. 그날 우연히 "중국 컴퓨터 뉴스" 사본이 왔고 VB에서 Excel을 사용하는 방법에 대한 기사가있었습니다. Xiaohui는 이렇게 생각했습니다. Delphi를 사용하여 데이터를 Word로 보내고 Word에서 편집 및 조판 작업을 완료하도록 하면 어떨까요? 직설적으로 말하면 OLE 자동화 기술을 사용합니다.
Xiaohui가 시도해 보았는데 효과는 괜찮은 것으로 나타났습니다. ——프로그래머의 경우 자신이 작성한 프로그램이 자신의 기능을 완전히 구현하려면 다른 사람의 응용 프로그램에 연결되어야 하지만 이는 마치 닭 떼에 오리를 집어넣는 것과 같으며 그의 마음에는 항상 무언가가 있습니다. 그러나 빡빡한 개발 업무로 인해 감독은 3~4번에 한 번씩 그를 재촉하러 왔고 결국에는 별 설명이 없었지만 샤오후이는 신경 쓰지 않았습니다. 좋아요, 더 이상 고민하지 말고 Xiaohui가 어떻게 이를 달성했는지 살펴보겠습니다.
2. 형태 디자인
냉정하게 말하면 사실 매우 간단합니다. Xiaohui는 여기에서 간단한 샘플 프로그램을 만들었습니다.
1. Form1의 Font.name을 'Songti'로 설정하고 Font.size를 12로 설정합니다.
2. 5개의 tLable 컨트롤 label1-labe5를 양식에 순서대로 배치합니다. 해당 캡션 속성은 '문서 번호', '제목', '수신 단위', '텍스트' 및 '전송 단위'입니다.
3. 5개의 편집 컨트롤(tEdit, tEdit, tEdit, tMemo 및 tEdit)을 양식에 순서대로 배치합니다. 해당 이름 속성은 각각 ED_WenHao, ED_BiaoTi, ED_ShouWenDanWei, ED_ZhenWen 및 ED_FaWenDanWei입니다.
4. 두 개의 tButton 컨트롤을 양식에 순서대로 배치합니다. 해당 이름 속성은 Btn_PRintToWord 및 btn_Quit이고 Caption 속성은 각각 'Print' 및 'Exit'입니다.
양식 디자인 형식은 이 글 마지막에 첨부된 사진을 참고해주세요.
3. 코드 디자인
프로그램 부분은 다음과 같습니다.
단위 Unit1;
인터페이스
용도
Windows, 메시지, SysUtils, 클래스, 그래픽, 컨트롤, 양식, 대화 상자,
StdCtrls,OleCtnrs,ComObj;
유형
TForm1 = 클래스(TForm)
라벨1: TLabel;
라벨2: TLabel;
라벨3: TLabel;
라벨4: TLabel;
라벨5: TLabel;
ED_WenHao: TEdit;
ED_BiaoTi: T편집;
ED_ShouWenDanWei: TEdit;
ED_ZhenWen: TMemo;
ED_FaWenDanWei: TEdit;
Btn_PrintToWord: TButton;
Btn_Quit: TButton;
절차 Btn_PrintToWordClick(Sender: TObject);
절차 Btn_QuitClick(Sender: TObject);
사적인
{비공개 선언}
공공의
{공개 선언}
끝;
var
Form1: TForm1;
구현
{$R *.DFM}
//시작: 워드 이벤트로 데이터가 전송됩니다.
절차 TForm1.Btn_PrintToWordClick(Sender: TObject);
VAR
VarWord: Variant;// WORD 생성 시 사용
시작하다
노력하다
// 1. OleObject를 생성하고 word97을 연결합니다.
VarWord:=CreateOleObject('word.basic');
// 2. Word97용 새 파일 만들기
VarWord.FileNew;
// 3. Word97의 기본 상태를 설정합니다.
VarWord.ViewZoom75; //표시 비율을 75%로 설정합니다.
VarWord.ViewPage; //페이지 표시 모드로 변경
// 4. 현재 데이터 컨트롤에 대한 정보를 Word97로 보냅니다.
// 4.1 문서번호 데이터 보내기
VarWord.CenterPara;
Varword.font('宋体'); //글꼴 설정
VarWord.FontSize(14); //글꼴 크기 설정
varword.insert(#13+#13+ ED_WenHao.Text+#13+#13+#13);
// 4.2 헤더 데이터 보내기
VarWord.font('하이비');
VarWord.Fontsize(16);
VarWord.insert(ED_BiaoTi.text+#13);
// 4.3 수신 유닛 데이터 보내기
VarWord.LeftPara; //왼쪽 정렬
VarWord.Font('형체');
VarWord.fontSize(14);
VarWord.Insert(#13+ ED_ShouWenDanWei.Text+':'+#13);
// 4.5 텍스트 데이터 보내기
VarWord.fontSize(14);
VarWord.Insert(ED_ZhenWen.Text+#13);
// 4.6 송신 단위 데이터 보내기
VarWord.RightPara; //오른쪽 정렬
VarWord.fontSize(14);
VarWord.Insert(ED_FaWenDanWei.Text+#13);
// 5개의 최종 설정
VarWord.StartOfdocument; //문서의 시작 부분으로 이동
VarWord.AppMaxiMize; //창을 최대화하도록 설정
VarWord.AppShow; //응용프로그램 표시
제외하고
showmessage('Microsoft Word 실행에 실패했습니다!');
end; //시도 끝
끝;
//end: 워드 이벤트로 데이터 전송
//시작: 창 닫기 이벤트
절차 TForm1.Btn_QuitClick(Sender: TObject);
시작하다
닫다;
끝;
//끝: 창 닫기 이벤트
끝.
// 메인 프로그램의 끝입니다.
4. 메모
1. 설명
1. 단지 데모 예제이기 때문에 실제 동작에서는 해당 tEdit 및 tMemo 컨트롤을 tDBEdit 및 tDBMemo 컨트롤로 대체할 수 있으며, tTable, tDataSource 및 기타 컨트롤을 추가하여 연결할 수 있습니다. 데이터베이스에.
2. 이 가이드에서는 일괄 인쇄 방법을 고려하지 않습니다.
3. 이 프로그램은 Pwin97, Delphi 4.0 Professional Edition 및 Chinese Word97을 사용합니다.
4. Word 버전이 다르기 때문에 Microsoft에서는 일부 OLE 자동화 인터페이스를 각 외국어로 변환했습니다. 다른 버전의 Word를 사용하는 경우 이 프로그램이 제대로 실행되지 않을 수 있습니다.
5. word97 도움말에 요약된 매크로 명령을 통해 해당 드라이버 명령을 얻을 수 있습니다. 또는 Word97 아래의 [도구] 메뉴를 클릭하고 [사용자 정의]를 클릭한 후 [키보드] 버튼을 클릭하여 다음 범주에 표시된 Word 명령을 볼 수 있습니다. 워드97.
2. 장점과 단점
1. OLE 자동화 기술을 통해 공문서의 조판 및 인쇄 작업을 Word로 넘겨 최종 사용자가 보다 편리하게 제어할 수 있습니다.
2. Word97에서는 데이터가 수정되면 이를 호출하고 데이터베이스에 반영한 기본 프로그램으로 다시 보낼 수 없습니다. 그게 바로 불편함이에요.
3. 이 예는 많은 수의 데이터 라벨을 인쇄하고 테이블을 만들고 싶다면 보고서를 사용하는 것이 더 유연하다고 생각합니다.
기사 출처: Xiaohui의 프로그래머로서의 여정