5,392
社区成员
如题!
我现在已经想了几个办法了,效果如下图所示:
,但都达不到我想要的效果,分别如下:
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;
想要达到的效果如下:
那个蓝底白字,是WIN系统自己的选中高亮,不好搞。可以换一个思路,不用系统的高亮,自己绘制。
只能自绘制(owner draw)