[오픈캡쳐] 마우스 오른쪽 버튼을 눌러서 브러쉬 색으로 그리기
그림판은 네모나 원을 그릴 때 마우스 오른쪽 버튼을 누르면 브러쉬 색으로 그려지는 기능이 있다. 현재 오픈 캡쳐에는 이 기능이 없는데 간단한 방법으로 기능을 추가해 보자.
우선, 문제점으로 지적되었던 펜과 브러쉬 색상의 배열 문제를 해결해 보자.
1. 색상 팔레트 표시 순서 바꾸기
현재의 오픈 캡쳐는 펜 색상이 뒤에 브러쉬 색상이 앞에 놓이는 형태이다. 대부분의 그래픽 에디터나 포토샵 같은 경우는 펜 색상(전경색)이 앞에 놓인다. 이것을 해결하기 위해서는 uMain.pas 의 OnCreate 이벤트 핸들러를 수정해야 한다.
FPaletteBrush 의 부모(Parent)를 pnlPaintBox 로 지정한다. 부모(Parent)는 화면에 표시되는 방법을 나타낸다. 자식은 부모 위에 표시되며 폰트나 색상을 이어받을 수 있다. 부모가 같을 경우 먼저 부모를 지정한 개체가 밑에 놓인다. 이것을 이용하면 오픈 캡쳐에서 색상 팔레트의 표시 순서를 바꿀 수 있다.
Before | After |
FPalettePen.Parent := pnlPaintBox; FPaletteBrush.Parent := pnlPaintBox; |
FPaletteBrush.Parent := pnlPaintBox; FPalettePen.Parent := pnlPaintBox; |
2. 브러쉬 색으로 선 그리기
그림판은 마우스 오른쪽 버튼을 누르면 브러쉬 색으로 선 그리기가 가능하다. 그러나 현재의 오픈 캡쳐는 오른쪽 버튼을 누르면 팝업 창이 뜬다. 팝업 창이 뜨는 것은 일부 툴에 한에서만 허용하고 나머지는 브러쉬 색으로 그리기가 가능하도록 바꾸어 보자.
일단, 팝업창을 툴에 따라서 선별해서 뜨도록 바꾸어 본다.
uMDI.pas 에는 PopupMenu 의 OnPopup 이벤트 핸들러인 PopupMenuPopup 이 있다. 그 부분에 조건문이 있는데 그 부분을 다음처럼 수정해 준다.
다음 그림에서 보이는 도구 3개는 Popup 이 뜨며 나머지는 오른쪽 버튼을 다른 용도로 쓸 수 있다.
왼쪽 버튼이 눌려졌을 경우 (if Button in [mbLeft]) 펜과 브러쉬 색상을 팔레트 색상과 일치시킨다. 그러나, 오른쪽 버튼이 눌려졌을 경우 (if Button in [mbRight]) 에는 펜과 브러쉬 색상을 팔레트 색상과 반대로 대입시킨다.
오픈 캡쳐는 마우스 버튼이 눌려진 상태를 나타내기 위해서 FDown 이라는 변수를 사용한다. 따라서 오른쪽 버튼이 눌려진 상태를 나타내기 위해서 다음과 같이 바꾸어 주어야 한다.
추가된 부분은 mbRight 이다. 집합연산은 일종의 or 연산과 같으므로 다음과 같이 해도 마찬가지다.
3. 오른쪽 버튼으로 브러쉬 색 바꾸기
이건 뭐 별로 어려울 것 없이 MouseDown 이벤트 핸들러를 다음과 같이 수정하면 된다.
색상을 선택하는 도구를 선택하고 오른쪽 버튼을 눌렀을 때 마우스 포인터가 위치한 곳의 색상을 브러쉬 색상에 대입시킨다.