|
TCustomControl을 상속받아서 간단한 버튼을 만들었습니다.
MouseEnter, MouseLeave, Click 등의 이벤트 처리를 구현하였는데..
사용하다보니 작은(?)문제가 생겼습니다.
클릭해서 메시지박스를 띄운 후에 확인 버튼을 클릭하면..
(화면 중앙에서 실행된 메시지 박스의 확인버튼을 클릭하느라 커서는 이미 버튼을 벗어난 상태이구요..)
아직도 제가 만든 버튼은 마우스가 Enter인 상태로 남아있습니다.
XiButton을 참조해서 만들었는데.. 그녀석은 그런 현상이 없습니다.
혹시 저와 비슷한 경험을 하신분이 계시다면 도움을 부탁드리겠습니다.
그리고 또 하나.. XiButton의 소스인데요.. 파스칼..
C++ 코드로 어떻게 바꿔야 하는지 궁금해서요..
----------------------------------------
procedure TXiButton.CMDialogKey(var msg: TCMDialogKey);
begin
with msg do begin
if (((CharCode = VK_RETURN) and FFocused) or
((CharCode = VK_ESCAPE) and FCancel)) and
(KeyDataToShiftState(KeyData) = []) and CanFocus then
begin
Click;
Result := 1;
end else if (FDefault and (CharCode = VK_RETURN) and CanFocus) then begin
Click;
Result := 1;
end
else inherited;
end;
end;
----------------------------------------------------------
6 Line의 (KeyDataToShiftState(KeyData) = []) 입니다.
Forms.hpp 파일에 보니 TShiftState 를 반환하는 것 같은데요..
반환되는 결과 중에 ssShift, ssCtrl, ssAlt 가 모두 포함되지 않음을 확인하는 것 같습니다.
단순하게 결과.Contains(ssShift), 결과.Contains(ssCtrl), 결과.Contains(ssAlt) 를 일일이 비교해야 하나요?
에효.. ^^;; 좋은 주말들 되세요.
|