개체 채우기

 

안녕하세요, 친애하는 프로그래머!

"MT4 터미널용."

나는 당신에게서 약간의 조언을 얻고 싶습니다. 이 뉘앙스를 알게되었습니다 ...

1. 직사각형 개체를 만듭니다. 작동했습니다.

2. 속성 설정:

- 스타일 - 일했습니다.

- 선 두께 - 작동됨;

- 색상 - 작동했습니다.

- 채우기 - 순종하기를 원하지 않습니다.

나는 땜질하고 땜질했고 결과적으로 사각형 개체가 기본적으로 "배경으로 개체 그리기" 확인란이 선택된 상태로 생성된다는 것을 알았습니다. 이 확인란이 켜져 있는 동안 사각형은 프로그램의 명령을 따르지 않으며 개체 속성 에서 이 확인란을 수동으로 선택 취소하면 프로그램에서 채우기를 제어할 수 있습니다.

문제는 "채우기" 속성이 한 번에 개체에 설정되지 않은 이유는 무엇입니까? 내가 무엇을 잘못하고 있고 무엇을 모르고 있습니까?

가능하신 분 도와주세요!

아래는 사용된 코드입니다.

#속성 표시기_차트_창

정수 시작()
{
긴 current_chart_id=ChartID();
//
string obj_name1="사각형1";
//
두 배 Price_Level_1 = 1296; // 금 따옴표
두 배 Price_Level_2 = 1293;
//
날짜/시간 Left_Side_1 = 시간[9];
datetime Right_Side_1 = 시간[0] + PeriodSeconds() * 7;
//
const 색상 clr = clrBeige;
const ENUM_LINE_STYLE 스타일 = STYLE_DASH;
상수 정수 너비 = 1;
const 부울 채우기 = 거짓;
//
ObjectCreate(current_chart_id, obj_name1, OBJ_RECTANGLE, 0, Left_Side_1, Price_Level_1, Right_Side_1, Price_Level_2);
ObjectSetInteger(current_chart_id, obj_name1, OBJPROP_COLOR, clr);
ObjectSetInteger(current_chart_id, obj_name1, OBJPROP_STYLE, 스타일);
ObjectSetInteger(current_chart_id, obj_name1, OBJPROP_WIDTH, 너비);
ObjectSetInteger(current_chart_id, obj_name1, OBJPROP_FILL, 거짓); // 즉시 설정되지 않음

리턴(0);

 

노력하다

 //+------------------------------------------------------------------+
void Prn_Rect_Label( string Name, int X, int Y, int width, int height, color CLR, int Corner, bool back)
   {
       ObjectDelete ( 0 ,Name);
       ObjectCreate ( 0 ,Name, OBJ_RECTANGLE_LABEL , 0 , 0 , 0 );
       ObjectSetInteger ( 0 ,Name, OBJPROP_XDISTANCE ,X);
       ObjectSetInteger ( 0 ,Name, OBJPROP_YDISTANCE ,Y);
       ObjectSetInteger ( 0 ,Name, OBJPROP_XSIZE ,width);
       ObjectSetInteger ( 0 ,Name, OBJPROP_YSIZE ,height);
       ObjectSetInteger ( 0 ,Name, OBJPROP_BGCOLOR ,CLR);
       ObjectSetInteger ( 0 ,Name, OBJPROP_CORNER ,Corner);
       ObjectSetInteger ( 0 ,Name, OBJPROP_BACK ,back);
       return ;
   }
 
그리고 요점이 무엇입니까? 추가 조작 없이 개체가 채우기에 응답하지 않는 이유는 무엇입니까?
 
Renat Akhtyamov :

노력하다

삭제가 아니라 존재 여부를 확인하는 것이 필요합니다. 그렇지 않은 경우 생성하십시오. 그런 다음 매개변수를 설정합니다.
 
그렇다면 채우기가 순종하지 않는 이유는 무엇입니까?
 
Artyom Trishkin :
삭제가 아니라 존재 여부를 확인하는 것이 필요합니다. 그렇지 않은 경우 생성하십시오. 그런 다음 매개변수를 설정합니다.

동의한다

먼저 찾기

그러나 객체가 삭제되고 같은 이름으로 매 틱마다 다시 생성되면 알려진 객체에 대한 검색이 중복됩니다.
 
5211845 :
그렇다면 채우기가 순종하지 않는 이유는 무엇입니까?

그렇다면 (거짓 --> 참):

   ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL , true ); // не задается сразу
 

작동하지 않습니다. 이미 이 기능을 시도했습니다.

ObjectSet(obj_name1, OBJPROP_FILL, 참 | 거짓);

 
이 코드가 작동해야 합니까? 아마도 내 터미널의 결함입니까?

ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false);

 
5211845 :
이 코드가 작동해야 합니까? 아마도 내 터미널의 결함입니까?

ObjectSetInteger(current_chart_id, obj_name1, OBJPROP_FILL, 거짓);

당연하지.

이것을 코드와 자세히 비교하고 OnTimer()에 배치하십시오. 주말에는 틱이 없거나 OnInit()에서 일시적으로 시작합니다.

https://www.mql5.com/en/docs/constants/objectconstants/enum_object/obj_rectangle

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
  • www.mql5.com
//| Cоздает прямоугольник по заданным координатам                    |               time1=0,                            price1=0,                         time2=0,                            price2=0,                        width=1,            //| Перемещает точку привязки прямоугольника                         |...
 

이 예제를 기반으로 코드를 작성했습니다. 차이점이 무엇인지 이해할 수 없습니다. 입력 매개변수를 위한 창이 있다는 것뿐입니다.

이 창이 필요하지 않으면 어떻게 합니까? 원하는 매개변수로 이미 객체를 생성하려는 경우. 그게 가능한가요?