English Русский 中文 Español Deutsch 日本語 Português Français Italiano Türkçe
사용자 정의 그래픽 컨트롤. 파트 2. 컨트롤 라이브러리

사용자 정의 그래픽 컨트롤. 파트 2. 컨트롤 라이브러리

MetaTrader 5 | 5 7월 2021, 10:51
57 0
Dmitry Fedoseev
Dmitry Fedoseev

소개

"Custom Graphical Controls. 1 부. Create a Simple Control "은 프로그램 (Expert Advisor, 스크립트, 인디케이터)과 사용자 간의 상호 작용에서 발생하는 주요 문제를 처리하기 위해 일련의 컨트롤이 생성된 그래픽 컨트롤을 만드는 원칙을 설명합니다.

일부 컨트롤은 잘 알려진 표준 컨트롤과 거의 완전히 일치하고 다른 컨트롤은 터미널 기능 및 기능을 고려하여 개발되었습니다. 모든 컨트롤은 별도의 클래스로 설계되어 이전 글에서 사용한 IncGUI.mqh 파일에 추가되었습니다 (새 파일 이름은 IncGUI_v2.mqh).

새로운 컨트롤 클래스가 추가되는 것 외에도 파일이 더 변경되었습니다. CGraphicObjectShell 클래스는 좌표와 크기를 동시에 설정하는 메소드를 추가하고 SetXYDistance(), SetXYSize() 일부에서 거리라는 단어의 입력 오류를 수정하여 수정되었습니다. 메소드 이름 (Distanse라고 쓰여 있음)에 있어서 말이죠.

CInputBox 클래스에서 SetValueString() 메소드 이름의 입력 오류가 수정되었으며 (SetValueStrind 철자가 있음) SetReadOnly() 및 ReadOnly() 메소드가 추가되었습니다. SetReadOnly() 메소드는 텍스트 상자에 대한 키보드 입력을 활성화/비활성화하는 반면 ReadOnly() 메소드를 사용하면 키보드 입력이 허용되는지 여부를 확인할 수 있습니다.

Show() 메소드를 사용하여 표시되는 색상 견본의 순서는 CColorSchemes 클래스에서 수정되었습니다. 색 구성표는 이제 예상보다 약간 더 많은 색상을 가지므로 구성표는 세로로 배열되고 색상은 가로로 배열됩니다. 또한 CColorSchemes 클래스에 몇 가지 새로운 색 구성표가 추가되었습니다.

이 다음 컨트롤이 포함된 라이브러리를 제공합니다.

  1. CInputBox (입력 상자),
  2. CSpinInputBox (스핀 버튼 입력 상자),
  3. CCheckBox (확인란),
  4. CRadioGroup (라디오 버튼 그룹),
  5. CVSсrollBar (수직 스크롤 바),
  6. CHSсrollBar (수평 스크롤 바),
  7. CList (목록),
  8. CListMS (다중 선택 목록),
  9. CComBox (드롭 다운 목록),
  10. CHMenu (수평 메뉴),
  11. CVMenu (수직 메뉴),
  12. CHProgress (수평 진행률 표시 바),
  13. CDialer (다이얼러),
  14. CDialerInputBox (입력 상자가있는 다이얼러),
  15. CTable (테이블).

사용 예제와 함께 모든 컨트롤을 살펴 보겠습니다 (이 글 "Custom Graphical Controls" 에서 자세히 검토한 CInputBox를 제외 1 부. 간단한 컨트롤 만들기").


1. CSpinInputBox 클래스

스핀 버튼 입력 상자 (그림 1).

그림 1. CSpinInputBox 클래스 (스핀 버튼 입력 상자)

그림 1. CSpinInputBox 클래스 (스핀 버튼 입력 상자)

"+" 버튼을 클릭하면 텍스트 상자의 값이 설정된 값만큼 증가하고, 마찬가지로 "-" 버튼을 클릭하면 동일한 값이 감소합니다.

스핀 버튼으로 값을 변경하는 것 외에도 텍스트 상자에 대한 키보드 입력을 활성화 할 수 있습니다 (SetReadOnly() 메소드). 이 컨트롤은 숫자 모드에서 작동하는 CInputBox를 기반으로하며 값 제한을 설정하는 비슷한 메소드인 SetMaxValue(), SetMinValue()가 있습니다.

CInputBox와 달리 CSpinInputBox 클래스에서 Init() 메소드를 호출 할 때 Digits 매개 변수 대신 스핀 버튼에 의한 값의 변경을 나타내는 Change 매개 변수가 전송됩니다. Change 매개 변수의 값은 텍스트 상자의 값이 형식화되는 소수 자릿수를 정의합니다. SetValue() 및 Value() 메소드를 사용하여 프로그래밍 방식으로 설정하고 값을 가져올 수 있습니다. Digits() 메소드를 사용하여 값의 서식이 지정된 소수 자릿수를 받을 수 있습니다.

이 컨트롤을 사용하는 예는 첨부된 eIncGUI_v2_Test_CSpinInputBox.mq5 파일에 있습니다.


2. CCheckBox 클래스

체크 박스 또는 On-Off 스위치 (그림 2).

그림 2. CCheckBox 클래스 (Checkbox 또는 On-Off 스위치)

그림 2. CCheckBox 클래스 (Checkbox 또는 On-Off 스위치)

두 가지 값 (켜짐 또는 꺼짐) 중 하나를 취할 수 있는 매우 간단한 컨트롤입니다. "꺼짐" 상태에서는 사각형을 나타냅니다. "켜짐" 상태에서는 사각형에 틱이 나타납니다. SetValue() 및 Value() 메소드를 사용하여 프로그래밍 방식으로 설정을 수정하고 값을 가져올 수 있습니다.

이 컨트롤을 사용하는 예는 첨부된 eIncGUI_v2_Test_CCheckBox.mq5 파일에 있습니다.


3. CRadioGroup 클래스

라디오 버튼 그룹 (그림 3).

그림 3. CRadioGroup 클래스 (라디오 버튼 그룹)

그림 3. CRadioGroup 클래스 (라디오 버튼 그룹)

라디오 버튼 그룹은 여러 옵션 중 하나를 선택하도록 설계되었습니다 (예 : 주문 유형 선택). 이 컨트롤은 다른 컨트롤과 동일한 방식으로 사용됩니다. 먼저 파라미터에 그룹 이름을 지정하여 Init 메소드를 호출 한 다음 버튼을 생성합니다. 버튼 생성은 AddButton() 메소드를 사용하여 수행됩니다.

AddButton() 메소드의 첫 번째 매개 변수는 단추 오른쪽에있는 캡션과 전체 컨트롤의 좌표를 기준으로하는 X 및 Y 좌표를 정의합니다.

따라서 그룹의 버튼은 임의의 순서 (가로 또는 세로뿐만 아니라)로 정렬 할 수 있으며 개별 버튼 좌표를 다시 계산하지 않고 그룹 좌표를 변경하여 전체 버튼 그룹을 이동할 수 있습니다. AddButton() 메소드는 그룹에서 만들려는 버튼 수 만큼 호출해야 합니다.

버튼을 만든 후 선택된 버튼의 인덱스를 나타내는 매개 변수가 하나만 있는 SetValue() 메소드에 의해 선택된 버튼을 지정해야 합니다. 버튼은 AddButton() 메소드에서 만든 순서대로 0부터 번호가 매겨집니다. 선택된 버튼의 인덱스를 얻기 위해 Value() 메소드가 사용됩니다.

이 컨트롤을 사용하는 예는 첨부된 eIncGUI_v2_Test_CRadioGroup.mq5 파일에 있습니다.


4. CVSсrollBar 클래스

수직 스크롤 바 (그림 4).

그림 4. CVSсrollBar 클래스 (수직 스크롤 바)

그림 4. CVSсrollBar 클래스 (수직 스크롤 바)

이것은 잘 알려져 있고 일반적으로 사용되는 컨트롤입니다. 수직 스크롤 바에는 최소값, 최대값 (컨트롤 값의 유효한 범위를 정의), 사소한 변경 (위 또는 아래 스크롤 버튼을 클릭 할 때 값 변경), 주요 변경 (아래 영역을 클릭 할 때, 스크롤 버튼과 스크롤 박스 사이의 값 변경)이 있습니다.

스크롤 버튼을 클릭했을 때의 작은 변화와 스크롤 상자와 스크롤 버튼 사이의 영역을 클릭했을 때의 큰 변화에 의한 값 변경 외에도 스크롤 상자를 특정 위치로 이동할 수도 있습니다. 스크롤 상자를 특정 위치로 이동하려면 스크롤 상자를 클릭하여 선택 (색상 변경) 한 다음 필요한 위치를 클릭해야 합니다. 스크롤 상자는 지정된 위치로 이동하여 선택 취소됩니다.

스크롤 상자를 실수로 선택한 경우 다시 클릭하여 선택을 취소해야 합니다. 스크롤 상자가 선택된 상태에서 스크롤 버튼 중 하나를 클릭하면 후자가 각각 시작 또는 끝으로 이동하고 컨트롤이 최대 또는 최소 값을 얻습니다.

컨트롤 애플리케이션은 매개 변수에 이름, 높이 및 조건부 크기 (1 ~ 4)를 지정하면 Init 메소드를 호출하는 것으로 시작합니다.

그런 다음 값 범위는 SetMin(), SetMax() 메소드에 의해 정의되고 작은 변경 값과 주요 변경 값은 각각 SetSmallChange() 및 SetLargeChange() 메소드에 의해 설정됩니다. 컨트롤 값 (스크롤 상자 위치)은 Value() 메소드를 사용하여 수신됩니다.

스크롤 상자 위치는 SetValue() 메소드를 사용하여 프로그래밍 방식으로 수정할 수 있습니다.

이 컨트롤을 사용하는 예는 첨부된 eIncGUI_v2_Test_CVSсrollBar.mq5 파일에 있습니다.


5. CHSсrollBar 클래스

수평 스크롤 바 (그림 5).

그림 5. CHSсrollBar 클래스 (수평 스크롤 바)

그림 5. CHSсrollBar 클래스 (수평 스크롤 바)

이 컨트롤은 Init() 메소드를 호출 할 때 지정할 두 번째 매개 변수가 바 높이 대신 바 너비라는 점을 제외하면 수직 스크롤 바와 완전히 동일합니다.

이 컨트롤을 사용하는 예는 첨부된 eIncGUI_v2_Test_CHSсrollBar.mq5 파일에 있습니다.


6. CList 클래스

목록 (그림 6).

그림 6. CList 클래스 (목록)

그림 6. CList 클래스 (목록)

이 컨트롤은 목록 항목을 표시하는 몇 개의 텍스트 상자를 나타냅니다. 표시되는 상자의 수는 컨트롤 초기화시 정의됩니다. 목록 항목 수가 보이는 상자 수를 초과하면 수직 스크롤 바가 나타납니다.

목록 항목 중 하나를 선택할 수 있습니다 (그림 6의 색상 항목). 항목 선택과 관련하여 컨트롤은 항목 선택 해제를 허용하거나 허용하지 않는 두 가지 모드로 작동 할 수 있습니다. 이 모드는 SetAllowDeselect() 메소드에 의해 설정됩니다.

컨트롤 이름, 픽셀 단위의 너비 및 항목 수의 높이는 Init() 메소드를 호출 할 때 전송됩니다.

Init() 메소드 다음에 AddItem() 메소드는 목록에 새 항목을 추가하는 데 사용됩니다. 그런 다음 필요한 경우 선택한 항목이 SetSelectedIndex() 메소드에 의해 설정됩니다. SetSelectedIndex() 메소드에 -1 값을 전송하여 항목을 프로그래밍 방식으로 항상 선택 취소 할 수 있습니다.

선택된 항목은 SelectedIndex() 메소드로 식별할 수 있습니다. 메소드가 -1을 반환하면 목록에 선택된 항목이 없는 것입니다. 또한 SelectedText() 메소드를 사용하여 선택한 항목의 텍스트를 수신 할 수 있습니다.

목록 항목의 텍스트를 수신하기 위해 Text() 메소드가 항목 인덱스의 사양과 함께 사용됩니다. 모든 항목 텍스트는 SetText() 메소드를 사용하여 수정할 수 있습니다. DeleteItem() 메소드는 항목을 삭제하고 Clear() 메소드는 전체 목록을 지웁니다.

이 컨트롤을 사용하는 예는 첨부된 eIncGUI_v2_Test_CList.mq5 파일에 있습니다.


7. CListMS 클래스

다중 선택 목록 (그림 7).

그림 7. CListMS 클래스 (다중 선택 목록)

그림 7. CListMS 클래스 (다중 선택 목록)

이 컨트롤은 한 가지 예외를 제외하면 "목록" 컨트롤과 동일합니다. 선택한 여러 항목의 동시 존재가 허용됩니다. 결과적으로 선택한 항목에 액세스하는 약간 다른 방법이 사용됩니다.

단순 목록을 처리 할 때 SetSelected() 메소드는 선택한 항목의 인덱스를 나타내는 하나의 매개 변수를 받습니다 (새 항목을 선택하면 이전 항목이 선택 취소됨). 다중 선택 목록에서 인덱스 및 항목 상태 (true/false - 선택됨/선택되지 않음)의 두 매개 변수가 SetSelected() 메소드로 전송됩니다. 항목이 선택되었는지 확인하기 위해 확인중인 항목의 전송된 인덱스를 수신하는 Selected() 메소드를 사용합니다.

FirstSelected() 및 NextSelected() 메소드는 선택한 모든 항목을 처리하는 데 사용됩니다. FirstSelected() 메소드는 처음 선택한 목록 항목의 인덱스를 반환합니다. NextSelected() 메소드는 FirstSelected() 또는 NextSelected() 메소드의 마지막 호출에서 수신된 항목의 인덱스 다음으로 선택된 항목의 인덱스를 반환합니다.

다음 구조를 사용하여 선택한 모든 항목을 반복 할 수 있습니다.

// All selected items iteration
 
int Selected=lstm.FirstSelected();
    while(Selected!=-1){
        //=======================================
        // An action with the selected item        
        // ======================================
       Selected=lstm.NextSelected();
   } 

이 컨트롤을 사용하는 예는 첨부된 eIncGUI_v2_Test_CListMS.mq5 파일에 있습니다.


8. CComBox 클래스

드롭 다운 목록 (그림 8.1).

그림 8.1. CComBox 클래스 (드롭 다운 목록)

그림 8.1. CComBox 클래스 (드롭 다운 목록)

이 컨트롤은 목록을 드롭 다운하기 위해 클릭해야 하는 작은 버튼이 있는 텍스트 상자를 나타냅니다 (그림 8.2). "목록" 컨트롤은 목록을 표시하는 데 사용됩니다. 목록에서 선택한 항목의 텍스트가 보이는 텍스트 상자에 표시됩니다.

이 컨트롤은 두 가지 모드에서 사용할 수 있습니다. 첫 번째는 목록에서 선택만 허용하고 두 번째는 키보드 입력을 허용합니다 (모드는 SetReadOnly() 메소드로 설정 됨). 따라서 이 컨트롤과 목록 간에는 약간의 차이가 있습니다.

키보드를 사용하여 입력 한 값이 목록에 있으면 해당 목록 항목이 선택되고 SelectedIndex() 메소드는 이 항목의 인덱스를 반환합니다.

입력 한 값을 목록에서 찾을 수없는 경우 SelectedIndex() 메소드는 -1을 반환하므로이 컨트롤의 값을 받기 위해 보이는 텍스트 상자의 내용을 반환하는 Value() 메소드가 사용됩니다. 프로그래밍 방식으로 값을 설정하려면 SetSelectedIndex() 메소드 (항목을 클릭하는 것과 동일) 또는 SetValue() 메소드 (키보드를 사용하여 값을 입력하는 것과 동일)를 사용할 수 있습니다.

그림 8.2. 드롭 다운 목록 확장

그림 8.2. 드롭 다운 목록 확장

이 컨트롤을 사용하는 예는 첨부된 eIncGUI_v2_Test_CComBox.mq5 파일에 있습니다.


9. CHMenu 클래스

수평 메뉴 (그림 9.1).

그림 9.1. CHMenu (수평 메뉴)

그림 9.1. CHMenu (수평 메뉴)

이 컨트롤은 가로 행으로 배열된 메뉴 항목과 측면의 버튼 인 여러 텍스트 상자를 나타냅니다. 수직선이 있는 측면 버튼은 메뉴를 시작 또는 끝으로 스크롤하는 데 사용되며 화살표 버튼은 "화면" (보이는 항목 수 기준)별로 스크롤하는 데 사용됩니다. 메뉴의 주요 목적은 프로그램에서 액션을 실행하는 것입니다.

메뉴 항목을 클릭하면 명령이 실행되어야 하는 이벤트가 생성됩니다. 명령을 직접 실행하는 것 외에도 메뉴를 사용하여 모든 기기를 활성화/비활성화 할 수 있습니다.

예를 들어, Expert Advisor는 지표 1, 2 및 3을 사용하여 포지션을 청산 할 수 있는 몇 가지 옵션이 있습니다. 사용자는 종결 신호를 보내는 인디케이터를 사용하여 포지션을 종결하도록 하나 또는 모든 옵션 또는 두 가지 도구의 조합을 활성화 할 수 있습니다.

다음 구성표가 제안됩니다. 메뉴를 클릭하면 기기 매개 변수를 설정하고 기기를 활성화하는 창이 표시되므로 사용자가 매개 변수를 설정하고 기기를 활성화하고 "확인"을 클릭하면 기기가 작동하기 시작합니다.

현재 작동중인 기기를 명확하게 보기 위해 항목 (체크 표시)을 표시하는 메소드 인 SetChecked() 메소드가 있습니다. 메뉴에 선택한 항목이 포함된 경우 활성화된 항목이 보이지 않게 스크롤 되더라도 메뉴에 활성화된 기기가 있음을 명확하게 나타내도록 색상이 변경됩니다. CheckedExist() 메소드를 사용하여 프로그래밍 방식으로 확인된 항목을 식별하고 Checked() 메소드를 사용하여 특정 메뉴 항목이 확인되었는지 확인할 수 있습니다.

그림 9.2. 체크 항목이 있는 가로 메뉴

그림 9.2. 체크 항목이 있는 가로 메뉴

이 컨트롤과 다른 모든 컨트롤의 적용은 컨트롤 이름, 픽셀 너비 및 표시되는 항목 수가 전송되는 Init() 메소드로 시작됩니다. Init() 메소드 다음의 AddItem() 메소드는 항목을 추가하는 데 사용됩니다.

이 컨트롤은 해당 명령에 대한 응답으로 다른 컨트롤의 표시를 의미하므로 클릭 한 메뉴 항목의 좌표를 가져 오는 방법, 항목이있는 화면 분기를 가져 오는 방법, 항목 너비를 순서대로 가져 오는 방법이 있습니다. 표시된 컨트롤을 적절한 화면 분기에 배치합니다.

LastClickedX() 및 LastClickedY() 메소드는 좌표를 가져 오는 데 사용되며 LastClickedQuarter() 메소드는 분기 (값 1-왼쪽 상단 모서리, 2-오른쪽 상단 모서리, 3-왼쪽 하단 모서리, 4-하단)를 가져 오는 데 사용됩니다. 오른쪽 모서리), LastClickedW() 메소드는 항목 너비를 가져옵니다.

이 컨트롤을 사용하는 예는 첨부된 eIncGUI_v2_Test_CHMenu.mq5 파일에 있습니다.


10. CVMenu 클래스

수직 메뉴 (그림 10).

그림 10. CVMenu 클래스 (수직 메뉴)

그림 10. CVMenu 클래스 (수직 메뉴)

이 컨트롤은 항목이 세로로 배열되고 세로 스크롤 바를 사용하여 스크롤한다는 점을 제외하면 목적, 기능 및 사용 측면에서 가로 메뉴와 완전히 동일합니다. 그러나 한 가지 차이점이 있습니다. - 가로 메뉴에서 항목 너비를 가져 오는 데 사용되는 LastClickedW() 메소드 대신 여기에서 ItemHeight() 메소드를 사용하여 항목 높이를 정의합니다.

이 컨트롤을 사용하는 예는 첨부된 eIncGUI_v2_Test_CVMenu.mq5 파일에 있습니다.


11. CHProgress 클래스

수평 진행률 표시 바 (그림 11).

그림 11. CHProgress 클래스 (수평 진행률 표시 바)

그림 11. CHProgress (수평 진행률 표시 바)

이 컨트롤은 작업 진행률을 백분율 형식으로 컨트롤하도록 설계되었습니다. 예를 들어, 조사를 위해 차트의 모든 바에 대해 복잡한 시간 소모적인 계산을 수행해야 합니다. 미리 시간을 계획하기 위해 작업이 수행된 정도, 공연이 끝날 때까지 남은 시간을 아는 것이 흥미로울 것입니다. 또는 적어도 프로그램이 여전히 실행 중이고 중단되지 않았음을 알 수 있습니다. 진행률 표시 바의 왼쪽 부분에는 성능 백분율이 표시되고 오른쪽 부분에는 예상 완료 시간이 표시됩니다.

Init() 메소드를 호출 할 때 이름과 너비 (픽셀 단위)의 두 매개 변수가 전송됩니다. 컨트롤 루프에 들어가기 직전에 Begin() 메소드를 호출하여 루프 매개 변수 (최소값 및 최대값)를 받아야 합니다. 루프 내에서 SetValue() 메소드는 진행률 표시 바에 표시되는 값을 설정합니다. 루프를 종료하면 Reset() 메소드는 진행률 표시 바를 원래 형식으로 재설정합니다.

SetValue() 메소드를 호출 할 때마다 그래픽 개체의 다시 그리기가 호출되므로 진행률 표시 바의 사용이 컴퓨터 리소스의 주요 소비자가 되어 진행률 표시 바의 사용이 비효율적인 지점까지 루프 실행 시간이 크게 늘어날 수 있습니다. 이 경우 컨트롤에는 새로 고침 간격 값(초)이 전송되는 SetRefreshInterval() 메소드가 있습니다.

새로 고침 간격이 설정되면 모든 호출에서 SetValue() 메소드가 먼저 컨트롤의 마지막 새로 고침 시간을 확인하고 해당 시간이 설정된 간격을 초과하는 경우에만 계산이 수행되고 진행률 표시됩니다. 다시 그려졌습니다.

이 컨트롤을 사용하는 예는 첨부된 eIncGUI_v2_Test_CHProgress.mq5 파일에 있습니다.


12. CDialer 클래스

다이얼러 (그림 12).

그림 12. CDialer 클래스 (Dialer)

그림 12. CDialer 클래스 (Dialer)

이 컨트롤은 CDialerInputBox 클래스 내에서 사용하기위한 것이지만 독립적으로 사용할 수도 있습니다.

예를 들어 아무 버튼이나 누르면 컨트롤이 표시됩니다. 사용자가 값을 다이얼하고 "확인"을 누르면 프로그램은 기본적으로 입력 상자가있는 다이얼러 컨트롤에서 수행되는 Value() 메소드에서받은 값을 사용합니다. 여기서 마지막으로 입력 한 값은 항상 텍스트 상자에 표시됩니다. 다이얼러를 확장하는 버튼이 옆에 있습니다.

하나의 매개 변수 (이름)가 Init() 메소드로 전송됩니다.

버튼 : "X" - 값을 변경하지 않고 다이얼러를 닫습니다. "C" - 입력된 값을 재설정합니다. "OK" - 입력된 값을 사용하고 숫자 버튼을 사용하는 것이 분명합니다. 소수점 - 소수점을 입력합니다. 숫자, "-" 버튼 - 숫자의 부호를 변경합니다 (양수 / 음수). 입력한 번호는 다이얼러 하단의 텍스트 상자에 표시됩니다.

이 컨트롤을 사용하는 예는 첨부된 eIncGUI_v2_Test_CDialer.mq5 파일에 있습니다.


13. CDialerInputBox 클래스

입력 상자가있는 다이얼러 (그림 13).

그림 13. CDialerInputBox 클래스 (입력 상자가 있는 다이얼러)

그림 13. CDialerInputBox 클래스 (입력 상자가 있는 다이얼러)

이 컨트롤은 입력 상자 및 다이얼러 컨트롤을 기반으로하며 옆에있는 다이얼러를 확장하는 단추가있는 텍스트 상자를 나타냅니다. 컨트롤은 두 가지 모드로 작동 할 수 있습니다 : 다이얼러를 통한 입력과 키보드 입력에 추가로.

SetReadOnly() 메소드는 키보드 입력을 활성화 / 비활성화합니다.

Init() 메소드에는 이름, 너비 (픽셀 단위), 값을 표시하기 위해 형식을 지정할 소수점 이하 자릿수, 컨트롤 옆에 표시되는 캡션의 네 가지 매개 변수가 전송됩니다.

이 컨트롤을 사용하는 예는 첨부된 eIncGUI_v2_Test_CDialerInputBox.mq5 파일에 있습니다.


14. CTable 클래스

테이블 (그림 14).

그림 14. CTable 클래스 (테이블)

그림 14. CTable 클래스 (테이블)

컨트롤 이름은 데이터 테이블을 표시하도록 설계되었습니다.

Init() 메소드에는 이름, 너비 및 높이 (픽셀 단위)의 세 가지 매개 변수가 전송됩니다. 실제 테이블 크기는 행 수, 열 수 및 크기로 정의되지만 Init() 호출에 지정된 크기 값을 초과 할 수 없습니다. 실제 테이블 크기가 Init() 호출에 지정된 크기 값을 초과하면 스크롤 바가 표시됩니다.

사용. Init() 메소드에 의한 테이블 초기화 후에 테이블 열의 수는 SetCollsCount() 메소드에 의해 정의되고 행 수는 SetRowsCount() 메소드에 의해 정의됩니다. SetRowsCount() 메소드 대신 AddRow() 메소드를 사용할 수 있습니다. 호출 될 때마다 하나의 행이 테이블에 추가됩니다. 테이블 크기 (열 및 행 수)를 정의한 후 셀을 값으로 채울 수 있습니다.

SetCellText() 메소드는 셀 값을 채우는 데 사용됩니다. 셀 텍스트 외에도 배경색, 텍스트 색상, 글꼴 크기, 글꼴 유형 (SetCellBGColor(), SetCellTxtColor(), SetCellFontSize(), SetCellFont() 메소드)과 같은 다른 모든 셀 속성도 수정할 수 있습니다. 행 높이는 SetRowHeight() 메소드를 사용하여 변경할 수 있으며 열 너비는 SetCollWidth() 메소드를 사용하여 수정할 수 있습니다.

SetCellsMerge() 메소드는 여러 셀을 하나로 병합하는 데 사용되며 행 인덱스, 열 인덱스, RowSpan 및 CollSpan 매개 변수 (HTML의 RowSpan 및 CollSpan 속성과 유사)의 네 가지 매개 변수가 있습니다.

RowSpan 매개 변수는 세로로 병합되는 셀 수를 정의하고 CollSpan 매개 변수는 가로로 병합되는 셀 수를 정의합니다. 병합된 셀은 RowSpan 및 CollSpan 값을 1로 설정하여 복원 할 수 있습니다.

보기의 편의를 위해 테이블에는 십자선 기능이 있습니다. 셀을 클릭하면 해당 셀의 열과 행이 다른 색상으로 강조 표시됩니다. 동일한 행을 다시 클릭하면 표준 테이블 색상 (및 표준 스크롤 바 색상)이 돌아옵니다. 십자선 함수는 SetAllowSelection() 메소드에 의해 활성화/비활성화됩니다. LastClickedRow() 및 LastClickedColl() 메소드는 클릭된 셀을 식별하는 데 도움이 됩니다.

HTML() 메소드는 브라우저에서 추가로 볼 수 있도록 html 파일에 저장할 테이블의 HTML 코드를 가져 오는 데 사용됩니다. 그러나 이 방법은 컨트롤을 표시 할 필요없이 단순히 테이블의 html 코드를 얻기 위해 사용할 수도 있습니다.

이 컨트롤을 사용하는 예는 첨부된 eIncGUI_v2_Test_CTable.mq5 파일에 있습니다.


결론

이 글에서 검토 한 컨트롤 집합은 프로그램과 사용자 간의 상호 작용에서 발생하는 모든 문제에 대한 솔루션을 제공하지는 않지만 가장 일반적인 문제를 완전히 다룹니다.

  • 체크 박스를 사용하여 활성화/비활성화;
  • 라디오 버튼과 목록을 사용하여 다양한 옵션 선택
  • 빠르고 쉬운 값 입력을위한 몇 가지 옵션 (키보드 입력, 스핀 버튼 입력, 다이얼러 입력)
  • 데이터의 시각적 표현 수단 - 다시, 목록 및 표.

이러한 컨트롤이 불충분 할 수있는 경우 일부는 당면한 문제에 더 적합한 다른 컨트롤을 개발하기위한 구성 요소로 사용할 수 있습니다. 어쨌든 제공된 컨트롤이 잘 활용되기를 바랍니다.


부록

첨부 파일 목록:

  1. IncGUI_v2.mqh는 CGraphicObjectShell, CWorkPiece, CColorSchemes, CInputBox 클래스 및이 문서에 설명된 모든 컨트롤 클래스가 포함된 포함 파일입니다. 파일은 터미널 데이터 폴더의 MQL5/Include 폴더에 있어야 합니다.
  2. eIncGUI_v2_Test_CSpinInputBox.mq5 - CSpinInputBox 클래스 사용의 예. 이 파일과 모든 후속 파일 (2 ~ 16)은 MQL5/Experts 폴더에 있어야 합니다.
  3. eIncGUI_v2_Test_CCheckBox.mq5 - CCheckBox class 클래스 사용의 예.
  4. eIncGUI_v2_Test_CRadioGroup.mq5 - CRadioGroup 클래스 사용의 예.
  5. eIncGUI_v2_Test_CVSсrollBar.mq5 - CVSсrollBar 클래스 사용의 예.
  6. eIncGUI_v2_Test_CHSсrollBar.mq5 - CHSсrollBar 클래스 사용의 예.
  7. eIncGUI_v2_Test_CList.mq5 - CList 클래스 사용의 예.
  8. eIncGUI_v2_Test_CListMS.mq5 - CListMS 클래스 사용의 예.
  9. eIncGUI_v2_Test_CComBox.mq5 - CComBox 클래스 사용의 예.
  10. eIncGUI_v2_Test_CHMenu.mq5 - CHMenu 클래스 사용의 예.
  11. eIncGUI_v2_Test_CVMenu.mq5 - CVMenu 클래스 사용의 예.
  12. eIncGUI_v2_Test_CHProgress.mq5 - CHProgress 클래스 사용의 예.
  13. eIncGUI_v2_Test_CDialer.mq5 - CDialer 클래스 사용의 예.
  14. eIncGUI_v2_Test_CDialerInputBox.mq5 - CDialerInputBox 클래스 사용의 예.
  15. eIncGUI_v2_Test_CTable.mq5 - CTable 클래스 요소 사용 예시.
  16. eIncGUI_v2_Test_모든 기능은 하나의 Expert Advisor에서 모든 컨트롤을 생성합니다.

MetaQuotes 소프트웨어 사를 통해 러시아어가 번역됨.
원본 기고글: https://www.mql5.com/ru/articles/313

사용자 정의 그래픽 컨트롤. 파트 3. 양식 사용자 정의 그래픽 컨트롤. 파트 3. 양식
이것은 그래픽 컨트롤에 관한 세 가지 글 중 마지막입니다. 주요 그래픽 인터페이스 구성 요소 (양식)의 생성과 다른 컨트롤과 함께 사용하는 방법을 다룹니다. 양식 클래스 외에도 CFrame, CButton, CLabel 클래스가 컨트롤 라이브러리에 추가되었습니다.
사용자 정의 그래픽 컨트롤. 1 부: 간단한 컨트롤 만들기 사용자 정의 그래픽 컨트롤. 1 부: 간단한 컨트롤 만들기
이 글에서는 그래픽 컨트롤 개발의 일반 원칙을 다룹니다. 그래픽 개체로 빠르고 편리한 작업을 위한 도구를 준비하고 텍스트 또는 숫자 데이터를 입력하기위한 간단한 컨트롤 생성의 예와 사용 방법을 분석 할 것입니다.
MQL5 클라우드 네트워크로 계산 속도 향상 MQL5 클라우드 네트워크로 계산 속도 향상
가정용 컴퓨터에 몇 개의 코어가 있습니까? 거래 전략을 최적화하기 위해 몇 대의 컴퓨터를 사용할 수 있습니까? 여기에서는 MQL5 클라우드 네트워크를 사용하여 마우스 클릭으로 전 세계의 컴퓨팅 성능을 받아 계산을 가속화하는 방법을 보여줍니다. "시간은 돈이다"라는 표현은 해가 갈수록 더욱 화제를 불러 일으키며 수십 시간 또는 며칠 동안 중요한 계산을 기다릴 여유가 없습니다.
MQL5 마법사 : 새 버전 MQL5 마법사 : 새 버전
이 문서에는 업데이트된 MQL5 마법사에서 사용할 수있는 새로운 기능에 대한 설명이 포함되어 있습니다. 수정된 신호 아키텍처를 통해 다양한 시장 패턴의 조합을 기반으로 거래 로봇을 만들 수 있습니다. 이 글에 포함된 예제는 Expert Advisor의 대화 형 생성 절차를 설명합니다.