델파이와 워드의 융합 기술
1. VBA 코드의 의미
Microsoft Word는 미국 Microsoft Corporation의 통합 환경이자 워드 프로세싱 시스템이지만 결코 단순한 워드 프로세싱 시스템이 아니며 프로그래밍을 통해 Word의 기능을 확장할 수 있습니다.
Word의 Microsoft Visual Basic 코드는 Word의 매크로입니다. Word 매크로를 작성하면 문서의 자동 백업, 저장 등 일부 문서 처리의 자동화를 실현할 수 있어 Word 문서의 기능을 확장할 수 있습니다. 따라서 Word 기능을 최대한 활용하여 Word를 자체 소프트웨어의 일부로 만들 수도 있습니다.
Word의 매크로는 문서를 자동화하는 데 도움이 되기 때문에 몇 가지 이점이 있지만 Word의 매크로는 순전히 유익하지는 않습니다. 때로는 문서, 컴퓨터 시스템, 심지어 네트워크에도 해를 끼칠 수 있습니다. 현재 Melissa 매크로 바이러스는 사라졌습니다. 시스템 리소스를 소진시키기 위한 간단한 프롬프트, 무작위 이메일 보내기, 개인 정보를 네트워크에 보내기, 심지어 하드 디스크의 Autoexec.bat(자동 배치 파일)에 보내기까지 Deltree C를 추가합니다. -y, 전체 Windows 시스템을 파괴합니다.
2. Word에 내장된 Com 기술
Word는 COM 기술을 가장 잘 지원하는 소프트웨어라고 할 수 있습니다. 이렇게 말하기에는 다소 극단적인 것 같지만 Word가 제공하는 강력한 프로그래밍 인터페이스 기술을 사용하면 프로그램을 통해 Word의 모든 부분을 제어할 수 있습니다. 문서 열기, 저장, 인쇄 또는 자동으로 테이블 그리기 등이 가능합니다.
프로그래밍 소프트웨어를 통해 단어를 유연하게 조작할 수 있습니다. 여기서는 Borland Delphi를 예로 들어 자세히 설명합니다.
1. Delphi에서 Word 소프트웨어/파일을 호출하는 방법
Word에서 Word 소프트웨어를 호출하는 방법에는 세 가지가 있습니다.
. Delphi의 컨트롤 TOleContainer를 통해 Word 삽입
a. Delphi에서 제공하는 서버 컨트롤을 사용하여 Word를 호출하고 Word의 속성을 사용합니다.
b. 실제 Com 기술을 통해 Office 소프트웨어 디렉터리에 있는 MSWORD9.OLB 파일의 모든 클래스 라이브러리를 Delphi로 가져오고 Com 기술을 사용하여 프로그래밍합니다.
c. CreateOleObject를 사용하여 Word를 시작한 다음 Ole 모드에서 Word를 제어합니다.
2. 여러 방법의 난이도 판단
a. Delphi 컨트롤 TOleContainer를 통해 Word 삽입
이것은 Word 문서를 직접 호출할 수 있는 가장 간단한 Ole 임베딩입니다. Word 문서를 직접 시작하려면 ToleContainer.Run만 사용하면 됩니다. 그리고 이렇게 시작된 워드 문서는 (인터페이스 관점에서) 델파이 프로그램과 통합되지만, 델파이를 통해서는 워드 문서를 제어할 수 없고, 워드를 유연하게 조작하려는 목적도 달성할 수 없다는 극복할 수 없는 단점이 있다. 달성된다.
b. Delphi에서 제공하는 서버 컨트롤을 사용하여 Word를 호출하고 Word의 속성을 사용합니다.
Delphi의 서버 컨트롤을 사용하여 Word를 제어하십시오. Delphi는 프로그래밍 중에 코드 프롬프트를 구현할 수 있습니다. 일반적으로 말하면 Delphi의 Word 제어를 더 잘 실현할 수 있습니다. 그러나 여전히 Delphi에서 호출할 수 없는 일부 Word 기능이 있습니다(예: 직접 작성한). ). 매크로 코드). 그리고 해당 함수가 원래 VBA 코드에서 선택 사항인 경우 Delphi를 호출할 때 매개 변수를 추가해야 합니다. 그렇지 않으면 컴파일조차 통과되지 않습니다. 이렇게 시작된 워드와 델파이 프로그램은 각각 두 가지 형태에 속합니다. 이 방법은 참고용으로만 사용할 수 있습니다.
c. 실제 Com 기술을 사용하여 Office 소프트웨어 디렉터리에 있는 MSWORD9.OLB 파일의 모든 클래스 라이브러리를 Delphi로 가져오고, Com 기술을 사용하여 프로그래밍하고, 실제 Com 기술을 사용하여 MsWord9.OLD 파일 클래스 라이브러리를 가져온 다음 Com을 사용합니다. 프로그램을 활용하는 기술. 전체적으로는 Delphi의 Servers 컨트롤을 사용하는 것과 유사합니다. Servers 컨트롤보다 약간 더 번거롭습니다. 장점과 단점은 Servers 컨트롤과 같습니다.
d. CreateOleObject를 사용하여 Word를 시작한 다음 Ole 모드에서 Word를 제어합니다.
이 방법은 CreateOleObjects 메서드를 사용하여 실제로는 Ole인 Word를 호출하는 방법이지만 이 방법을 사용하면 실제로 Word 파일을 완전히 제어할 수 있고 직접 작성한 VBA 매크로 코드를 포함하여 Word의 모든 속성을 사용할 수 있습니다.
서버 제어 및 COM 기술과 비교할 때 이 방법은 Word의 다양한 속성을 실제로 사용할 수 있으며 기본적으로 VBA에서 자신의 코드를 작성하는 것과 동일하며 기본 코드를 사용할 필요가 없습니다. 이렇게 시작된 워드와 델파이 프로그램은 각각 두 가지 형태에 속합니다. 단점은 이 방법을 사용할 때 델파이 코드 프롬프트가 없다는 점입니다. 모든 예외 처리는 직접 작성해야 하며 작성 시 더 많은 탐색적 지식이 있을 수 있습니다.
3. 워드 매크로 편집기
Word에서는 실제로 VBA 코드를 편집하고 양식과 기능을 작성할 수 있습니다.
Word 매크로 편집기에 들어가는 방법: 도구->매크로->Visual Basic Editor를 사용하여 Visual Basic 편집기 인터페이스에 들어갑니다. Word의 Visual Basic 편집기 인터페이스는 기본적으로 실제 Visual Basic 편집기와 동일하므로 여기서는 자세히 설명하지 않습니다. VBA 코드에서는 사용자 양식, 모듈 및 클래스 모듈을 추가할 수 있습니다. 사용자 폼, 모듈, 클래스 모듈의 개념은 Visual Basic의 개념과 완전히 동일합니다. 주석도 Visual Basic과 완전히 동일합니다.
양식이나 모듈의 서브루틴에 커서를 놓고 "F5"를 직접 눌러 현재 서브루틴을 실행할 수 있습니다.
4. 워드 매크로 개요
Word는 문서 편집과 VB를 완벽하게 결합하여 문서를 자동화합니다. Word를 사용한 프로그래밍은 Visual Basic을 사용하는 것과 유사합니다. 차이점은 Word에서는 특정 서브루틴을 직접 실행하고 결과를 직접 볼 수 있다는 것입니다. 반면 Visual Basic은 이제 실제 프로그램에 작성할 수 있습니다. 코드 보호의 관점에서 Word의 VBA 코드 수, 특히 키 코드 수를 최대한 줄여야 합니다.
VBA 매크로는 네 가지 유형으로 나눌 수 있습니다.
1. 명령과 동일한 이름을 가진 매크로
FileSave, FileOpen 등 VBA 코드에 Word와 동일한 이름의 함수가 포함되어 있으면 이러한 VBA 코드는 Word 자체의 명령을 무시하고 직접 실행됩니다.
2. Word의 특정 매크로
이러한 매크로에는 AutoExec(Word 시작 또는 전역 템플릿 로드), AutoNew(새 문서가 생성될 때마다), AutoOpen(기존 문서가 열릴 때마다), AutoClose(문서가 닫힐 때마다), AutoExit(Word 종료 또는 전역 템플릿 언로드) 시간).
VBA 코드에 이러한 이름의 함수가 포함되어 있는 경우 해당 조건이 충족되면 해당 코드가 자동으로 실행됩니다.
3. 해당 이벤트에 대한 VBA 매크로
이러한 매크로는 이벤트에 의해 트리거되는 매크로입니다. 예를 들어 Document_Close는 문서가 닫힐 때 이벤트를 트리거하고, Document_New는 새 문서가 생성될 때 트리거되며, Document_Open은 문서가 열릴 때 트리거됩니다.
4. 독립 매크로
직접 작성한 VBA 코드, 즉 위의 상황에 해당되지 않는 VBA 코드는 다른 VBA 코드에서도 호출이 가능하며, 더 중요하게는 다른 프로그램에서도 호출이 가능하다는 점입니다.
이런 식으로 Word에서 자동으로 실행되는 매크로를 버리고 델파이를 통해 해당 매크로를 직접 호출하여 목표를 달성할 수 있습니다.
[b]5. 워드 명령 매크로에 대한 자세한 설명[/b]
Word 자체에는 많은 명령 기능이 포함되어 있지만 Word 온라인 도움말이나 MSDN 도움말에서는 이 측면에 대한 소개를 제공하지 않으므로 직접 실험을 통해서만 탐색할 수 있습니다. 처음에 탐색한 기능은 다음과 같습니다.
매크로 이름 설명 설명
파일새로 만들기
FileNewDefault는 새로운 빈 문서를 생성합니다.
파일SaveAs 다른 이름으로 저장
파일열기열기
파일닫기닫기
파일PRint 인쇄
FilePrintPreview 인쇄 미리보기
도구사용자 정의 도구 모음의 사용자 정의
도구옵션 도구 옵션
도구수정 개정 강조
ToolsReviewRevisions 개정 승인 또는 거부
도구RevisionMarksAccept 개정 승인
도구RevisionMarks거부 개정 거부
도구RevisionMarksToggle Revisions
도구매크로 매크로
ToolsRecordMacroToggle 새 매크로 기록
보기보안 보안
ViewVBCode VB 편집기 환경 보기
FileTemplates 템플릿 및 추가 기능
도구ProtectUnprotectDocument 문서 보호를 해제합니다.
InsertHyperlink 하이퍼링크 삽입
EditHyperlink 하이퍼링크 편집
삭제하이퍼링크 하이퍼링크 삭제
EditLinks 링크 보기 및 삭제
EditPasteAsHyperlink 하이퍼링크 붙여넣기
형식스타일 스타일
EditBookMark 북마크
OleWord에서 사용되는 일부 코드
1. Delphi 프로그램이 Word를 시작합니다.
CreateOleObjects 메서드를 사용하여 Word를 시작하고 VBA 코드를 호출합니다. 구체적인 구현 프로세스는 다음과 같습니다.
먼저 GetActiveOleObject('Word.application')를 사용하여 현재 메모리에 Word 프로그램이 있는지 확인하고, Word 프로그램이 없으면 직접 연결합니다.
2. 새로운 Word 문서를 생성하는 Delphi 프로그램
형식: WordDocuments.Add(Template,NewTemplate,DocumentType,Visible)
템플릿: 사용할 템플릿 이름,
NewTemplate: 새 문서의 유형, True는 템플릿, False는 문서를 나타냅니다.
DocumentType: 문서 유형, 기본값은 빈 문서입니다.
Visible : 회수된 창이 보이는지 여부
예: Doc_Handle:=Word_Ole.Documents.Add(Template:='C:/Temlate.dot',NewTemplate:=False);
3. Delphi 프로그램이 Word 문서를 엽니다.
형식: WordDocuments.Open(파일 이름,ConfirmConversions,ReadOnly,PassWordDocument,
PasswordTemplate,Revent,WritePasswordDocument,WritePassWordTemplate,
형식, 인코딩, 표시)
FileName: 문서 이름(경로 포함)
변환 확인: 파일 변환 대화 상자를 표시할지 여부
ReadOnly: 문서를 읽기 전용 모드로 열지 여부
AddToRecentFiles: 파일 메뉴 하단의 최근 사용한 파일 목록에 파일을 추가할지 여부
PassWordDocument: 이 문서를 여는 데 필요한 비밀번호입니다.
PasswordTemplate: 이 템플릿을 여는 데 필요한 비밀번호입니다.
되돌리기: 문서가 이미 있는 경우 다시 열지 여부
WritePasswordDocument: 문서 변경 사항을 저장하는 데 필요한 비밀번호
WritePasswordTemplate: 템플릿을 변경하는 데 필요한 비밀번호를 저장합니다.
형식: 문서를 여는 데 필요한 파일 변환기
인코딩: 사용된 문서 코드 페이지
표시 여부: 문서를 여는 창이 표시되는지 여부
예:
Doc_Handle:=Word_Ole.Documents.open(파일 이름:=Doc_File,ReadOnly:=False,
AddToRecentFiles:=거짓);
4. Word 문서를 저장하는 Delphi 프로그램
형식: WordDocuments.SaveAs(파일 이름, 파일 형식, LockComments, 비밀번호,
AddToRecentFiles, WritePassword, ReadOnlyRecommended,
EmbedTrueTypeFonts, SaveNativePictureFormat, SaveFormsData,
AOCCELetter로 저장)
파일명: 파일 이름. 기본값은 현재 폴더 및 파일 이름입니다.
FileFormat 문서가 저장되는 형식입니다.
LockComments True인 경우 이 문서에는 주석만 허용됩니다.
비밀번호 문서를 열 때 비밀번호입니다.
AddToRecentFiles True인 경우 파일 메뉴의 최근 사용한 문서 목록에 문서를 추가합니다.
WritePassword 문서를 변경하는 데 필요한 암호를 저장합니다.
ReadOnlyRecommended True인 경우 Word에서는 문서를 열 때마다 읽기 전용 모드를 권장합니다.
EmbedTrueTypeFonts True인 경우 트루타입 글꼴을 사용하여 문서를 저장합니다.
SaveNativePictureFormat True인 경우 다른 시스템 플랫폼(예: Macintosh)에서 가져온 그래픽에는 Windows 버전만 저장됩니다.
SaveFormsData True인 경우 사용자가 양식에 입력한 데이터가 데이터 레코드로 저장됩니다.
SaveAsAOCELetter 문서에 첨부 파일이 포함된 경우 이 속성이 True이면 문서를 AOCEL 문자로 저장하고 이메일도 저장합니다.
예:
Word_Ole.Documents.SaveAs(파일 이름:=Doc_File,FileFormat=wdFormatDocument,
AddToRecentFiles=거짓);
5. 데이터베이스에서 로컬 하드 디스크로 파일을 읽고, 로컬 하드 디스크에서 데이터베이스로 파일을 읽습니다.
이미지 바이너리 필드를 사용하여 데이터베이스에 저장하고 Stream 메서드를 사용합니다.
파일 스트림을 만듭니다.
Word_FileStream:=TFileStream.Create(Target_Name,fmOpenWrite 또는 fmCreate);
Word_FileStream.Position:=0;
데이터베이스에 저장된 이미지 필드:
TBlobField(AdoQuery1.FieldByName(Column_Name)).SaveToStream(Word_FileStream);
데이터베이스에서 로컬 하드 디스크로 파일을 읽습니다.
TBlobField(ADOQuery1.FieldByName(열_이름)).loadfromStream(Word_FileStream);
파일 스트림을 해제합니다.
Word_FileStream.Free;
6. 글로벌 메시지의 정의
워드와 델파이 프로그램은 두 가지 소프트웨어이기 때문에 서로 통신하기가 번거로워서 글로벌 메시지 방식을 사용합니다. 글로벌 메시지를 먼저 등록해야 하며, Windows는 등록된 메시지가 동일한 경우 동일한 값을 반환하므로 이 메시지 번호가 두 프로그램 간 통신에 사용됩니다.
메시지를 정의하는 방법:
szMessageString: pchar = 'XIDIAN_11_Stone';
FMyJoinMessage := RegisterWindowMessage(szMessageString);
메시지를 보내는 방법:
SendMessage(상대방 핸들, 메시지, 메시지는 짧은 변수로 제공, 메시지는 긴 변수로 제공)
7. 델파이 프로그램이 메시지를 수신하는 방법
Delphi가 수신하는 메시지에는 두 가지 유형이 있습니다. 하나는 특정 메시지를 오버로드하는 것이고, 다른 하나는 WndProc 함수를 오버로드하여 해당 메시지를 선택하여 처리하는 것입니다.
방법 1은 한 번에 하나의 메시지만 처리할 수 있는 반면, 방법 2는 동시에 여러 메시지를 처리할 수 있습니다.
방법 2의 경우 명령문은 다음과 같습니다.
프로시저 WndProc(var 메시지: Tmessage);재정의
이를 사용할 때 자신의 메시지를 처리한 후 WndProc(Message) 함수를 상속해야 한다는 점에 유의해야 합니다. 그렇지 않으면 시스템이 충돌합니다!
8. Word에서 콤보 대화 상자 및 변경 이벤트의 동적 생성
클래스 모듈 Combohander를 생성하고 내부적으로 이벤트를 정의합니다.
Public WithEvents ComboBoxEvent As Office.CommandBarComboBox
Combo 제어에 의해 발생되는 이벤트를 정의하는 모듈
Dim ctlComboBoxHandler를 새 ComboBoxHandler로 사용
콤보 생성 대화 상자
Cbo_ChooseDoc = CommandBars("추가된 메뉴").Controls.Add(유형:=msoControlComboBox, 임시:=True) 설정
Combo_Change 이벤트를 생성하도록 파일 핸들을 설정합니다.
ctlComboBoxHandler.ComboBoxEvent = Cbo_ChooseDoc 설정
이벤트 발생 후 ComboHander 클래스 모듈에서 ComboBoxEvent의 Change 이벤트를 선택하여 이벤트 코드를 작성합니다.
하위 ComboBoxEvent_Change(ByVal Ctrl As Office.CommandBarComboBox)
9. 일부 Word 이벤트
VBA 코드에서 처리되는 Word 이벤트는 다음과 같습니다.
Application 이벤트에서 처리해야 할 사항은 DocumentBeforeClose, DocumentChange입니다.
Document_Close: 이벤트는 문서가 닫힐 때 이벤트를 생성합니다.
DocumentBeforeClose: 문서가 닫히기 전에 Word는 문서가 저장되었는지 확인하고 해당 프롬프트를 제공하며 해당 처리를 수행합니다.
DocumentChange: 문서 전환시 자신이 수정한 문서와 타인이 수정한 문서 간에 문서가 전환될 때 발생하는 이벤트입니다. 주로 문서 권한 설정 등을 처리합니다.