자동화는 아래 코드와 같이 다른 애플리케이션 내에서 하나의 애플리케이션을 자동으로 제어하는 방법입니다.
PROcedure CreateNewWord;
var
WordObj: 변형;
시작하다
WordObj := CreateOleObject('Word.Basic') {이 함수는 ComObj 유닛에 선언되어 있습니다.}
WordObj.AppShow;
WordObj.FileNew;
끝;
이 코드는 WORD를 열고 자동으로 새 문서를 생성합니다(물론, WORD가 컴퓨터에 설치되어 있다는 전제입니다). 이것은 매우 흥미롭고 유용한 기능인 것 같습니다. 그러면 우리 프로그램이 어떻게 WORD와 유사한 Can 자동화 기능을 가질 수 있습니까? 다른 언어로 개발된 프로그램이 우리 프로그램을 자동화하도록 허용하시겠습니까? DELPHI로 구현하는 것은 매우 간단합니다.
이 기사에서는 예제를 통해 간단한 자동화 서버를 개발하는 방법을 단계별로 설명합니다.
새로운 일반 애플리케이션을 생성하고 프로젝트를 AutoSrv.bpr로 저장합니다. 기본 폼에 편집 컨트롤을 배치하고 이를 MainForm.pas로 저장합니다. 여기서는 창 제목, 폼 색상 및 텍스트를 자동으로 제어할 계획입니다. 편집 컨트롤(물론 이는 매우 적은 기능을 구현하지만 자동화된 서버 프로그램을 개발하는 방법을 설명하기에는 충분합니다.) 다음 코드를 기본 창에 추가합니다. (참고: 이러한 함수 및 프로시저의 선언을 TForm1에 추가하십시오. 혼자서 공공 장소)
함수 TForm1.GetCaption: 문자열;
시작하다
결과 := Self.Caption;
끝;
절차 TForm1.SetCaption(ACaption: 문자열);
시작하다
Self.Caption := A캡션;
끝;
절차 TForm1.SetColor(AColor: TColor);
시작하다
Self.Color := AColor;
끝;
절차 TForm1.SetEditText(AText: 문자열);
시작하다
Self.Edit1.Text := AText;
끝;
그런 다음 이 프로그램에 자동화 기능을 추가하고 New Items 버튼을 클릭하고 팝업 New Items 창에서 ActiveX 탭을 클릭한 후 Automation Object를 선택하고 OK 버튼을 클릭한 후 팝업 Automation Object Wizard에서 CoClass 이름을 입력합니다. MyAutoSrv, Delphi는 AutoSrv_TLB.pas 파일(클래스 라이브러리)과 클래스 라이브러리 인터페이스 클래스를 구현하는 유닛을 자동으로 생성하고 이 새 유닛을 AutoSrvClass.pas로 저장합니다.
이제 이 프로그램이 자동화된 서버가 되었으므로 여기에 자동화된 인터페이스 기능을 추가해 보겠습니다.
(1) View->Type Libray 메뉴를 클릭하고 Type Library Editor에서 IMyAutoSrv 인터페이스를 선택한 다음 New Property를 클릭하고 해당 속성을 Read|Write로 선택하고 이름을 Caption으로 지정하고 Type을 BSTR로 설정합니다.
(2) New Method를 클릭하고 이름을 SetColor로 지정하고 오른쪽의 매개변수 탭을 클릭한 후 ADD를 클릭하여 새로 추가된 인터페이스 함수에 매개변수를 추가하고 매개변수 이름을 AColor로 설정하고 매개변수 Type을 OLE_COLOR로 설정합니다.
(3) New Method를 다시 클릭하고 이름을 SetEditText로 지정하고 위의 방법을 사용하여 매개변수를 추가한 다음 매개변수 이름을 AText로 설정하고 매개변수 Type을 BSTR로 설정합니다.
마지막으로 인터페이스 함수의 구현 코드를 추가하면 괜찮습니다.
AutoSrvClass.pas의 Uses 섹션에 MainForm을 추가하고 해당 코드를 다음 코드로 변경합니다.
단위 AutoSrvClass;
{$WARN SYMBOL_PLATFORM 꺼짐}
인터페이스
용도
ComObj, ActiveX, AutoSrv_TLB, StdVcl, MainForm;
유형
TMyAutoSrv = 클래스(TAutoObject, IMyAutoSrv)
보호됨
함수 Get_Caption: WideString;
절차 Set_Caption(const Value: WideString);
절차 SetColor(AColor: OLE_COLOR);
절차 SetEditText(const AText: WideString);
끝;
구현
ComServ를 사용합니다.
TMyAutoSrv.Get_Caption 함수: WideString;
시작하다
결과 := Form1.GetCaption;
끝;
절차 TMyAutoSrv.Set_Caption(const 값: WideString);
시작하다
Form1.SetCaption(값);
끝;
절차 TMyAutoSrv.SetColor(AColor: OLE_COLOR);
시작하다
Form1.SetColor(AColor);
끝;
절차 TMyAutoSrv.SetEditText(const AText: WideString);
시작하다
Form1.SetEditText(AText);
끝;
초기화
TAutoObjectFactory.Create(ComServer, TMyAutoSrv, Class_MyAutoSrv,
ciMultiInstance, tmApartment);
끝.
이 프로그램을 한 번 실행하면 자동으로 자동화 서버로 등록됩니다. 레지스트리의 HKEY_CLASSES_ROOT 기본 키에서 관련 등록 정보를 찾을 수 있습니다.
위의 내용은 여기서 호출할 자동화 서버를 개발하는 방법을 보여줍니다.
새 프로그램을 만들고, 버튼을 추가하고, VAR 영역에서 Variant 변수를 선언합니다. AutoSrv: 변형
그런 다음 Button1에 다음 코드를 추가합니다.
절차 TForm1.Button1Click(Sender: TObject);
시작하다
AutoSrv := CreateOleObject('AutoSrv.MyAutoSrv') {이 문자열은 자동화 서버의 프로젝트 이름에 CoClass 이름을 더한 것입니다.}
Self.Caption := AutoSrv.Caption;
AutoSrv.Caption := '헤헤';
AutoSrv.SetColor(CLRed);
AutoSrv.SetEditText('하하');
끝;
CreateOleObject 함수는 IDispatch 유형 인터페이스를 반환합니다. 이는 프로그램이 자동화된 서버 인터페이스에 대한 호출에 늦게 연결할 수 있도록 하는 것입니다. 예를 들어, 위에 AutoSrv.Hello를 추가하면 프로그램도 컴파일될 수 있습니다. 그러나 실행 중에 오류가 발생합니다. Variant를 사용하면 인터페이스 선언을 직접 사용하는 것보다 실행 효율성이 느려집니다.
실행하고 버튼을 클릭하면 자동화된 서비스 프로그램이 로드되고 EDIT1의 양식 색상과 문자열이 우리 코드에 맞게 설정되는 것을 볼 수 있습니다. ㅎㅎ 아주 간단하죠?