2012-04-21 94 views
3

我想繪製一個表單中沒有表單背景的函數。創建一個TForm,將TransparentColor設置爲True,將TransParentColorValue設置爲clWhite。只需在它上面放一個TImage,在位圖上繪製一個函數,將它分配給圖像,效果很好。有一個問題。我無法再點擊表單了。任何點擊表單標題和客戶區域都會導致底層應用程序中的點擊。這是由於將TransparentColor設置爲True導致的。我怎樣才能防止這種「點擊通過」?防止透明表單上的點擊

更新 我試過塞爾塔克的建議,我得到了一些顯着的結果。我準備的位圖如下:

Bitmap.Canvas.Brush.Color := clFuchsia; 
    Bitmap.Canvas.FillRect (Rect (0, 0, Bitmap.Width, Bitmap.Height)); 

當顏色設置爲clWhite和形式TransparentColorValue爲好,完全是點閱後啓用的形式。

都設置爲clBlack,形式可以移動,但邊界不能調整大小和系統按鈕不起作用

均設定爲clFuchsia它表現爲一個正常的形態。那麼,它現在的作品,但也許有人得到一個解釋?

+2

使用不同的顏色(我不知道爲什麼..)。 – 2012-04-21 14:05:37

+0

奇怪的是,將TransparentColorValue設置爲clBlack並使用clBlack填充位圖以及部分工作。它不會點擊通過,我現在可以移動窗體,但仍然無法調整大小,系統按鈕不起作用。任何想法如何解決? – Arnold 2012-04-21 14:17:51

+0

你在哪裏可以找到這些顏色? 做它clFuchsia,並放手.. :) – 2012-04-21 14:20:58

回答

5

當使用某些特定顏色時,API看起來很奇怪。白色是一個明顯的問題,黑色問題不大。我嘗試過黃色,灰色,鈕釦臉,紫紅色等。他們看起來很好。

如果有人想重複的問題,而無需使用Delphi的「透明......」特性,這裏有一個小片斷:

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 2012-04-21 14:55:31