양식 및 구성 요소

그래픽 구성요소 개요

스크립팅 시스템은 두 가지 유형의 구성요소를 처리합니다: 시각(Visual) 구성요소와 비시각(Non-visual) 구성요소입니다.

시각 구성요소는 사용자 인터페이스를 구성하는 데 사용되며, 비시각 구성요소는 Timer, OpenDialog, MainMenu 구성요소처럼 다양한 작업에 사용됩니다.

  • Timer 비시각 구성요소는 예약된 간격으로 특정 코드를 실행(활성화)하는 데 사용할 수 있으며, 사용자는 이를 볼 수 없습니다.
  • Button, Edit, Memo 구성요소는 시각 구성요소입니다.

두 유형의 구성요소 모두 설계 시점(design time)에는 나타나지만, 비시각 구성요소는 실행 시점(runtime)에는 보이지 않습니다. Tool Palette 패널의 구성요소는 객체 지향이며 다음의 세 가지 항목을 가집니다:

  • 속성
  • 이벤트
  • 메서드

Property는 객체의 특성으로, 이 객체의 표시 동작 또는 동작(연산)에 영향을 줍니다. 예를 들어 Visible 속성은 이 객체가 스크립트 폼에서 보이는지 여부를 결정합니다.

Event는 스크립트가 감지하는 동작 또는 발생 사건입니다. 스크립트에서 프로그래머는 마우스 클릭과 같은 특정 이벤트를 포착하도록 설계된 각 이벤트 핸들러에 대한 코드를 작성합니다.

Method는 항상 객체와 연관된 프로시저로, 객체의 동작을 정의합니다.

모든 스크립트 폼에는 하나 이상의 구성요소가 있습니다. 구성요소는 보통 정보를 표시하거나 사용자가 어떤 동작을 수행할 수 있게 합니다. 예를 들어 Label는 고정 텍스트를 표시하는 데 사용되고, Edit 박스는 사용자가 데이터를 입력할 수 있게 하며, Button는 동작을 시작하는 데 사용할 수 있습니다.

어떤 조합의 구성요소든 폼에 배치할 수 있으며, 스크립트가 실행되는 동안 사용자는 폼의 어떤 구성요소와도 상호작용할 수 있습니다. 사용자가 버튼을 클릭하거나 Edit 박스의 텍스트를 변경했을 때 어떤 일이 일어날지 결정하는 것은 프로그래머의 몫입니다.

스크립팅 시스템은 스크립트용 복잡한 사용자 인터페이스를 만들 수 있도록 여러 구성요소를 제공합니다. 폼에 구성요소를 배치하려면 Tool Palette panel에서 해당 아이콘을 찾아 더블클릭하십시오. 그러면 활성 폼에 구성요소가 배치됩니다. 대부분의 구성요소의 시각적 표현은 속성으로 설정합니다. 구성요소는 처음에는 폼의 기본 위치에 배치되지만, 필요에 따라 위치를 변경(드래그)하고 크기를 조정(늘리기)할 수 있습니다. 또한 Object Inspector 패널을 사용해 나중에 크기와 위치를 변경할 수도 있습니다.

구성요소를 폼에 드롭하면 스크립팅 시스템이 구성요소를 사용하는 데 필요한 코드를 자동으로 생성하고 스크립트 폼을 업데이트합니다. 폼에서 구성요소가 동작하도록 하려면 속성만 설정하고, 원하는 메서드를 사용하도록 이벤트 핸들러 코드를 구현하면 됩니다.

스크립트 폼 설계

스크립트 폼은 환경 내에서 사용자와 상호작용하도록 설계됩니다. 스크립트 폼 설계는 비주얼 개발의 핵심입니다.

실제로 모든 구성요소는 스크립트 폼에 배치되며, 설정된 각 속성은 폼을 설명하는 파일(*.DFM 파일)에 저장됩니다. 이 파일은 관련 스크립트 코드(*.PAS 파일)와 연관 관계를 가집니다. 각 스크립트 폼마다 .PAS 파일과 이에 대응하는 .DFM 파일이 있습니다.

스크립트 폼과 그 구성요소로 작업할 때, 모든 요소의 속성은 Object Inspector 패널에서 확인하고 수정할 수 있습니다. 구성요소를 Shift-클릭으로 여러 개 선택하거나, 폼에서 구성요소들을 둘러싸는 선택 사각형을 드래그하여 선택할 수도 있습니다. 스크립트 폼에는 제목이 있으며( Object Inspector 패널의 Caption 속성), 이를 통해 설정합니다.

새 스크립트 폼 만들기

스크립트 프로젝트를 연 상태에서 Projects 패널의 프로젝트를 마우스 오른쪽 버튼으로 클릭하고, 팝업 컨텍스트 메뉴에서 Add New to Project 항목을 클릭한 다음 Delphi Script Form 항목을 선택합니다. 기본 이름이 EditScript1.pas인 새 스크립트 폼이 열립니다.

스크립트 폼 표시하기

스크립트 폼이 실행될 때 폼을 표시하는 프로시저가 스크립트에 있어야 합니다. 이 프로시저 안에서 폼에 대해 ShowModal 메서드를 호출할 수 있습니다. 스크립트 폼의 ShowModal 메서드가 올바르게 동작하려면 폼의 Visible 속성이 false여야 합니다.

ShowModal example:

Procedure RunDialog;
Begin
  DialogForm.ShowModal;
End;

ShowModal 예제는 RunDialog 프로시저가 호출될 때 스크립트 폼을 표시하는 매우 단순한 방법입니다. DialogForm.ShowModal 메서드를 호출하기 전에 DialogForm 객체의 구성요소에 값을 할당할 수 있다는 점에 유의하십시오.

아래에 표시된 ModalResult 속성 예제는 조금 더 복잡합니다. 다음 스크립트 메서드들은 스크립트 폼의 버튼에 사용됩니다. 이 메서드들은 사용자가 OK 또는 Cancel 버튼을 클릭하면 대화상자를 종료시키며, 그 결과 ShowModal 메서드에서 각각 mrOk 또는 mrCancel가 반환됩니다.

ModalResult Example:

Procedure TForm.OKButtonClick(Sender: TObject);
Begin
  ModalResult := mrOK;
End;

Procedure TForm.CancelButtonClick(Sender: TObject);
Begin
  ModalResult := mrCancel;
End;

Procedure RunShowModalExample;
Begin
  // Form's Visible property must be false for ShowModal to work correctly.
  If Form.ShowModal = mrOk Then ShowMessage('mrOk');
  If Form.ShowModal = mrCancel Then ShowMessage('mrCancel');
End;
또한 이벤트 핸들러에서 OK 버튼의 ModalResult 값을 mrOk로, Cancel 버튼의 ModalResult 값을 mrCancel로 설정해도 위와 동일한 결과를 얻을 수 있습니다.

사용자가 이 스크립트 폼에서 어느 버튼을 클릭하든 대화상자가 닫힙니다. ModalResult 메서드가 설정되면 스크립트 엔진이 스크립트 폼을 자동으로 닫기 때문에 Close 메서드를 호출할 필요가 없습니다.

사용자가 Esc 키를 눌렀을 때 폼의 ModalResultCancel로 설정하고 싶다면, Object Inspector 패널에서 Cancel 버튼의 Cancel 속성을 True로 설정하거나, 폼의 버튼 CancelButtonClick 이벤트 핸들러에 Sender.Cancel := True를 삽입하십시오.

사용자 입력 받기

사용자 입력을 받을 수 있는 일반적인 구성요소 중 하나는 TEdit 구성요소입니다. 이 구성요소에는 사용자가 문자열을 입력할 수 있는 필드가 있습니다. 또한 Delphi 구성요소 중 TMaskEdit처럼 문자열에 저장된 입력 마스크를 가진 편집 구성요소도 있는데, 이는 입력을 제어하거나 필터링합니다.

아래 예제는 사용자가 편집 박스에 무언가를 입력한 뒤 버튼을 클릭했을 때의 과정을 보여줍니다. 사용자가 edit 구성요소에 아무것도 입력하지 않은 경우(빈 값), 이벤트 핸들러는 경고 메시지로 응답합니다.

Procedure TScriptForm.ButtonClick(Sender : TObject);
Begin
  If Edit1.Text = '' Then
  Begin
    ShowMessage('Warning - empty input!');
    Exit;
  End;
  // do something else for the input
End;

사용자는 Tab 키를 사용하거나 폼의 다른 컨트롤을 클릭하여 대화상자의 입력 포커스를 변경할 수 있습니다.

이벤트에 응답하기

폼의 버튼 또는 구성요소가 클릭되면, 스크립팅 시스템은 Altium Designer로부터 이벤트 알림을 수신하고 적절한 이벤트 핸들러 메서드를 호출하여 응답합니다.

See also
scripts collectionScripts\DelphiScript Scripts\General\ 폴더에 있는 HelloWorld 프로젝트.
scripts collectionScripts\DelphiScript Scripts\General\ 폴더에 있는 ShowModal 예제 스크립트.

이벤트 핸들러 작성하기

폼 스크립트의 각 구성요소에는 이벤트 이름 집합이 있으며, 이는 Altium Designer에서의 사용자 동작에 대해 스크립트가 어떻게 반응할지 결정하는 스크립트 이벤트 핸들러에서 사용됩니다. 예를 들어 사용자가 폼의 버튼을 클릭하면 Altium Designer는 스크립트에 메시지를 보내고, 스크립트는 이 새로운 이벤트에 반응합니다. 버튼에 대해 OnClick 이벤트가 지정되어 있으면 해당 이벤트가 실행됩니다.

이벤트에 응답하는 코드는 일반적으로 DelphiScript 이벤트 핸들러에 포함되며, 모든 구성요소는 반응할 수 있는 이벤트 집합을 갖습니다. 예를 들어 클릭 가능한 모든 구성요소에는 사용자가 구성요소를 클릭할 때 발생하는 OnClick 이벤트가 있습니다. 또한 이러한 구성요소에는 포커스를 얻고 잃는 이벤트도 있습니다. 하지만 OnEnterOnExit에 대한 코드가 지정되지 않았다면(OnEnter - 컨트롤이 포커스를 얻음; OnExit - 컨트롤이 포커스를 잃음) 해당 이벤트는 스크립트에서 무시됩니다.

요약하면, 이벤트는 버튼 클릭과 같은 Altium Designer 내의 발생 사건과 그에 응답하는 코드 조각을 연결하는 링크입니다. 응답하는 코드는 이벤트 핸들러입니다. 이 코드는 속성 값을 변경하고 메서드를 호출합니다.

구성요소 속성

구성요소의 속성 목록을 보려면 구성요소를 선택하고 Object Inspector 패널에서 Properties 탭을 여십시오.

구성요소 이벤트

구성요소가 반응할 수 있는 이벤트 목록을 보려면 구성요소를 선택하고 Object Inspector 패널에서 Events 탭을 여십시오. 이벤트 처리 프로시저를 만들려면 구성요소가 반응하길 원하는 이벤트를 선택한 다음 이벤트 이름을 더블클릭하면 됩니다. 그러면 스크립팅 시스템이 이벤트 핸들러 프레임워크 코드를 자동으로 삽입합니다.

예를 들어 Tool Palette 패널에서 TButton 구성요소를 선택해 스크립트 폼에 드롭한 다음, Object Inspector 패널에서 OnClick 이벤트 이름 옆을 더블클릭하십시오. 스크립팅 시스템이 코드 에디터로 포커스를 이동시키고 OnClick 이벤트에 대한 뼈대 코드가 생성됩니다.

예를 들어 버튼의 CloseClick 이벤트 핸들러에 Close 메서드가 있다면, 버튼을 클릭했을 때 버튼 이벤트 핸들러가 OnClick 이벤트를 포착하여 이벤트 핸들러 내부의 코드가 실행됩니다. 그 결과 Close 메서드가 스크립트 폼을 닫습니다.

정리하면, 폼에서 또는 Object Inspector 패널을 사용해 버튼 구성요소를 선택하고 Events 페이지를 선택한 다음 OnClick 이벤트의 오른쪽을 더블클릭하면 스크립트에 새 이벤트 핸들러가 나타납니다. 또는 버튼 자체를 더블클릭하면 스크립팅 시스템이 이 OnClick 이벤트에 대한 핸들러를 추가합니다. 다른 유형의 구성요소는 기본 동작이 다를 수 있다는 점에 유의하십시오.

구성요소 메서드

구성요소의 메서드 목록을 보려면 Component Reference 문서를 참조하십시오.

스크립트 폼에 구성요소 드롭하기

Tool Palette panel의 컴포넌트를 스크립트에서 사용하려면, 컴포넌트를 폼에 드롭하기 전에 스크립트 폼이 먼저 존재해야 합니다. 일반적으로 스크립트 폼에 컴포넌트를 드롭하면 이러한 객체는 생성하거나 파괴할 필요가 없습니다. 스크립트 폼이 이를 자동으로 처리합니다.

또한 스크립팅 시스템은 컴포넌트를 사용하기 위해 필요한 코드를 자동으로 생성하고 스크립트 폼을 업데이트합니다. 그 다음에는 속성을 설정하고, 이벤트 핸들러에 코드를 넣고, 필요한 메서드를 사용해 동작하는 스크립트 폼을 구현하기만 하면 됩니다.

스크립트에서 컴포넌트 생성하기

컴포넌트의 ConstructorNil 파라미터를 전달하여 스크립트에서 컴포넌트를 직접 생성하거나 파괴할 수 있습니다. 보통은 스크립트 폼이 자동으로 처리해 주기 때문에 폼의 핸들을 전달할 필요가 없습니다. 예를 들어 OpenSave 대화상자(Embarcadero Delphi RTL의 TOpenDialogTSaveDialog 클래스)를 생성하고 파괴할 수 있습니다.

스크립트 폼 사용자 지정

스크립트 폼을 사용자 지정할 때의 핵심 사항은 다음과 같습니다.

  • 폼이 다른 열려 있는 패널 위에 항상 표시되도록 하려면 FormStyle 속성을 fsStayOnTop로 설정합니다.
  • 폼의 기본 동작을 정의하려면 FormKind를 다음 값 중 하나로 설정합니다. fkNone, fkNormal, fkServerPanel 또는 fkModal.
  • fkModal가 닫히면 폼은 모달 폼이 됩니다. 즉, 폼을 닫는 것과 같은 사용자 입력을 기다린 후에 진행합니다. fkServerPanel이면 폼이 Server 패널로 표시됩니다. fkNormal이면 폼은 일반적인 비모달 폼으로 동작합니다.
  • 폼의 기본 스크롤 바를 제거하려면 HorzScrollBarVertScrollBar 속성 값을 변경합니다.
  • 폼을 MDI 프레임 또는 MDI 자식으로 만들려면 FormStyle 속성을 사용합니다.
  • 폼의 테두리 스타일을 변경하려면 BorderIconsBorderStyle 속성을 사용합니다 (결과는 런타임에서 확인할 수 있습니다).
  • 최소화된 폼의 아이콘을 변경하려면 Icon 속성을 사용합니다.
  • 애플리케이션 창에서 폼의 초기 위치를 지정하려면 Position 속성을 사용합니다.
  • 폼의 초기 상태 (예: 최소화, 최대화 또는 일반)를 지정하려면 WindowState 속성을 사용합니다.
  • 런타임에서 폼의 작업 영역을 정의하려면 ClientHeightClientWidth 속성을 사용합니다 (ClientHeightClientWidth은 폼 테두리 내부의 영역을 나타내고, HeightWidth은 폼의 전체 영역을 나타냅니다).
  • 런타임에서 폼에서 초기 포커스를 가질 컨트롤을 지정하려면 ActiveControl 속성을 사용합니다.
  • 선택된 컨트롤과 관계없이 모든 키보드 이벤트를 폼으로 전달하려면 KeyPreview 속성을 사용합니다.
  • 폼에 메뉴가 둘 이상 있는 경우 특정 메뉴를 지정하려면 Menu 속성을 사용합니다.

스크립트 폼 및 컴포넌트 새로 고침

예를 들어 컨트롤이 업데이트되거나 다시 그려지지 않는 등 스크립트 폼의 화면이 최신 상태가 아니게 되면, 컨트롤이 멈춘 것처럼 보이거나 깨져 보일 수 있습니다. 이는 해당 스크립트의 과도한 백그라운드 처리 때문일 수 있습니다.

스크립트 폼의 Update 메서드와 Tool Palette 패널의 많은 스크립트 컴포넌트는 폼 또는 특정 컨트롤의 그래픽 내용을 새로 고치는 방법을 제공합니다. 아래 예제에서 Update 메서드가 포함된 줄은 회색으로 강조 표시되어 있습니다.

StatusBar component and its Update method Example:

Procedure TConverterForm.loadbuttonClick(Sender: TObject);
Begin
 If OpenPictureDialog1.Execute then
 Begin
 XPProgressBar1.Position := 0;
 XStatusBar1.SimpleText  := '  Loading...';
 XStatusBar1.Update;
 
 // loading a monochrome bitmap only
 Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
 
 // Check if image is monochrome, otherwise prompt a warning
 If Image1.Picture.Bitmap.PixelFormat <> pf1bit Then
 Begin
 ShowWarning('The image is not a monochrome!');
 Close;
 End;
 
 lImageSize.Caption := IntToStr(Image1.Picture.Width) + ' x ' +
 IntToStr(Image1.Picture.Height) + ' mils';
 
 convertbutton.Enabled  := True;
 LoadButton.Enabled     := False;
 XStatusBar1.SimpleText := '  Ready...';
 XStatusBar1.Update;
 End;
End;

위 코드 스니펫은 PCB Logo Creator 스크립트 프로젝트에서 가져온 것으로, downloadable 스크립트 컬렉션의 Scripts\Delphiscript Scripts\Pcb\PCB Logo Creator 폴더에서 찾을 수 있습니다.

AI-LocalizedAI로 번역됨
만약 문제가 있으시다면, 텍스트/이미지를 선택하신 상태에서 Ctrl + Enter를 누르셔서 저희에게 피드백을 보내주세요.
기능 제공 여부

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

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

구버전 문서

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

콘텐츠