2009-05-05 6 views
0

가능한 경우 AlphaBlend 자식 폼에 대한 대화 형 컨트롤이 있으므로 레이어 된 창을 사용하여 방법을 찾고 있습니다.AlphaBlend 자식 폼

문제는 여러 개의 시각적 레이어 (그림, 그림 ...)를 그리는 일반 TForm에 구성 요소가 있다는 것입니다. 어떤 시점에서이 형식의 편집기 컨트롤을 인스턴스화해야합니다.이 컨트롤은 컨트롤 (편집 상자, 확인란 등) 외부에 다양한 표준 입력 컨트롤을 포함하지만 오버레이하고 싶습니다. 알파 블렌딩을 사용하여 레이어 앞에있는 레이어를 편집합니다 (클릭 연결을 위해 WS_EX_TRANSPARENT).

먼저 요소를 부모로 사용하는 테두리가없는 TForm이라는 하위 폼을 사용한다고 생각했는데 AlphaBlended TForm이 전혀 알파 블렌드되지 않은 지점까지 문제없이 작동하지만 부모가되는 즉시 불투명하게 바뀝니다 ...

그런 다음 alphablended 양식을 부모가 아닌 fsStayOnTop으로 설정하고 관련 이벤트에 반응하여 화면의 구성 요소 앞에서 유지합니다.하지만 실제로 만족스럽지는 않습니다. 솔루션 : 알파 블렌딩 된 StayOnTop 형식은 사용자가 구성 요소 앞에서 다른 모드 모덜리스 형태로 이동해야합니다.

따라서, 아이 양식을 알파벳순으로 작성하는 방법에 대한 다른 아이디어는 없습니까? (또는 그 것처럼 행동하십시오)

+0

ws_ex_Transparent 스타일은 창을 마우스 이벤트로부터 보호합니다. 이 스타일은 그림 순서에만 영향을줍니다. 마우스 이벤트를받지 않으려면 SetWindowRgn을 사용하여 창에 "구멍"을 만드십시오. –

답변

2

MSDN에 따르면 너는 운이 좋지 않아 WS_EX_LAYERED cannot be used for child windows입니다.

양식/응용 프로그램이 포커스를 잃었을 때 모든 편집기 양식을 숨길 수 있습니다. 적어도 다른 창 위에 표시되지 않도록 할 수 있습니다. 여전히 만족스럽지 않습니다 ...

+0

고마워, 나는 그것을 두려워했다. 스펙을 다시 작성하고 오버레이를 편집 양식의 입력 컨트롤의 "외부"에서만 볼 수있게하면 해결되었습니다 (편집 양식은 투명 해지고 입력 컨트롤의 편집 영역은 표시되지 않습니다). 오버레이는 주로 위치 지정 목적과 가이드 라인에 사용되기 때문에 완전히 만족스럽지 않은 경우 "충분 함"입니다. – user45336

관련 문제