12. 슬라이더와 필드의값 경계를버튼(_V_MIN, _V_MAX, _V_STEP, _DIGITS)으로프로그래밍 방식으로 가져오기/설정하기.
1. 위의 매개변수가 있는 요소로 창을 열어 봅시다:
int _OnInit()
{
//------------------------------------------------//Open the window "Settings example 1".//------------------------------------------------w_6_Settings_example_1();//------------------------------------------------
2. V_MIN, _V_MAX, _V_STEP, _DIGITS의 값을 기록하고 로그에 출력해 봅시다:
В предыдущей статье разрабатываемая библиотека была пополнена сразу четырьмя довольно часто используемыми в графических интерфейсах элементами управления: «чекбокс», «поле ввода», «поле ввода с чекбоксом» и «комбобокс с чекбоксом». Вторая глава шестой части серии будет посвящена таким элементам управления, как слайдер и двухсторонний слайдер.
int _OnInit()
{
//------------------------------------------------//Open the window "Settings example 1".//------------------------------------------------w_6_Settings_example_1();//------------------------------------------------
//Get state of button "Start":
//------------------------------------------------intButton_state = w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);//------------------------------------------------
//Print out:
//------------------------------------------------
Print("Button state: ",Button_state);
//------------------------------------------------
결과:v_NEUTRAL_STATE상태에 해당하는 값 15를 얻습니다 .
2. 버튼을 누르고 놓을 때 버튼의 상태를 기록해 보겠습니다:
이렇게 하려면
API 파일에서 버튼을 찾습니다.
눌렀을 때와 놓았을 때 두 가지 경우 모두에 대해 _GET_STATE 요청을 작성합니다.
case Settings_example_1___Start:
//------------------------------------------------------------------------------------------------------//What to do when the button is pressed or released?//------------------------------------------------------------------------------------------------------switch((int)action)
{
//------------------------------------------------------------------------casepressed:
{
//Get button's state when it pressed:
intButton_state = w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
//Print out the result:
Print("Button state: ",Button_state);
}
break;
//------------------------------------------------------------------------casereleased:
{
//Get button's state when it released:
intButton_state = w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
//Print out the result:
Print("Button state: ",Button_state);
}
break;
//------------------------------------------------------------------------
}
//------------------------------------------------------------------------------------------------------//Your comment://------------------------------------------------------------------------------------------------------break;
//------------------------------------------------//Open the window "Settings example 1".//------------------------------------------------w_6_Settings_example_1();
//------------------------------------------------//Get the state of the checkbox when it checked:intCheckbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
//Print out the result:Print("Checkbox state: ",Checkbox_state);
//------------------------------------------------
결과: 확인란이 있는 중립 상태 v_NEUTRAL_STATE에 해당하는 값 15를 얻습니다.
2. 다음으로 누르기 및 놓기 이벤트에 대한 체크박스의 상태를 쿼리해 보겠습니다.
이렇게 하려면
API 파일에서'옵션 설정' 체크박스를 찾습니다.
체크박스가 체크된 경우와 체크되지 않은 경우 모두에 대해 _GET_STATE 쿼리를 작성해 보겠습니다.
case Settings_example_1___Set_an_option:
//------------------------------------------------------------------------------------------------------//What to do when the checkbox is checked or unchecked? //------------------------------------------------------------------------------------------------------casechecked:
{
//Get checkbox state when it checked:intCheckbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
//Print out the result:
Print("Checkbox state: ",Checkbox_state);
}
break;
//------------------------------------------------------------------------caseunchecked:
{
//Get checkbox state when it unchecked:intCheckbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
//Print out the result:
Print("Checkbox state: ",Checkbox_state);
}
break;
//------------------------------------------------------------------------------------------------------
//Your comment:
//------------------------------------------------------------------------------------------------------
break;
결과: 강조 표시된 중립 및 강조 표시된 눌림 상태를 의미하는66 (v_NEUTRAL_HIGHLIGHTED) 및 67 (v_ACTIVATED_HIGHLIGHTED)값을 얻습니다 .
저는 coinsbitfx.com이라는 암호자산 거래소를 이용하기 시작했습니다. 코인 비트 FX는 사용자에게 합법성을 확신시키기 위해 미국 선물협회에 등록되었다고 주장했습니다. 어느 순간 제 계정의 가치가 $135,134까지 증가했다고 믿었습니다. 하지만 계좌에서 자금을 인출하려고 했더니 거래소 측에서 "거래가 검토 중"이라는 답변을 받았습니다. 그 후로 웹사이트의 누구와도 연락이 닿지 않았고 투자한 자금에 접근할 수 없었습니다. 그래서 블로그에서 RECOVERYCOINGROUP AT GMAIL DOT COM에 대해 읽고 조사를 한 후 서비스를 이용하기로 결정했습니다. 72시간 이내에 제 자금이 모두 복구되었고, 그것도 모자란 듯 제 친구들의 BTC도 복구되었습니다. 그래서 저는 이들에 대해 세상에 알릴 만큼 대담해졌습니다. 지금 바로 리커버리 코인 그룹에 연락해 주시면 감사하겠습니다 !
지난 파트에서는 버튼 버튼과 체크박스 체크박스의 상태를 프로그래밍 방식으로 반환하는 방법을 살펴봤습니다. GET_STATE 쿼리가 사용되었고 함수가 반환하는 상태 이름 목록이 표시되었습니다. 총 6개의 이름이 있으며, 각 이름은 접두사 v_로 시작합니다. ( 값의 약자로, 상태의 약자인 s_로 대체됩니다 ).
이 경우 특정 인덱스 번호는 중요하지 않습니다. 사용자가 특정 상태를 조건에 넣어야 할 때는 식별자를 사용합니다.
예 1:
//Getting state of the first element:int Button_state = w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);//Getting state of the second element:int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);//Setting conditions for both elements when they're simultaneously ON:if(Button_state == v_ACTIVATED_STATE)
{
//Is the checkbox was already on:if(Checkbox_state == v_ACTIVATED_STATE)
{
Function_1();
}
//If the checkbox was the last pressed element and still highlighted:if(Checkbox_state == v_ACTIVATED_HIGHLIGHTED)
{
Function_2();
}
}
예 2:
//Getting state of the first element:int Button_state = w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);//Getting state of the second element:int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);//Setting conditions for one element being ON, while the other is OFF:if(Button_state == v_ACTIVATED_STATE)
{
//If the checkbox was already off:if(Checkbox_state == v_NEUTRAL_STATE)
{
Function_A();
}
//If the checkbox was just turned off and still highlighted:if(Checkbox_state == v_NEUTRAL_HIGHLIGHTED)
{
Function_B();
}
}
v_NEUTRAL_STATE와v_NEUTRAL_HIGHLIGHTED 상태, 그리고 v_ACTIVATED_STATE와 v_ACTIVATED_HIGHLIGHTED 상태의 본질적인 차이점을 설명하겠습니다:
v_NEUTRAL_STATE - это нейтральное состояние в котором элемент находится неопределенное время.
v_NEUTRAL_HIGHLIGHTED - это нейтральное состояние в которое элемент перешел ТОЛЬКО ЧТО, после отжатия пользователя. Поэтому элемент подсвечен - HIGHLIGHTED.
활성화된 상태에도 동일하게 적용됩니다:
v_ACTIVATED_STATE - это активированное состояние в котором элемент находится неопределенное время.
v_ACTIVATED_HIGHLIGHTED - это активированное состояние в которое элемент перешел ТОЛЬКО ЧТО, после нажатия пользователя. Поэтому элемент подсвечен - HIGHLIGHTED.
이 차이는 큰 차이를 만듭니다.
현재 버튼과 일부 다른 요소는 v_NEUTRAL_STATE와 v_ACTIVATED_STATE만 반환하고 체크박스처럼 HIGHLIGHTED 상태는 반환하지 않습니다. 즉, 사용자는 항목이 방금 클릭/클릭 해제되었는지, 아니면 무한정 오래 전에 클릭/클릭 해제되었는지 알 수 있는 방법이 없습니다. 그러나 사용자는 API 파일에서 항목을 누른 순간을 파악할 수 있습니다. 예, 하지만 이 기능은 아직 나머지 프로그램에서는 사용할 수 없습니다. 다음 버전에서는 모든 인터랙티브 요소에 강조 표시 상태 반환 기능이 추가될 예정입니다. 이렇게 하면 프로그램 어디에서나 사용자가 요소가 방금눌렀는지/눌리지 않았는지 또는 오랫동안 그 상태에 있었는지 알 수 있습니다.
D_LIST, H_SLIDER, EDIT 및 S_EDIT 요소가 있는 두 개의 창을 열어 보겠습니다.
열자마자 요소의 상태를 반환해 보겠습니다.
1. 창을 엽니다:
int _OnInit()
{
//------------------------------------------------//Open the windows "Settings example 1" and "Settings example 2".//------------------------------------------------w_6_Settings_example_1();w_7_Settings_example_2();//------------------------------------------------
2. 요소의 상태를 가져옵니다:
//------------------------------------------------//Get the states of the elements S_EDIT, H_SLIDER, EDIT and D_LIST//------------------------------------------------//1. State index is type int, S_EDIT's function is double. Convert the types.intS_edit_state = (int)w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_GET_STATE);//2. Getting the slider's state. intH_slider_state = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_GET_STATE);//3.State index is type int, EDIT's function is string. Convert the types. intEdit_state = (int)w7_s_p4_EDIT_Comment_3(get_s,p4_GET_STATE);//State index is type int, D_LIST's function is string. Convert the types.intD_list_state = (int)w7_s_p6_D_LIST_D_LIST_1(get_s,p6_GET_STATE);//------------------------------------------------//Print out the results:Print("S_edit_state = ",S_edit_state);
Print("H_slider_state = ",H_slider_state);
Print("Edit_state = ",Edit_state);
Print("D_list_state = ",D_list_state);
//------------------------------------------------
결과: D_LIST의모든 요소는 상태 인덱스 15(중립 상태 v_NEUTRAL_STATE ) 를 가집니다. D_LIST가 오류(-1)를 반환했습니다.
이유: 이 요소의 상태 반환이 중앙 함수에 지정되어 있지 않습니다. 기술적 결함입니다.다음 버전에서 수정될 예정입니다.
D_LIST 함수는 아직 상태 인덱스를 반환하지 않으므로 상태가 성공적으로 수신된 세 가지 항목인 EDIT , S_EDIT 및 H_SLIDER에 집중해 보겠습니다.
확인해야 할 사항
요소가 잠겨 있고 클릭되었을 때 함수가 반환하는 인덱스.
주어진 요소의 상태가하이라이트 ( 강조 표시됨 ) 상태인지 여부. 즉, 요소가 방금 클릭되었는지 여부를 알 수 있는지 여부입니다.
EDIT, S_EDIT 및 H_SLIDER 요소 함수가 창이 열렸을 때 중립 상태의 인덱스를 반환한다는 것을 확인했습니다. 다른 상태를 확인해야 할 일이 남아 있습니다. 이러한 유형의 요소는 이론적으로 중립, 잠금 및 강조 표시된 상태만 가능하므로(더 많은 상태를 가진 버튼 및 확인란과 달리) 다음 두 가지 가능한 상태인 잠금 및 강조 표시를 확인해야 합니다. 혼동을 피하기 위해 아직 추가하지 않은'커서 아래' 상태 그룹도 있습니다. 다음 버전에서는 각 요소 유형의 가능한 상태의 개별 목록을 여는 특수 접두사를 만들 것입니다. 이렇게 하면 프로그래밍 작업이 더 쉬워질 것입니다.
차단 및 강조 표시된 상태편집, S_EDIT 및 H_SLIDER의 반환을 확인하는 방법:
API 파일에서 '옵션 설정' 체크박스를 찾아보겠습니다.
케이스 안에 EDIT, S_EDIT, H_SLIDER 요소의 잠금/잠금 해제를 작성하고 해당 요소의 상태를 인쇄()해 봅시다.
1. API 파일에서 '옵션 설정' 체크박스를 찾아 그 안에 EDIT, S_EDIT, H_SLIDER요소의 잠금/잠금 해제를 작성합니다.그런 다음 Print()를 통해 상태를 출력합니다.
case Settings_example_1___Set_an_option:
switch((int)action)
{
//------------------------------------------------------------------------------------------------------//What to do when the checkbox is checked or unchecked? //------------------------------------------------------------------------------------------------------casechecked:
{
//-----------------------------------------------//Locking EDIT:w7_s_p4_EDIT_Comment_1(p4_LOCK);
//Locking H_SLIDER:w6_i_p3_H_SLIDER_Roll_the_value(p3_LOCK);
//Locking S_EDIT:w6_d_p5_S_EDIT_Spin_the_value(p5_LOCK);
//-----------------------------------------------//Getting state of EDIT:intEDIT_state = (int)w7_s_p4_EDIT_Comment_1(get_s, p4_GET_STATE);
//Getting state of H_SLIDER:intH_SLIDER_state = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_GET_STATE);
//Getting state of S_EDIT:intS_EDIT_state = (int)w6_d_p5_S_EDIT_Spin_the_value(get_d, p5_GET_STATE);
//-----------------------------------------------//Printing results:Print("EDIT_state = ",EDIT_state);
Print("H_SLIDER_state = ",H_SLIDER_state);
Print("S_EDIT_state = ",S_EDIT_state);
//-----------------------------------------------
}
break;
//------------------------------------------------------------------------caseunchecked:
{
//-----------------------------------------------//Unlocking the element EDIT:w7_s_p4_EDIT_Comment_1(p4_UNLOCK);
//Unlocking H_SLIDER:w6_i_p3_H_SLIDER_Roll_the_value(p3_UNLOCK);
//Unlocking S_EDIT:w6_d_p5_S_EDIT_Spin_the_value(p5_UNLOCK);
//-----------------------------------------------//Getting state of EDIT:intEDIT_state = (int)w7_s_p4_EDIT_Comment_1(get_s, p4_GET_STATE);
//Getting state of H_SLIDER:intH_SLIDER_state = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_GET_STATE);
//Getting state of S_EDIT:intS_EDIT_state = (int)w6_d_p5_S_EDIT_Spin_the_value(get_d, p5_GET_STATE);
//-----------------------------------------------//Printing results:Print("EDIT_state = ",EDIT_state);
Print("H_SLIDER_state = ",H_SLIDER_state);
Print("S_EDIT_state = ",S_EDIT_state);
//-----------------------------------------------
}
break;
}
//------------------------------------------------------------------------------------------------------//Your comment://------------------------------------------------------------------------------------------------------break;
결과:
체크박스를 클릭하면 요소 함수는 인덱스 64를 반환하며, 이는 v_NEUTRAL_BLOCKED (중립 잠금) 상태에 해당합니다.
확인란을 선택 취소하면 요소 함수는 인덱스 15를 반환하며, 이는 v_NEUTRAL_STATE (중립 상태) 상태에 해당합니다.
API 파일에서 EDIT, S_EDIT, H_SLIDER 요소를 찾아 값을 입력할 때 상태를 가져와 해당 함수가 HIGHLIGHTED ( 강조 표시된 ) 인덱스를 반환하는지 확인하도록 지정합니다.
시작하기:
case Settings_example_2___Comment_1:
//------------------------------------------------------------------------------------------------------//What to do when the text is entered?//------------------------------------------------------------------------------------------------------
{
//Getting state of EDIT:intEDIT_state = (int)w7_s_p4_EDIT_Comment_1(get_s, p4_GET_STATE);
//Printing the results:Print("EDIT_state = ",EDIT_state);
}
//------------------------------------------------------------------------------------------------------//Your comment://------------------------------------------------------------------------------------------------------break;
case Settings_example_1___Roll_the_value:
//------------------------------------------------------------------------------------------------------//What to do when the slider's handle is moved?//------------------------------------------------------------------------------------------------------//Min value: 0 | Max value: 100 | V_step: 1 | Default value: 75 | Digits: Integer value//------------------------------------------------------------------------------------------------------
{
//Getting state of H_SLIDER:intH_SLIDER_state = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_GET_STATE);
//Printing results:Print("H_SLIDER_state = ",H_SLIDER_state);
}
//------------------------------------------------------------------------------------------------------//Your comment://------------------------------------------------------------------------------------------------------break;
case Settings_example_1___Spin_the_value:
//------------------------------------------------------------------------------------------------------//What to do when the value is set?//------------------------------------------------------------------------------------------------------//Min value: NOT SET | Max value: NOT SET | V_step: 1.7 | Default value: 468.99 | Digits: 3//------------------------------------------------------------------------------------------------------
{
//Getting state of S_EDIT:intS_EDIT_state = (int)w6_d_p5_S_EDIT_Spin_the_value(get_d, p5_GET_STATE);
//Printing results:Print("S_EDIT_state = ",S_EDIT_state);
}
//------------------------------------------------------------------------------------------------------//Your comment://------------------------------------------------------------------------------------------------------break;
결과:
EDIT: 사용자 상호작용 이벤트에서 67의 상태 인덱스를 반환하며, 이는v_ACTIVATED_HIGHLIGHTED ( 활성화됨, 강조 표시됨)를 의미합니다.
S_EDIT: 사용자 상호작용 이벤트에서 상태 인덱스 67을 반환하며, 이는v_ACTIVATED_HIGHLIGHTED ( 활성화됨, 강조 표시됨)를 의미합니다.
H_SLIDER: 사용자 상호작용 이벤트에서 인덱스 66과 67을 번갈아 반환하며, 이는v_NEUTRAL_HIGHLIGHTED ( 중립, 조명됨) 및v_ACTIVATED_HIGHLIGHTED (활성화됨, 조명됨)를 의미합니다.버그. 다음 버전에서 수정될 예정입니다.
일반적으로 결과는 만족스러운 것으로 평가할 수 있습니다. 요소는 의도한 대로 중립 및 잠금 상태의 인덱스를 반환합니다. 그러나 몇 가지 단점이 있습니다:
D_LIST 엘리먼트 함수는 어떤 상태도 반환하지 않습니다.
H_SLIDER 엘리먼트 함수는 하나의 인덱스 67 - v_ACTIVATED_HIGHLIGHTED(활성화, 조명) 대신 v_NEUTRAL_HIGHLIGHTED 및v_ACTIVATED_HIGHLIGHTED 상태의 인덱스를 번갈아 반환합니다.
결론:
결함을 수정해야 합니다.
사용자가 어떤 유형의 요소가 어떤 상태를 가지고 있는지 알고 코드에서 쉽게 사용할 수 있도록 특수 접두사s_로 호출되는 인텔리센스 목록을 만들어야 합니다.
잠재적으로 새로운 요소 상태를 추가할 수 있습니다. 예를 들어, 중립 가리키기 및 활성화 가리키기( 커서 아래 중립 및 커서 아래 활성화) 가 있지만 실용성과 사용자가 이러한 기능을 실제로 필요로 하는지에 대한 의문이 있습니다. 이러한 요구 사항이 접수되지 않는 한 새로운 상태를 추가하지 않겠습니다.
8. 서로 다른 요소의 매개변수 간에 값 반환, 변경 및 전달하기. 다양한 유형의 요소와 값을 고려하고 다른 창에서 다른 유형의 요소 간 전달을 테스트합니다.
9. 이전 값 반환(_V_LAST). 언제, 어떤 경우에 마지막 값이 필요한지(현재 값과 혼동하지 마세요).
10. 다양한 요소 유형에 대한 켜기, 끄기, LOCK_ON, LOCK_OFF, 잠금, 잠금 해제 상태 설정 테스트.
11. 요소의 변경 값 바인딩 및 동기화 테스트: 예: 버튼과 슬라이더가 있는 입력 필드. 한 요소(수동 또는 소프트웨어)의 값이 변경되면 두 번째 요소의 값도 그에 따라 변경되도록 합니다.
12. 슬라이더와 버튼이 있는 필드의 범위 경계를 소프트웨어로 가져오거나 설정하는 테스트(속성 _V_MIN, _V_MAX, _V_STEP, _DIGITS).
13. 항목 상태 쿼리(_GET_STATE)의 작동을 테스트합니다.
14. 텍스트 및 테두리 색상을 간격이 있는 값 경계에 연결하기.
15. API 파일의 방향.
16.메시지 및 경고 창 표시의 간단한 프로그램 로직 구현.
//------------------------------------------
고려된 주제는 노란색으로 강조 표시되어 있습니다.
현재로서는 몇 가지 고려해야 할 사항이 남아 있습니다:
14. 텍스트와 프레임 색상을 간격 값 경계에 연결하기.
15. API 파일의 방향.
16.메시지 및 경고 창 표시의 간단한 프로그램 로직 구현.
//------------------------------------------
14번 주제와 16번 주제를 연계하는 것이 좋습니다. 설정된 매개 변수 값의 한계를 초과하면 먼저 요소의 일부 색상 (텍스트, 기본, 프레임, 줄무늬 등)을 변경 한 다음 대화 창을 연 다음 경고 창을 여는 형태로 신호가 발생합니다. 동시에 경고 창은 사용자가 수동으로 닫을 때까지 요소의 값 변경을 차단합니다.
또한 목록에 테마를 추가하고 싶습니다:
사용자가 '취소' 버튼을 클릭하면 입력한 설정을 취소하는 기능입니다.
오래 전에 '취소' 버튼을 클릭하여 사용자 설정을 취소하는 기술이 개발되어 어느 정도 테스트를 거쳤습니다. 현재로서는 이전 기능이 얼마나 잘 작동하는지 알 수 없습니다. 따라서 테스트가 필요합니다.
주제 중복으로 인해 검토 순서는 다음과 같습니다:
14. 스태거드 매개변수 경계 보호 구현하기:
사전 설정된 경계 내에서 설정을 제어하는 로직을 작성하고 경고 시스템을 만듭니다.
경고 1: 사용자는 요소 일부의 색상이 변경되는 형태로 신호를 받습니다.( 텍스트, 밑줄, 프레임 및 슬라이더 바의 색상을 값 경계에 연결해 보겠습니다.)
경고 2: 위험 알림과 함께 원래 설정으로 돌아가라는 제안이 포함된 대화 상자가 열립니다. ( '취소' 버튼을 클릭했을 때 이전 설정으로 돌아가는 실제 기능을 테스트해 보겠습니다. )
경고 3: 설정에 대한 추가 변경을 차단하는 경고 창이 열리고 사용자에게 면책 조항을 알리고 사용자의 수동 확인이 필요합니다. ( 경고 창이 나타날 때 창 차단을 테스트해 보겠습니다. )
12. 슬라이더와 필드의값 경계를버튼(_V_MIN, _V_MAX, _V_STEP, _DIGITS)으로프로그래밍 방식으로 가져오기/설정하기.
1. 위의 매개변수가 있는 요소로 창을 열어 봅시다:
2. V_MIN, _V_MAX, _V_STEP, _DIGITS의 값을 기록하고 로그에 출력해 봅시다:
결과: 슬라이더 매개변수 속성의 값이 기록됩니다.
//---------------------------------------------------------------------------------------------------------------------------------------
3. 버튼이 있는 필드에 대해서도 같은 작업을 반복해 보겠습니다. 슬라이더와 달리 이 필드에는 다른 숫자 경계가 있고 값 유형은 이중입니다.
결과:버튼이 있는 필드의 매개변수 속성 값이 로그에 표시됩니다.
//---------------------------------------------------------------------------------------------------------------------------------------
4. 슬라이더 범위의 다른 경계를 설정합니다(첫 번째 테스트이므로 결과를 알 수 없음).
결과: *음수 범위에서 문제가 발견되었습니다(다음 버전에서 수정 예정).
양수 범위 바운드로 확인해 보겠습니다:
결과: 범위 바운드가 성공적으로 변경되었습니다.
요점: 슬라이더의 범위는 슬라이더의 함수를 사용하여 변경할 수 있습니다.
**중요:매개변수 값 유형을 int에서 double로 또는 그 반대로 소급하여 변경할 수 없습니다.
//-------------------------------------------------------------------------------------------------
입력 필드에 대해서도 비슷한 실험을 해보겠습니다:
결과: 의도한 대로 작동합니다. 버튼이 있는 필드는 지정된 범위와 단계를 허용합니다. 범위를 초과하면 로그에 오류를 보고합니다.
//--------------------------------------------------------------------------------------------------
5. 마지막으로 버튼이 있는 필드에 value_DIGITS를 설정해 보겠습니다(매개변수 유형이 int이므로 슬라이더가 작동하지 않음):
결과:
결과:
이것으로 이 주제를 마칩니다.
13. 요소 _GET_STATE 상태 쿼리하기.
인터페이스의 하나 또는 다른 요소의 상태를 프로그래밍 방식으로 가져와야 하는 경우가 종종 있습니다. 이 문제를 해결하기 위해 _GET_STATE 식별자가 생성됩니다.
//--------------------------------------------------------------------------------------------------------------------
*중요: 요청_GET_STATE에서 함수는 요소의 현재 상태의 인덱스를 반환합니다.
//--------------------------------------------------------------------------------------------------------------------
아래 이미지는 요소 상태 목록을 보여줍니다.
1. 상태 식별자 :
(*다음 릴리스에서는 접두사 v_가 접두사 s_로 대체될 예정입니다. )
로그에 출력되는 인덱스입니다:
엘리먼트 상태 쿼리 및 검색을 테스트해 보겠습니다:
1. 창을 열고 '시작' 버튼의 초기 상태를 가져옵니다:
결과:v_NEUTRAL_STATE 상태에 해당하는 값 15를 얻습니다 .
2. 버튼을 누르고 놓을 때 버튼의 상태를 기록해 보겠습니다:
이렇게 하려면
결과: 눌렀을 때/놓았을 때 이벤트에서 현재 상태 인덱스가 로그에 인쇄됩니다.
참고
//----------------------------------------------------------------------------------------------------------------
3. 체크박스를 사용하여 쿼리를 반복해 보겠습니다.
1. 창 열림 이벤트에 대한 체크박스의 상태를 가져와 봅시다:
결과: 확인란이 있는 중립 상태 v_NEUTRAL_STATE에 해당하는 값 15를 얻습니다.
2. 다음으로 누르기 및 놓기 이벤트에 대한 체크박스의 상태를 쿼리해 보겠습니다.
이렇게 하려면
결과: 강조 표시된 중립 및 강조 표시된 눌림 상태를 의미하는66 (v_NEUTRAL_HIGHLIGHTED) 및 67 (v_ACTIVATED_HIGHLIGHTED)값을 얻습니다 .
//-----------------------------------------------------------------------------------------------
이것으로 주제의 첫 번째 부분을 마칩니다.
두 번째 파트에서는 D_LIST 드롭다운 목록, H_SLIDER 슬라이더, S_EDIT 및 EDIT 입력 필드의 상태를 반환하겠습니다.
13. 상태 요청 _GET_STATE.
2부: D_LIST, H_SLIDER, EDIT, S_EDIT 요소의 상태 가져오기 .
지난 파트에서는 버튼 버튼과 체크박스 체크박스의 상태를 프로그래밍 방식으로 반환하는 방법을 살펴봤습니다. GET_STATE 쿼리가 사용되었고 함수가 반환하는 상태 이름 목록이 표시되었습니다. 총 6개의 이름이 있으며, 각 이름은 접두사 v_로 시작합니다. ( 값의 약자로, 상태의 약자인 s_로 대체됩니다 ).
상태 인덱스를 떠올려 보세요:
이 경우 특정 인덱스 번호는 중요하지 않습니다. 사용자가 특정 상태를 조건에 넣어야 할 때는 식별자를 사용합니다.
예 1:
예 2:
//-----------------------------------------------------------------------------------------------------------------
*매우 중요합니다:
v_NEUTRAL_STATE와 v_NEUTRAL_HIGHLIGHTED 상태, 그리고 v_ACTIVATED_STATE와 v_ACTIVATED_HIGHLIGHTED 상태의 본질적인 차이점을 설명하겠습니다:
v_NEUTRAL_STATE - это нейтральное состояние в котором элемент находится неопределенное время. v_NEUTRAL_HIGHLIGHTED - это нейтральное состояние в которое элемент перешел ТОЛЬКО ЧТО, после отжатия пользователя. Поэтому элемент подсвечен - HIGHLIGHTED.
활성화된 상태에도 동일하게 적용됩니다:
v_ACTIVATED_STATE - это активированное состояние в котором элемент находится неопределенное время. v_ACTIVATED_HIGHLIGHTED - это активированное состояние в которое элемент перешел ТОЛЬКО ЧТО, после нажатия пользователя. Поэтому элемент подсвечен - HIGHLIGHTED.
이 차이는 큰 차이를 만듭니다.
현재 버튼과 일부 다른 요소는 v_NEUTRAL_STATE와 v_ACTIVATED_STATE만 반환하고 체크박스처럼 HIGHLIGHTED 상태는 반환하지 않습니다. 즉, 사용자는 항목이 방금 클릭/클릭 해제되었는지, 아니면 무한정 오래 전에 클릭/클릭 해제되었는지 알 수 있는 방법이 없습니다. 그러나 사용자는 API 파일에서 항목을 누른 순간을 파악할 수 있습니다. 예, 하지만 이 기능은 아직 나머지 프로그램에서는 사용할 수 없습니다. 다음 버전에서는 모든 인터랙티브 요소에 강조 표시 상태 반환 기능이 추가될 예정입니다. 이렇게 하면 프로그램 어디에서나 사용자가 요소가 방금 눌렀는지/눌리지 않았는지 또는 오랫동안 그 상태에 있었는지 알 수 있습니다.
//----------------------------------------------------------------------------------------------------------
실용적인 부분으로 넘어가 보겠습니다:
1. 창을 엽니다:
2. 요소의 상태를 가져옵니다:
결과: D_LIST의모든 요소는 상태 인덱스 15(중립 상태 v_NEUTRAL_STATE ) 를 가집니다. D_LIST가 오류(-1)를 반환했습니다.
이유: 이 요소의 상태 반환이 중앙 함수에 지정되어 있지 않습니다. 기술적 결함입니다.다음 버전에서 수정될 예정입니다.
D_LIST 함수는 아직 상태 인덱스를 반환하지 않으므로 상태가 성공적으로 수신된 세 가지 항목인 EDIT , S_EDIT 및 H_SLIDER에 집중해 보겠습니다.
확인해야 할 사항
EDIT, S_EDIT 및 H_SLIDER 요소 함수가 창이 열렸을 때 중립 상태의 인덱스를 반환한다는 것을 확인했습니다. 다른 상태를 확인해야 할 일이 남아 있습니다. 이러한 유형의 요소는 이론적으로 중립, 잠금 및 강조 표시된 상태만 가능하므로(더 많은 상태를 가진 버튼 및 확인란과 달리) 다음 두 가지 가능한 상태인 잠금 및 강조 표시를 확인해야 합니다. 혼동을 피하기 위해 아직 추가하지 않은'커서 아래' 상태 그룹도 있습니다. 다음 버전에서는 각 요소 유형의 가능한 상태의 개별 목록을 여는 특수 접두사를 만들 것입니다. 이렇게 하면 프로그래밍 작업이 더 쉬워질 것입니다.
차단 및 강조 표시된 상태편집, S_EDIT 및 H_SLIDER의 반환을 확인하는 방법:
1. API 파일에서 '옵션 설정' 체크박스를 찾아 그 안에 EDIT, S_EDIT, H_SLIDER 요소의 잠금/잠금 해제를 작성합니다.그런 다음 Print()를 통해 상태를 출력합니다.
결과:
//--------------------------------------------------------------------------------------------------
2. 두 번째 과제:
시작하기:
결과:
//-----------------------------------------------------------------------------------------------------
결과:
일반적으로 결과는 만족스러운 것으로 평가할 수 있습니다. 요소는 의도한 대로 중립 및 잠금 상태의 인덱스를 반환합니다. 그러나 몇 가지 단점이 있습니다:
결론:
잠재적으로 새로운 요소 상태를 추가할 수 있습니다. 예를 들어, 중립 가리키기 및 활성화 가리키기( 커서 아래 중립 및 커서 아래 활성화) 가 있지만 실용성과 사용자가 이러한 기능을 실제로 필요로 하는지에 대한 의문이 있습니다. 이러한 요구 사항이 접수되지 않는 한 새로운 상태를 추가하지 않겠습니다.
이 주제는 이것으로 끝입니다.
다음 주제로 넘어가겠습니다.
지난 한 주 동안 WinForm을 사용하여 인터페이스를 작성하고 이를 MT5 차트에 삽입하는 방법을 연구했습니다. 오늘 드디어 깨달았습니다.
고려해야 할 일반적인 주제 목록입니다:
1. 인텔리센스 목록에서 방향을 정하고 오른쪽 창의 기능을 선택합니다.
2. 프로그래밍 방식으로 창 열기 및 닫기.
3. 프로그래밍 방식으로 사용 가능한 창 요소 목록 열기.
4. 개별 요소 속성 목록 열기.
5. 요소 및 창 래퍼 함수의 이름 파싱하기.
6. 요소 매개변수의 값을 해당 유형의 변수로 반환하기.
7. 다른 유형의 요소 매개변수에 값 설정하기.
8. 서로 다른 요소의 매개변수 간에 값 반환, 변경 및 전달하기. 다양한 유형의 요소와 값을 고려하고 다른 창에서 다른 유형의 요소 간 전달을 테스트합니다.
9. 이전 값 반환(_V_LAST). 언제, 어떤 경우에 마지막 값이 필요한지(현재 값과 혼동하지 마세요).
10. 다양한 요소 유형에 대한 켜기, 끄기, LOCK_ON, LOCK_OFF, 잠금, 잠금 해제 상태 설정 테스트.
11. 요소의 변경 값 바인딩 및 동기화 테스트: 예: 버튼과 슬라이더가 있는 입력 필드. 한 요소(수동 또는 소프트웨어)의 값이 변경되면 두 번째 요소의 값도 그에 따라 변경되도록 합니다.
12. 슬라이더와 버튼이 있는 필드의 범위 경계를 소프트웨어로 가져오거나 설정하는 테스트(속성 _V_MIN, _V_MAX, _V_STEP, _DIGITS).
13. 항목 상태 쿼리(_GET_STATE)의 작동을 테스트합니다.
14. 텍스트 및 테두리 색상을 간격이 있는 값 경계에 연결하기.
15. API 파일의 방향.
16.메시지 및 경고 창 표시의 간단한 프로그램 로직 구현.
//------------------------------------------
고려된 주제는 노란색으로 강조 표시되어 있습니다.
현재로서는 몇 가지 고려해야 할 사항이 남아 있습니다:
14. 텍스트와 프레임 색상을 간격 값 경계에 연결하기.
15. API 파일의 방향.
16.메시지 및 경고 창 표시의 간단한 프로그램 로직 구현.
//------------------------------------------
14번 주제와 16번 주제를 연계하는 것이 좋습니다. 설정된 매개 변수 값의 한계를 초과하면 먼저 요소의 일부 색상 (텍스트, 기본, 프레임, 줄무늬 등)을 변경 한 다음 대화 창을 연 다음 경고 창을 여는 형태로 신호가 발생합니다. 동시에 경고 창은 사용자가 수동으로 닫을 때까지 요소의 값 변경을 차단합니다.
또한 목록에 테마를 추가하고 싶습니다:
사용자가 '취소' 버튼을 클릭하면 입력한 설정을 취소하는 기능입니다.
오래 전에 '취소' 버튼을 클릭하여 사용자 설정을 취소하는 기술이 개발되어 어느 정도 테스트를 거쳤습니다. 현재로서는 이전 기능이 얼마나 잘 작동하는지 알 수 없습니다. 따라서 테스트가 필요합니다.
주제 중복으로 인해 검토 순서는 다음과 같습니다:
14. 스태거드 매개변수 경계 보호 구현하기:
15. 새로운 API 파일 출력에 대해 자세히 살펴봅시다.
//----------------------------------------------------------------------------------------------------
다음으로 발견된 모든 버그나 결함을 수집하여 다음 릴리스를 위한 작업 목록을 작성하겠습니다.
수정 및 추가 사항이 포함 된 다음 릴리스 이후에는 엔진의 추가 개발 방향 중 하나를 볼 수있는 테이블에 집중할 것입니다.
지난 한 주 동안 WinForm을 사용하여 인터페이스를 작성하고 MT5 차트에 빌드하는 방법을 배웠습니다. 오늘 드디어 방법을 알아냈습니다.
인터페이스가 프로그래밍 코드와 어떻게 통신하게 만들까요?