블라디미르, 전 캔버스에 소질이 없어요. 질문이 하나 있어요. 캔버스가 있습니다. 그 위에 텍스트 레이블이 있습니다. 터미널에서 레이블을 클릭한 이벤트를 캔버스를 클릭한 이벤트로 인식하는 이유는 무엇인가요? 이 충돌을 어떻게든 해결할 수 있을까요?
...
이에 대한 우선순위를 설정하는 속성이 있습니다:
OBJPROP_ZORDER - 차트에서 마우스 클릭 이벤트를 수신할 그래픽 개체의 우선 순위(CHARTEVENT_CLICK). 기본적으로 생성 시 이 값은 0으로 설정되어 있지만 필요한 경우 우선순위를 높일 수 있습니다. 겹치는 개체가 CHARTEVENT_CLICK 이벤트를 수신하는 경우 우선순위가 다른 개체보다 높은 개체 하나만 이벤트를 수신합니다.
나중에 코드를 보내드리겠습니다. OBJPROP_ZORDER - 캔버스의 경우 설정할 수 없습니다...
잘못 처리하는 원인을 찾았습니다... 캔버스가 두 개 있는데 하나는 다른 캔버스에 겹쳐져 있습니다. 그리고 위에 텍스트 레이블이 있습니다. 이것이 OnChartEvent()가 보지 못하는 것입니다.
나중에 코드를 보내드리겠습니다. OBJPROP_ZORDER - 캔버스의 경우 설정할 수 없습니다...
잘못 처리하는 원인을 찾았습니다... 캔버스가 두 개 있는데 하나는 다른 캔버스에 겹쳐져 있습니다. 그리고 위에 텍스트 레이블이 있습니다. 이것이 OnChartEvent()가 보지 못하는 것입니다.
네, 볼 수 있습니다. OBJ_BITMAP_LABEL 또는 OBJ_BITMAP과 같은 일반 객체입니다.
할 수 있습니다. 오브젝트_비트맵_라벨 또는 오브젝트_비트맵과 같은 일반 오브젝트입니다.
그렇군요. 고마워요.
이렇게 하려면 바인딩된 차트 개체의 이름을 가져와서 우선순위를 지정해야 합니다.
이것이 바로 그 방법입니다(초기화 블록에서 발췌):
//--- 첫 번째 캔버스 만들기 if(!myCanvas1.CreateBitmapLabel("My canvas1",_X,_Y,Width,Height,COLOR_FORMAT_ARGB_RAW)) { Print("Error creating base canvas: ",GetLastError()); return INIT_FAILED; } //--- 디스플레이 myCanvas1.Erase(XRGB(0x1F,0x1F,0x1F)); myCanvas1.Update(); string obj_name=myCanvas1.ChartObjectName(); if(!ObjectSetInteger(0,obj_name,OBJPROP_ZORDER,0)) return INIT_FAILED;
안녕하세요 블라디미르,
흥미로운 글을 작성해 주셔서 감사합니다.
표 3에 약간의 오류가 있습니다.
| С'255,0,255' | 0xFF00FF | 1111 1111 0000 0000 1111 1111 | |
| XOR | |||
| C'255,255,255' | 0xFFFFFF | 1111 1111 1111 1111 1111 1111 | 흰색(배경) |
| = | |||
| С'0,255,0' | 0x00FF00 | 1111 1111 1111 0000 0000 0000 | |
| 여야 합니다 : | 0000 0000 1111 1111 0000 0000 | Green | |
안녕하세요 블라디미르,
흥미로운 글을 작성해 주셔서 감사합니다.
표 3에 약간의 오류가 있습니다.
| С'255,0,255' | 0xFF00FF | 1111 1111 0000 0000 1111 1111 | |
| XOR | |||
| C'255,255,255' | 0xFFFFFF | 1111 1111 1111 1111 1111 1111 | 흰색(배경) |
| = | |||
| С'0,255,0' | 0x00FF00 | 1111 1111 1111 0000 0000 0000 | |
| 여야 합니다 : | 0000 0000 1111 1111 0000 0000 | Green | |
문제는 바로 이것입니다. 그래프에서 캔버스를 움직일 때 가장 좋은 구현 방법은 무엇일까요? 일종의 방법:
bool CUserCanvas::Move(int _new_x,int _new_y);
문제는 바로 이것입니다. 그래프에서 캔버스를 움직일 때 가장 좋은 구현 방법은 무엇일까요? 일종의 방법:
새로운 기고글 CCanvas 클래스 공부하기. 투명 개체를 그리는 방법 가 게재되었습니다:
이동 평균의 어색한 그래픽 이상이 필요하십니까? 터미널에 채워진 단순한 직사각형보다 더 아름다운 것을 그리고 싶습니까? 터미널에서 매력적인 그래픽을 그릴 수 있습니다. 이것은 사용자 정의 그래픽을 만드는 데 사용되는 CСanvas 클래스를 통해 구현할 수 있습니다. 이 클래스를 사용하면 투명도를 구현하고 색상을 혼합하고 색상을 겹치고 혼합하여 투명도의 환상을 만들 수 있습니다.
MetaTrader 5에서 그리는 것은 간단하며 몇 가지 뉘앙스만 알면 됩니다. 뉘앙스 중 하나는 터미널 화면이 디자인되는 방식입니다. 보다 정확하게는 그래픽이 화면에 출력되는 방식에 관심이 있습니다. 예를 들어 차트를 전경이나 배경에 표시할 수 있습니다. 화면의 색상 출력은 차트 표시에 따라 다릅니다. 일부 그래픽 개체는 겹치거나 교차하는 영역에서 색상이 변경될 수 있습니다.
CCanvas 클래스를 사용하여 직접 그리기를 진행하기 전에 색상 처리와 관련된 몇 가지 정의를 분석해 보겠습니다. 예를 들어 알파 채널의 의미를 알아보겠습니다.
제 생각에는 투명도 구현이 이미지를 생생하게 해줄 수 있는 가장 중요한 기술이라고 생각합니다. 예를 들어, 투명도를 사용하여 부드러운 색상 전환 또는 그림자가 있는 더 매력적인 인터페이스를 구현할 수 있습니다. 그림자는 그래픽 개체에 차원을 추가하고 개체 가장자리를 시각적으로 부드럽게 합니다.
이제 우리는 투명성의 실질적인 구현을 진행할 수 있습니다.
채워진 직사각형을 여러 개 그려봅시다(스크립트 "xor.mq5"). 색상 처리 방법의 차이점을 설명하기 위해 차트 상단에 겹치지 않는 가로 캔버스 3개를 적용해 보겠습니다.
첫 번째는 COLOR_FORMAT_XRGB_NOALPHA, 두 번째는 COLOR_FORMAT_ARGB_RAW, 세 번째는 COLOR_FORMAT_ARGB_NORMALIZE를 사용하여 처리됩니다. 그런 다음 투명도를 255(완전 불투명)에서 0(완전 투명)으로 점진적으로 변경합니다. 스크립트를 "Illusion.mq5"라고 합시다.
비디오는 스크립트 "Illusion.mq5"가 작동하는 방식을 보여줍니다.
그림 11. 스크립트illusion.mq5의 작업
작성자: Vladimir Karputov