Writing Scripts

스크립트 작성하기

스크립트를 작성할 때 적용되는 몇 가지 필수 개념과 용어가 있습니다:

  • 프로세스는 스크립트에서 명령을 실행할 수 있는 명령 문자열입니다.
  • 컴포넌트는 도구 팔레트 패널에 있는 시각적 제어 객체로, 스크립트 폼에 드래그 앤 드롭하여 디자인을 조작할 수 있습니다.
  • 스크립트 폼에 배치된 컴포넌트는 메소드, 속성, 그리고 이벤트를 가지고 있습니다.
  • 객체 인터페이스는 스크립트에서 디자인 문서의 데이터를 추출하고 수정하는 데 사용할 수 있는 특별한 객체 인터페이스입니다.

스크립트 언어

기본 스크립팅 언어는 DelphiScript (*.pas)로 설정되어 있습니다. 스크립팅 엔진 자체는 Embarcadero Delphi로 작성되었으며, 도구 팔레트 패널은 Delphi의 VCL(Visual Component Library)을 기반으로 합니다.

  • VBScript 및 JavaScript (Jscript)로 작성된 기존 스크립트를 열고 실행할 수 있습니다. VBScript로 새 스크립트를 작성하려면 Legacy.Scripts.SupportOldLanguages 옵션을 고급 설정 대화 상자에서 활성화해야 합니다.
  • 스크립팅 API에 대한 문서는 여기에서 찾을 수 있습니다: 스크립팅 API 객체. 이 문서는 Altium Designer의 이전 버전을 위해 마지막으로 업데이트되었음을 유의하십시오. 많은 원칙과 접근 방식은 동일하게 유지될 것이지만, 인터페이스, 객체, 메소드, 속성 등이 그 이후로 변경되었으며, 소프트웨어의 나중 버전에서 발견되는 것들의 전부를 반영하지 않을 것입니다.

DelphiScript 유닛

간단하고 기본적인 스크립팅 연습은 새 프로젝트와 스크립트 파일을 생성함으로써 완료될 수 있습니다. 프로젝트와 스크립트 파일이 DelphiScript 언어로 설정되어 있다고 가정할 때, 아래와 같이 간단한 'Hello World' 스크립트를 입력할 수 있습니다.

Procedure ShowAMessage;
Var
 DefaultMessage;
Begin
 DefaultMessage := 'Hello World!';
 ShowMessage(DefaultMessage);
End;
문서가 편집될 때, 스크립트 문서 옆에 별표가 나타나고, 프로젝트 패널의 아이콘이 빨간색으로 변경됩니다. 스크립트 코드 라인이 편집될 때, 해당 라인의 왼쪽 여백에 빨간색 블록이 나타나, 라인이 변경되었음을 나타냅니다.

절차 내에는 DefaultMessage 변수에 의해 정의된 "Hello World" 메시지와 함께 대화 상자를 여는 표준 DelphiScript ShowMessage 함수가 있습니다.

스크립트에서 모든 변수가 변형 타입이기 때문에 스크립트에서 DefaultMessage 변수 타입을 정의할 필요가 없습니다.

스크립트 실행하기

스크립트 중 하나를 실행하려면 메인 메뉴에서 파일 » 스크립트 실행을 선택한 다음 실행할 항목 선택 대화 상자에서 사용 가능한 스크립트 절차를 선택하십시오. 버전이 실행되면 메시지를 표시하는 대화 상자가 열립니다.


파일 » 스크립트 실행 메뉴에서 간단한 HelloWorld 스크립트 단위를 실행하는 모습.

이 스크립트는 매개변수가 없는 절차를 가지고 있습니다. 매개변수가 없는 절차나 함수만이 실행할 항목 선택 대화 상자에 나타납니다. 전달된 매개변수가 필요한 절차는 스크립트 내부(또는 다른 스크립트)에서 호출되지만, 매개변수가 전달되지 않는 실행할 항목 선택 대화 상자와 같은 외부 시스템에서는 호출되지 않습니다.
스크립트는 에디터의 실행 명령을 사용하여 실행할 수도 있으며, 이는 실행 버튼(), F9 단축키, 또는 메인 메뉴에서 실행 » 실행을 선택하여 접근할 수 있습니다. 실행 명령 자체와 함께, 드롭다운 실행 메뉴는 스크립트 제어 및 디버깅 명령의 범위를 제공합니다.

실행 명령이 처음 선택되면, 스크립트의 메인 절차(ShowAMessage가 이 경우에 해당)를 지정할 수 있게 하는 실행할 항목 선택 대화 상자가 열립니다. 한 번 설정하면, 실행 명령을 사용하여 편집기에서 스크립트를 반복해서 쉽게 실행할 수 있습니다. 다른 절차로 설정을 변경하거나 스크립트 프로젝트를 닫았다 다시 열어 설정을 지우려면 실행 » 프로젝트 시작 절차 설정을 사용하세요.

실행 중인 스크립트를 중지하려면 중지 버튼(), 메인 메뉴에서 실행 » 중지를 선택하거나 Ctrl+F3 단축키를 사용하세요.

DelphiScript 폼

위에서 생성한 HelloWorld 프로젝트를 확장하여, 폼 유닛을 사용하는 비슷한 스크립트를 생성할 수 있습니다. 스크립트 폼은 버튼, 메모, 리스트 박스와 같은 다양한 컨트롤을 호스트할 수 있는 대화창입니다. 컨트롤이 이벤트를 생성했을 때, 예를 들어 버튼이 클릭되었을 때 반응하는 이벤트 핸들러를 가지고 있습니다. 새 스크립트 폼을 생성하기 위해서는 프로젝트 패널에서 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고, 프로젝트에 새로 추가 옵션을 선택한 다음, 스크립트 폼을 선택합니다. 스크립트는 메인 메뉴에서 파일 » 다른 이름으로 저장을 사용하여 저장하고 이름을 변경할 수 있습니다.

새 스크립트 프로젝트를 설정한 후, 프로젝트에 새 스크립트를 추가합니다.새 스크립트 프로젝트를 설정한 후, 프로젝트에 새 스크립트를 추가합니다.

스크립트 양식은 두 개의 파일을 생성합니다: 폼 창 요소와 핸들을 정의하는 *.dfm 파일과 폼의 이벤트 핸들러와 절차 또는 함수를 호스팅하는 *.pas 파일입니다.

현재 포커스된 폼이나 그 구성 요소의 속성 값을 보고 편집하려면 오브젝트 인스펙터 패널을 엽니다. 오브젝트 인스펙터 패널은 폼의 속성을 변경하고 현재 폼과 관련된 이벤트 핸들러에 코드를 삽입하는 데 사용됩니다.

오브젝트 인스펙터 패널에서 스크립트 폼의 창 구성 및 속성이 보여집니다.
오브젝트 인스펙터 패널에서 스크립트 폼의 창 구성 및 속성이 보여집니다.

스크립트 양식에는 문서 하단에 코드 탭과 양식 탭이 두 개 있음을 유의하세요.

코드 탭에는 위에 표시된 이벤트 핸들러와 절차가 포함되어 있으며, 양식 탭은 대화 상자를 나타내고 컨트롤 및 관련 이벤트 핸들러가 있습니다. 두 탭 사이를 전환하려면 탭을 사용하거나 F12 단축키를 사용하세요.

이 가이드에서 '대화 상자'와 '스크립트 양식' 용어는 서술적으로 동등합니다. '양식' 용어는 스크립팅 시스템에서 실시간으로 설계되고 있는 창을 의미하며, '대화 상자'는 사용자 피드백을 기다리고 대화 상자 버튼이나 컨트롤이 클릭되었을 때 작업을 수행하는 소프트웨어의 활성 양식입니다.

오브젝트 인스펙터 패널을 사용하면 활성 스크립트 폼의 컴포넌트들의 속성과 이벤트를 조사하고 편집할 수 있습니다. 디자인 편집기 창에서 활성 스크립트 폼의 단일 컴포넌트를 클릭하면 해당 컴포넌트가 선택되고 오브젝트 인스펙터 패널에 연결된 속성이 표시됩니다. 또는, 패널 상단의 드롭다운 필드를 사용하여 현재 활성 폼에 배치된 모든 컴포넌트 목록에서 선택할 수 있습니다. 폼 자체도 포함됩니다.

 
폼 대화 상자와 그 동작을 구성하기 위해 오브젝트 인스펙터 패널을 사용하세요.

정보는 속성이벤트의 두 탭에 걸쳐 표시됩니다:

  • 패널의 속성 탭은 선택된 구성 요소에 대한 모든 속성 속성을 나열합니다. 사용 가능한 속성 목록은 현재 검사 중인 구성 요소의 특정 유형에 따라 다릅니다. 속성은 객체의 보이는 행동이나 작업에 영향을 미치는 객체의 특성입니다. 예를 들어, 행동 하위 카테고리의 Visible 속성은 객체가 배치된 스크립트 폼에 표시되는지 여부를 결정합니다. 구성 요소의 속성은 필요에 따라 수정할 수 있습니다. 속성 옆의 필드 안으로 클릭하고 직접 입력하거나 체크 박스를 토글하거나 적절하게 드롭다운에서 항목을 선택하세요.
  • 패널의 이벤트 탭은 현재 선택된 구성 요소가 반응할 수 있는 모든 이벤트의 목록을 제공합니다. 다시 말하지만, 사용 가능한 이벤트 목록은 현재 검사 중인 구성 요소의 특정 유형에 따라 다릅니다. 양식의 버튼이 클릭되는 등의 이벤트가 발생하면 스크립트는 코드에 이벤트 처리 절차가 정의되어 있는 경우 적절한 조치를 취합니다. 이러한 유형의 절차를 이벤트 핸들러라고 합니다.
이벤트 핸들러의 기본 구조는 Object Inspector 패널 내에서 스크립트 문서의 코드에 추가될 수 있습니다. 이벤트를 정의하고자 하는 컴포넌트를 선택하고, 특정 유형의 이벤트를 선택한 다음, 이벤트의 오른쪽 필드 안에서 더블 클릭하십시오. 이벤트에 대한 이름이 생성되며 이벤트 처리 절차의 이름 정의에 사용됩니다 - FormName.EventName. 그러면 이벤트 처리 절차의 기본 코드가 메인 스크립트 코드에 추가되며, 디자인 공간에서 활성 탭으로 설정됩니다. 이벤트가 발생하여 실행 중인 스크립트에 의해 감지될 때 원하는 반응을 제공하도록 이벤트 처리 절차의 '채우기' 부분을 코딩할 수 있습니다.

패널의 하단 부분은 현재 선택된 속성이나 이벤트에 대한 요약 설명을 제공합니다(해당하는 경우).

여러 컴포넌트를 동시에 선택하여 편집할 수 있습니다. 선택한 모든 컴포넌트에 공통적인 속성/이벤트는 패널에 표시됩니다. 컴포넌트 간에 다른 값을 가지는 속성/이벤트는 공란으로 표시됩니다. 필요에 따라 속성 및/또는 이벤트를 편집하기만 하면 변경 사항이 선택한 각 컴포넌트에 즉시 전달됩니다. 예를 들어, 여러 버튼에 사용된 텍스트를 특정 폰트로 변경하고 싶을 수 있습니다. 모든 버튼을 선택하고 폰트 카테고리 아래에 나열된 속성을 필요에 따라 변경하면 - 모든 버튼이 동일한 폰트를 사용하여 텍스트를 표시하도록 업데이트됩니다.

이 폼 스크립트의 경우, 오브젝트 인스펙터 패널에서 폼의 캡션 속성을 HelloWorldForm에서 Hello World!로 변경하세요. 이 문자열은 아래에 보여진 예제 이벤트 핸들러 및 절차 코드에서 사용된 것과 일치합니다.

구성 요소와 그 속성, 메소드 및 이벤트에 대한 자세한 정보는 구성 요소 카테고리 페이지를 참조하십시오.

컨트롤 추가 및 구성

기본 폼이 구성되면, 도구 팔레트 패널에 접근하여 필요에 따라 대화 상자에 컨트롤을 추가할 수 있습니다. Delphi의 시각적 구성 요소 라이브러리를 기반으로 하는 도구 팔레트는 창 컨트롤의 다양한 범위를 제공하는 구성 요소 팔레트로, 구성 요소 카테고리로 구성되어 있습니다(자세한 내용은 스크립팅 그래픽 구성 요소구성 요소 카테고리 페이지를 참조하십시오).


도구 팔레트 패널 섹션은 영역 제목 탭을 사용하여 확장하거나 축소할 수 있습니다. 패널 상단의 컨트롤, 카테고리 이름, 그리고 마우스 오른쪽 버튼 메뉴를 사용하여 패널의 컨트롤 표시를 구성하세요: 카테고리 확장/축소, 팔레트 항목의 표시 방식 변경 등. 모든 패널에서 사용되는 컴포넌트는 Borland Delphi Visual Component Library의 `TComponent`에서 파생됩니다.

'Hello World' 프로젝트의 대화형 버전에서는 폼에 표시닫기 두 개의 버튼이 있습니다. 도구 팔레트 패널의 표준 영역에서 TButton을 클릭하세요.

이 작업을 두 번 수행하여 폼에 두 개의 버튼을 배치합니다. 하나의 버튼은 별도의 대화 상자에서 'Hello World!' 메시지를 표시하는 데 사용되고, 두 번째 버튼은 메인 대화 상자를 닫는 데 사용됩니다.

컴포넌트는 도구 팔레트 패널에서 컴포넌트를 더블 클릭하거나, 컴포넌트를 한 번 클릭한 다음 원하는 위치에 컴포넌트가 나타나게 하고 싶은 폼을 클릭함으로써 스크립트 폼에 배치할 수 있습니다.

패널의 모든 컴포넌트는 관련된 속성, 메서드, 이벤트를 가지고 있습니다. 여기서:

  • 속성은 객체의 가시적 행동이나 작업에 영향을 미치는 객체의 특성입니다. 예를 들어, Visible 속성은 객체가 스크립트 폼에서 볼 수 있는지 여부를 결정합니다.
  • 메서드는 항상 객체와 연관되어 있으며 그 객체의 행동을 정의하는 절차입니다.
  • 이벤트는 스크립트에 의해 감지된 행동이나 발생입니다. 스크립트에서 프로그래머는 마우스 클릭과 같은 특정 이벤트를 캡처하도록 설계된 각 이벤트 핸들러에 대한 코드를 작성합니다.

구성 요소의 속성과 이벤트는 배치 후 객체 검사기 패널을 사용하여 조사하고 수정할 수 있습니다.

객체 검사기 패널을 사용하면 두 버튼 구성의 기본 이름과 캡션을 변경할 수 있습니다.

첫 번째 버튼 이름을 bDisplay로 설정하고 그 캡션을 Display로 설정하세요. 두 번째 버튼 이름을 bClose로 설정하고 그 캡션을 Close로 설정하세요. 이는 아래에 제시된 예제 이벤트 핸들러 코드와 일치하도록 하기 위함입니다.
컴포넌트를 선택하고 Object Inspector 패널에서 그 속성을 편집하세요.
Object Inspector 패널 하단의 댓글 상자는 강조 표시된 속성의 설명을 제공합니다.

이벤트 핸들러 코드는 폼에 있는 컨트롤을 직접 참조하여 구성할 수 있습니다. 이 예제에서는 Display 버튼이 기존 폼 위에 ShowMessage 대화 상자를 표시하도록 하고, Close 버튼 액션은 이 폼을 닫습니다.

이벤트 핸들러 코드

Display 버튼을 더블 클릭하면 코드 뷰에서 폼이 열리고 해당 이벤트 핸들러의 스켈레톤 코드가 생성됩니다. 또는, 버튼을 선택한 다음 Object Inspector 패널에서 Events 탭을 선택합니다. 패널에서 OnClick 이벤트를 더블 클릭하면 위와 같이 코드 뷰가 열립니다. 코드 뷰 내에서, 아래 목록에 표시된 것처럼 이벤트 핸들러에 ShowMessage 문을 포함시킬 수 있습니다.

```delphi 절차 THelloWorldForm.bDisplayClick(발신자: TObject); 시작 ShowMessage('안녕 세상아!'); 끝; ``` 스크립트 폼의 어떤 컴포넌트에 대한 사전 정의된 이벤트 핸들러를 보려면, 컴포넌트를 선택한 다음 오브젝트 인스펙터 패널에서 이벤트 탭을 클릭하세요. 마찬가지로, 닫기 버튼에 대한 이벤트 핸들러는 Close(폼) 문을 적용하는 OnClick 이벤트를 생성함으로써 정의될 수 있습니다: ```delphi 절차 THelloWorldForm.bCloseClick(발신자: TObject); 시작 Close; 끝; ``` 이벤트 핸들러가 정의되었으므로, 소프트웨어에서 대화 상자를 호출할 때 시작점으로 사용될 스크립트 내의 절차가 필요합니다. 이는 코드 스크립트의 끝에 추가됩니다. 양식 이름이 HelloWorldForm이고 절차 이름이 RunHelloWorld인 것에 주목하세요 — 같은 스크립트에서 양식 이름 충돌을 피하기 위해 고유한 양식 이름을 가지는 것이 중요합니다. ``` 절차 RunHelloWorld; 시작 HelloWorldForm.ShowModal; 끝; ``` 스크립트는 저장한 다음 메인 메뉴(**파일» 스크립트 실행**)에서 `RunHelloWorld` 절차 항목을 실행하여 HelloWorldDialog 항목 아래에서 실행할 수 있습니다.

또는, 절차를 실행 명령/버튼()에 할당할 수 있으며, 이는 실행 » 시작 프로젝트 절차 설정 메뉴를 통해 이루어집니다.

HelloWorld 폼 스크립트를 실행하는 모습, 여기서 폼의 디스플레이 버튼이 ShowMessage 대화 상자를 활성화합니다.
HelloWorld 폼 스크립트를 실행하는 모습, 여기서 폼의 디스플레이 버튼이 ShowMessage 대화 상자를 활성화합니다.

오브젝트 인스펙터 패널을 사용하면 폼 유닛의 속성과 이벤트를 쉽게 변경할 수 있습니다. 예를 들어, 작업 공간에서 폼의 위치를 변경하려면 패널을 사용하여 폼의 위치 속성에 대한 poScreenCenter 값을 변경하십시오. 스크립트를 실행할 때 대화 상자는 데스크탑 화면의 중앙에 배치됩니다.

Hello World 프로젝트 스크립트의 참조 버전은 다운로드 가능한 스크립트 컬렉션의 Scripts\Delphiscript Scripts\General 폴더에서 찾을 수 있습니다. 이것들은 레거시 참조 디자인이며 업데이트되지 않는다는 점을 유의하십시오.

절차 호출하기

위에서 언급했듯이, 프로젝트 내의 모든 스크립트(동일한 언어 세트를 사용하는)는 전역 변수와 절차에 접근할 수 있으므로 한 스크립트의 절차가 프로젝트의 다른 스크립트에 있는 다른 절차를 호출할 수 있습니다.

이는 HelloWorld 예제 프로젝트에 추가된 ShowAParametricMessage 코드 섹션을 통해 보여줄 수 있습니다:

Procedure ShowAParametricMessage(S : String);
Var
    DefaultMessage;
Begin
    DefaultMessage := 'Hello World!';

    If S = '' Then ShowMessage(DefaultMessage)
              Else ShowMessage(S);
End;

이는 ShowAParametricMessage 절차에 전달될 수 있는 문자열 변수 'S'를 설정합니다.

전달된 문자열은 ShowMessage 대화 상자 함수를 사용하여 표시되며, 간단한 If-Then-Else 방법은 문자열이 비어 있으면 기본 'Hello World!' 메시지가 표시되도록 합니다. 이것을 실제로 보려면 예제 프로젝트(HelloWorld.PrjScr)를 열고 아래와 같이 HelloWorldDialog 스크립트(HelloWorld 스크립트가 아님)에 회색으로 강조 표시된 줄을 추가하세요. ``` ... 절차 THelloWorldForm.bDisplayClick(보낸사람: TObject); 시작 Showmessage('Hello World!'); 끝; 절차 THelloWorldForm.bCloseClick(보낸사람: TObject); 시작 ShowAParametricMessage('Goodbye World'); 닫기; 끝; 절차 RunHelloWorld; 시작 HelloWorldForm.ShowModal; 끝; ... ```

HelloWorldDialog 스크립트가 실행되고 닫기 버튼이 클릭되면, HelloWorld 스크립트에서 전역 ShowAParametricMessage 절차가 호출됩니다.


HelloWorld 스크립트에서 HelloWorldDialog 스크립트로 호출되는 매개 변수 절차입니다.

호출은 'Goodbye World' 메시지 문자열을 ShowAParametricMessage 절차에 전달하므로, 이 메시지는 폼이 닫히기 전에 닫기 버튼을 클릭할 때 표시됩니다.


위에 표시된 스크립트 호출은 HelloWoldDialog 폼 닫기 절차에 지정된 메시지를 삽입합니다. 전달된 문자열 매개변수가 비어 있으면, ShowAParametricMessage(''), ShowAParametricMessage 절차에서 정의된 대로 기본 'Hello World!' 메시지가 표시됩니다. 스크립트 작성 및 디버깅 과정을 간소화하는 데 도움이 되는 단축키 목록은 스크립트 편집기 도구 페이지를 참조하세요.

코드 탐색기 패널을 사용한 스크립트 식별자 탐색

코드 탐색기 패널은 활성 스크립트 문서에서 사용되는 모든 식별자(변수, 함수, 절차)의 시각적 요약을 제공합니다.

코드 탐색기 패널
코드 탐색기 패널

패널에 표시되는 식별자 정보는 다음과 같은 최상위 폴더 아래에 그룹화됩니다:

  • 절차 및 함수 - 활성 스크립트 문서에 선언된 모든 절차와 함수를 포함합니다. 각 절차/함수에 대해, 절차/함수에 전달된 매개변수나 그 절차/함수에 로컬인 변수도 함께 나열됩니다.

  • 변수 - 활성 스크립트 문서에 선언된 모든 전역 변수를 포함합니다.

프로시저/함수에 대해 지역 변수가 선언되면, 해당 프로시저/함수 아래의 변수 하위 폴더에 나열됩니다. 다양한 식별자를 구별하기 위해 고유한 아이콘이 사용됩니다:

절차

함수

절차/함수 매개변수

변수(지역 또는 전역)

패널에서 항목을 더블 클릭하거나 선택한 후 Enter 키를 누르면 디자인 공간의 해당 코드 영역으로 이동합니다.
만약 문제가 있으시다면, 텍스트/이미지를 선택하신 상태에서 Ctrl + Enter를 누르셔서 저희에게 피드백을 보내주세요.
기능 제공 여부

사용 가능한 기능은 보유하고 계시는 Altium 솔루션에 따라 달라집니다. 해당 솔루션은 Altium Develop, Altium Agile의 에디션(Agile Teams 또는 Agile Enterprise), 또는 활성기간 내의 Altium Designer 중 하나입니다.

안내된 기능이 고객님의 소프트웨어에서 보이지 않는 경우, 보다 자세한 내용을 위해 Altium 영업팀 에 문의해 주세요.

구버전 문서

Altium Designer 문서는 더 이상 버전별로 제공되지 않습니다. 이전 버전의 Altium Designer 문서가 필요하신 경우, Other Installers 페이지의 Legacy Documentation 섹션을 방문해 주세요.

콘텐츠