付费求助,如何自定义一个EDIT控件,在EDIT的功能上增加画出一些斜线条,以防止屏幕识别程序识别EDIT中的文字。

sisssoft 2022-05-24 17:21:32

如题!

我现在已经想了几个办法了,效果如下图所示:

 

,但都达不到我想要的效果,分别如下:

 

1、图中我绿框选中的部份:使用Tshape控件,做一个斜线区域,然后使用TscEdit控件,并把TscEdit设置为透明。

2、图中我红框选中的部份:使用Tedit控件,然后重写WndProc事件,在里面监听WM_CTLCOLOREDIT, WM_CTLCOLORSTATIC消息,将一个斜线的图片,置为edit的背景图片。

以上两种,是我能实现的最好效果了,但均有同样的问题,就是:edit中的文字被选中时,则出现了(蓝底白字)的效果,此时,背景效果完全没有了。

我想要实现选中edit中的文字时,不出现蓝底白字的效果,可以用一个半透明的浅色色块表示选中效果就行,文字颜色不变,求助各位大佬们指点下或有合适的自定义控件发我也可以。

其中方法2的主要代码如下:

定义:

    fbmp: TBitmap;
    fbsh: HBRUSH;

  protected
    procedure WndProc(var Messages: TMessage); override;

 

创建图片:

  fbmp := TBitmap.Create;

  fbmp.LoadFromFile('c:\aaa.bmp');

  fbsh := CreatePatternBrush(fbmp.Handle);

WndProc事件:

procedure TForm2.WndProc(var Messages: TMessage);
var
  g: TGPGraphics;
  p: TGPPen;
begin
  inherited;
  case Messages.Msg of
    WM_CTLCOLOREDIT, WM_CTLCOLORSTATIC:
      if (Messages.LParam = edt3.Handle) and (fbsh <> 0) then
      begin
        SetBkMode(Messages.WParam, TRANSPARENT);
        Messages.Result := fbsh
      end;
  end;
end;

想要达到的效果如下:

 

 

...全文
215 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanqth 2022-05-25
  • 打赏
  • 举报
回复

那个蓝底白字,是WIN系统自己的选中高亮,不好搞。可以换一个思路,不用系统的高亮,自己绘制。

  • 打赏
  • 举报
回复

只能自绘制(owner draw)

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧