2012-04-21 40 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