【问题标题】:Prevent Click-thru on transparent form防止在透明表单上点击
【发布时间】:2012-05-02 19:32:49
【问题描述】:

我想在表单背景不可见的情况下在表单中绘制函数。创建了一个 TForm,TransparentColor 设置为 True,TransParentColorValue 设置为 clWhite。只需在上面放一个 TImage,在位图上绘制一个函数,将其分配给图像,效果很好。有一个问题。我不能再点击表格了。对表单标题和客户区的任何点击都会导致对底层应用程序的点击。这是由将 TransparentColor 设置为 True 引起的。我怎样才能防止这种“点击通过”?

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

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

当 Color 设置为 clWhite 和 Forms TransparentColorValue 时,表单完全启用点击。

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

两者都设置为 clFuchsia,它的行为与普通表单一样。好吧,它现在有效,但也许有人得到了解释?

【问题讨论】:

  • 使用不同的颜色(我不知道为什么......)。
  • 很奇怪,将 TransparentColorValue 设置为 clBlack 并用 clBlack 填充位图也可以部分工作。它没有点击,我现在可以移动表单,但仍然无法调整大小并且系统按钮没有反应。知道如何解决吗?
  • 你在哪里找到这些颜色? 让它成为 clFuchsia 并放手.. :)
  • 顺便说一句,这不是 VCL 的错。我建议你包含一个 litte sn-p 用 api 调用复制它并包含 winapi 标记。
  • 你不是在开玩笑,它真的适用于 clFuchsia!谢谢! api调用到底是什么意思?如果您回答此问题,我会将其标记为正确的。

标签: delphi delphi-xe transparent tform


【解决方案1】:

当使用某些特定颜色时,API 的行为似乎很奇怪。白色很明显,黑色的问题少一些。我试过黄色、灰色、纽扣面、紫红色等。它们看起来不错。

如果有人想在不使用 Delphi 的“透明...”属性的情况下复制问题,这里有一个小 sn-p:

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;


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多