Canvas에서 크라우드소싱 프로젝트 만들기 - 페이지 22

 
Nikolai Semko :
GButton 클래스의 예제를 거의 완성했는데 도망쳐야 합니다. 내일 마무리하고 발표하겠습니다.
괜찮은. 정말 궁금합니다. )
 
Реter Konow :
괜찮은. 정말 궁금합니다. )


여기 무슨 일이 있었는지.


버튼을 배경과 전경으로 가져와서 누르는 고정을 설정하거나 고정하지 않을 수 있습니다.

CanvasButton.mq5 샘플 파일은 마우스로 버튼을 드래그하는 기능을 구현합니다. 이렇게 하려면 Ctrl 키를 눌러 파란색 버튼을 이동하고 Shift 키를 눌러 빨간색 버튼을 이동합니다.

왜냐하면 GButton 클래스는 CCanvas 클래스의 자손 이며 , 예제는 CircleWu 원을 예로 사용하여 CCanvas 클래스의 기능을 사용할 수 있는 가능성을 보여줍니다(이는 OnInit에서 구현됨). 즉, CCanvas 클래스의 기능을 사용하여 버튼에 텍스트를 쓸 수 있습니다.

물론 이 클래스가 최종 클래스라고 주장하지는 않습니다. 그래픽이 완벽하게 빛나지 않고 3D가 매우 조건적이며 그림자가 구현되지 않고 실행 속도가 최적화되지 않았습니다. 그리고 거친 가장자리가 많고 다양한 검사가 없을 가능성이 큽니다. 따라서 엄격하게 판단하지 마십시오.

물론 시간을 조금 더 투자하면 다음과 같이 할 수 있습니다.


나는 방금 시도했습니다 ... 누군가는 말할 수 있습니다 - 방향을 설정하기 위해.


Canvas.mqh 파일은 m_pixels 배열이 public으로 정의된다는 점에서만 원본과 다릅니다.

파일:
GButton.mqh  20 kb
Canvas.mqh  152 kb
 
Nikolai Semko :


여기 무슨 일이 있었는지.


버튼을 배경과 전경으로 가져와서 누르는 고정을 설정하거나 고정하지 않을 수 있습니다.

CanvasButton.mq5 샘플 파일은 마우스로 버튼을 드래그하는 기능을 구현합니다. 이렇게 하려면 Ctrl 키를 눌러 파란색 버튼을 이동하고 Shift 키를 눌러 빨간색 버튼을 이동합니다.

왜냐하면 GButton 클래스는 CCanvas 클래스의 후손이며, 예제는 CircleWu 원을 예로 사용하여 CCanvas 클래스의 기능을 사용할 수 있는 가능성을 보여줍니다(이것은 OnInit에서 구현됨). 즉, CCanvas 클래스의 기능을 사용하여 버튼에 텍스트를 쓸 수도 있습니다.

물론 이 클래스가 최종 클래스라고 주장하지는 않습니다. 그래픽이 완벽하게 빛나지 않고 3D가 매우 조건적이며 그림자가 구현되지 않고 실행 속도가 최적화되지 않았습니다. 그리고 거친 가장자리가 많고 다양한 검사가 없을 가능성이 큽니다. 따라서 엄격하게 판단하지 마십시오.

물론 시간을 조금 더 투자하면 다음과 같이 할 수 있습니다.


나는 방금 시도했습니다 ... 누군가는 말할 수 있습니다 - 방향을 설정하기 위해.


Canvas.mqh 파일은 m_pixels 배열이 public으로 정의된다는 점에서만 원본과 다릅니다.

Nikolay, 제 생각에는 나쁘지 않은 것으로 판명되었습니다. 시작되었으며 추가 개발이 가능합니다. 나는 이 유형의 버튼을 키라고 부를 것입니다. 가장자리를 따라 4개의 선명한 프레임 선을 분리하면: - 위쪽, 왼쪽, 밝은 오른쪽, 아래쪽, 아래쪽 - 눌린 상태의 경우 어둡고 눌린 상태의 경우 그 반대의 경우 더 나은 품질을 얻을 수 있습니다(밝은 배경만 추가하면 됨 , 그렇지 않으면 검은색 그래프의 배경에 대한 어두운 선이 표시되지 않습니다). 글쎄, 그러면 텍스트와 그림을 설정할 수 있습니다.

한마디로 좋은 시도. )

 
Реter Konow :

. 가장자리를 따라 4개의 선명한 프레임 선을 분리하면: - 위쪽, 왼쪽, 밝은 오른쪽, 아래쪽, 아래쪽 - 눌린 상태의 경우 어둡고 눌린 상태의 경우 그 반대의 경우 더 나은 품질을 얻을 수 있습니다(밝은 배경만 추가하면 됨 , 그렇지 않으면 검은색 그래프의 배경에 대한 어두운 선이 표시되지 않습니다).

네, 원하는 대로 그릴 수 있는 것이 분명합니다. 이 경우 나는 걸작을 달성하기 위해 출발하지 않았습니다. 하지만 가장 먼저 다듬고 싶은 것은 초기화 중에 버튼 이미지의 모든 배열(이 경우 2개)을 형성한 다음 매번 이미지가 형성되지 않도록 ArrayCopy 를 통해서만 복사하는 것입니다. 이렇게 하면 작업 속도가 크게 빨라지지만 추가 RAM 소비가 발생합니다. 이제는 16기가 램이 장착된 컴퓨터에서 이미 흔한 일이며, 버튼이 많아도 추가 메모리 소비가 1-2MB를 초과하지 않을 것입니다. 특히 동일한 버튼이 동일한 어레이를 사용하는 경우 더욱 그렇습니다. 그래서 나는 그것이 문제라고 생각하지 않습니다. 주요 속도.
 
Nikolai Semko :
네, 원하는 대로 그릴 수 있는 것이 분명합니다. 이 경우 나는 걸작을 달성하기 위해 출발하지 않았습니다. 그러나 가장 먼저 수정하고 싶은 것은 초기화 중에 버튼 이미지의 모든 배열(이 경우 2개)을 형성한 다음 ArrayCopy를 통해서만 복사하여 매번 이미지를 형성하지 않도록 하는 것입니다. 이렇게 하면 작업 속도가 크게 빨라지지만 추가 RAM 소비가 발생합니다. 이제는 16기가 램이 장착된 컴퓨터에서 이미 흔한 일이며, 버튼이 많아도 추가 메모리 소비가 1-2MB를 초과하지 않을 것입니다. 특히 동일한 버튼이 동일한 어레이를 사용하는 경우 더욱 그렇습니다. 그래서 나는 그것이 문제라고 생각하지 않습니다. 주요 속도.

알았습니다. 버튼에 대한 질문을 제기했을 때 캔버스의 도움으로 이것이 가능한지 알고 싶었습니다.


눌림:

눌림:

이 예에서 프레임의 각 면은 여러 선으로 구성됩니다. 프레임의 양쪽에 총 4개의 그라데이션 라인. 각 선에는 버튼의 상태 와 지정된 프레임 모양에 따라 달라지는 고유한 음영이 있습니다. CCanvas에 특정 테두리 그라데이션 선의 색상을 설정할 수 있는 기능이 있으면 위의 예를 쉽게 수행할 수 있습니다. 그것이 바로 제가 알고 싶었던 것입니다.

 
Реter Konow :

알았습니다. 버튼에 대한 질문을 제기했을 때 캔버스의 도움으로 이것이 가능한지 알고 싶었습니다.


눌림:

눌림:

이 예에서 프레임의 각 면은 여러 선으로 구성됩니다. 프레임의 양쪽에 총 4개의 그라데이션 라인. 각 선에는 버튼의 상태 와 지정된 프레임 모양에 따라 달라지는 고유한 음영이 있습니다. CCanvas에 특정 테두리 그라데이션 선의 색상을 설정할 수 있는 기능이 있으면 위의 예를 쉽게 수행할 수 있습니다. 그것이 바로 제가 알고 싶었던 것입니다.

이해가 안 돼요, 피터. 당신은 고기에 대해 이야기하고 있고 나는 해골에 대해 이야기하고 있습니다. 뼈가 있으면 고기가 쌓일 수 있습니다. 내 예에 Press, Released 상태가 없는 경우가 아니면? GButton 클래스 내부를 본 적이 있습니까? Peter, 내 충고 : 모든 것을 버리고 급히 OOP를 공부하십시오. 수업은 OOP입니다. 너무 자란 코드라고 하는 프로젝트의 한도에 도달했을 뿐입니다. OOP의 도움으로 쉽게 극복할 수 있습니다.
그리고 캔버스의 도움으로 모든 것을 할 수 있습니다. 물론 MT5 창 안에 Windows를 작성할 수도 있습니다. 물론 전체 시각적 에뮬레이션 모드에서 :) 하드웨어에 액세스할 수 없기 때문입니다.

 
Nikolai Semko :
이해가 안 돼요, 피터. 당신은 고기에 대해 이야기하고 있고 나는 해골에 대해 이야기하고 있습니다. 뼈가 있으면 고기가 쌓일 수 있습니다. 내 예에 Press, Released 상태가 없는 경우가 아니면? GButton 클래스 내부를 본 적이 있습니까? Peter, 내 충고 : 모든 것을 버리고 급히 OOP를 공부하십시오. 수업은 OOP입니다. 너무 자란 코드라고 하는 프로젝트의 한도에 도달하면 OOP의 도움으로 쉽게 극복할 수 있습니다.
캔버스의 도움으로 모든 작업을 수행할 수 있으며 MT5 창 안에 Windows를 작성할 수도 있습니다.

))) 글쎄, 내가 왜 이 주제를 시작했지? ) 나는 이제 OOP를 공부할 것이다.

귀하의 예에는 버튼, 클릭 이벤트 및 이러한 버튼의 상태가 있습니다. 다 괜찮아. 그러나 Nikolai, 나는 여전히 내가 무엇에 대해 묻고 있는지 이해하지 못했습니다. CCcanvas 클래스에서 경계 그라디언트 선의 특정 색상을 설정할 수 있습니까? 귀하의 예를 보면 다음이 있다고 생각할 수 있습니다. 그렇다면 제 예와 유사한 것을 그릴 수 있습니까? 저는 이 클래스의 기능을 사용하여 그 자체로 그리는 용이성과 능력에 관심이 있으며 귀하는 클래스 기능의 속도 및 개선 사항에 대해 이야기하고 있습니다. 이것은 약간 다른 주제입니다.

 
Реter Konow :

))) 글쎄, 내가 왜 이 주제를 시작했지? ) 나는 이제 OOP를 공부할 것이다.

OOP는 Canvas가 아닌 간단한 것으로 학습을 시작하는 것이 좋습니다.
 
Vasiliy Sokolov :
OOP는 Canvas가 아닌 간단한 것으로 학습을 시작하는 것이 좋습니다.
네가 옳아. 교과서부터 시작하는 게 좋을 것 같아요. 사실, OOP는 복잡한 것입니다. 모든 것이 혼란스러워 보입니다...
 
Nikolai Semko :
GButton 클래스 내부를 본 적이 있습니까?


교실 안을 들여다보았다. 멋지게 보이지만 CCanvas 클래스의 전체 메커니즘을 이해하지 못합니다. 그래서 내 질문에 대한 답변을 보지 못했습니다.