防止透明表单上的点击



我想在表单中绘制一个函数,而表单背景不可见。创建了一个 TransparentColor 设置为 True,TransParentColorValue 设置为 clWhite。只需在上面放一个 TImage,在位图上绘制一个函数,将其分配给图像,效果很好。有一个问题。我无法再单击表单。对窗体标题和工作区的任何单击都会导致在基础应用程序中单击。这是由于将"透明颜色"设置为 True 导致的。如何防止这种"点击直通"?

更新我尝试了Sertac的建议,并得到了一些显着的结果。我准备位图如下:

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

当"颜色"设置为"clWhite"并且"表单透明颜色值"时,表单将完全启用点击通过。

两者都设置为 clBlack,窗体可以移动,但边框无法调整大小,系统按钮不起作用

两者都设置为clFuchsia,它的行为就像正常形式一样。好吧,它现在可以工作了,但也许有人得到了解释?

当使用某些特定颜色时,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;


注意:如果有人提供带有明确解释的答案,我很乐意删除此答案。

最新更新