2012-04-21 2 views
3

양식 백그라운드가 보이지 않는 양식에서 기능을 플로팅하고 싶습니다. TransparentColor를 True로 설정하고 TransParentColorValue를 clWhite로 설정하여 TForm을 작성했습니다. TImage를 그냥 씌우고, 비트 맵에 함수를 그려 넣고, 이미지에 할당하고, 멋지게 작동합니다. 한 가지 문제가 있습니다. 더 이상 양식을 클릭 할 수 없습니다. 양식의 캡션 및 클라이언트 영역을 클릭하면 기본 응용 프로그램에서 클릭이 발생합니다. TransparentColor를 True로 설정하면이 문제가 발생합니다. 이 "클릭 스루 (click-thru)"를 어떻게 막을 수 있습니까?투명한 양식의 클릭 스루 방지

업데이트 나는 Sertac의 제안을 시도했으며 주목할만한 결과를 얻었다.

컬러가 clWhite로 설정하고 양식뿐만 아니라 TransparentColorValue됩니다
Bitmap.Canvas.Brush.Color := clFuchsia; 
    Bitmap.Canvas.FillRect (Rect (0, 0, Bitmap.Width, Bitmap.Height)); 

, 형태가 완전히 스루가 클릭 활성화되어 다음과 같이 나는 비트 맵을 준비합니다.

모두 clBlack로 설정

는 형태로 이동 될 수 있지만, 국경은 해상도 변경을 할 수 없습니다 및 시스템 버튼

는 정상적인 형태로 동작 clFuchsia에 두 세트를 작동하지 않습니다. 글쎄, 지금은 작동하지만 어쩌면 누군가가 설명을 했나요?

+2

다른 색상을 사용하십시오 (이유는 알 수 없습니다 ..). –

+0

이상한, TransParentColorValue를 clBlack으로 설정하고 비트 맵을 clBlack으로 채우는 것도 부분적으로 작동합니다. 클릭 스루가 아니므로 지금 양식을 이동할 수 있지만 여전히 크기를 조정할 수 없으며 시스템 버튼이 반응하지 않습니다. 어떤 생각을 어떻게 해결할 수 있을까요? – Arnold

+0

그 색상은 어디에서 찾을 수 있습니까? clfuchsia로 만들고 .. .. –

답변

5

일부 특정 색상이 사용되면 API가 이상하게 작동하는 것 같습니다. 흰색은 분명한 것입니다. 흑은 조금 덜 문제가 있습니다. 나는 노란색, 회색, 버튼 얼굴, 자홍색 등으로 시도했습니다.

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Color: DWORD; 
    DC: HDC; 
begin 
    Color := $00FFFFFF; 
    SetWindowLong(Handle, GWL_EXSTYLE, 
     GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED); 
    SetLayeredWindowAttributes(Handle, Color, 255, LWA_COLORKEY); 

    DC := GetWindowDC(Handle); 
    SetDCBrushColor(DC, Color); 
    FillRect(DC, Rect(10, 10, 100, 80), GetStockObject(DC_BRUSH)); 
    ReleaseDC(Handle, DC); 
end; 


주 : 사람이 델파이의 '투명 ...'속성을 사용하지 않고 문제를 복제하고자하는 경우

, 여기에 작은 조각의 누군가와 답변을 제공하는 경우 나는 기꺼이이 답변을 제거 할 것 확실한 설명.

+1

동의합니다. – Arnold

관련 문제