从CustomEdit继承的控件如何改变鼠标指针?(内详) 请参考TSpinEdit告诉我,这个控件的右侧按钮的鼠标指针是标准的,我继承实现的控件怎么就不是呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在private中override WM_SETCURSOR消息procedure WMSetCursor(var Msg: TWMSetCursor); message WM_SETCURSOR;代码可以这么写var P: TPoint;begin //缺省情况下,edit控件会把光标变为I_bar,但我们把光标移到按钮位置时 //需要把它设为箭头 //得到当前光标位置 GetCursorPos(P); if PtInRect(Rect(Width - FButtonWidth - 4, 0, ClientWidth, ClientHeight), ScreenToClient(P)) then Windows.SetCursor(LoadCursor(0, Idc_Arrow)) else inherited;end; txinfo(冰炎两重天) :很好。不过再问一下:我看到TSpinEdit好像并没有类似的东西,可以告诉我TSpinEdit是怎么做的吗?多谢多谢。 TSpinEdit实际上是一个复合控件,它由一个TCustomEdit和2个TSpeedButton组成,所以光标移到按钮上时,会自动变为箭头利用复合控件也是用来创建新控件的一种通用做法而如果想在一个TCustomEdit里自己画按钮,就可以考虑使用我说的方法 我不是自己自己画按钮,我觉得我的做法和TSpinEdit的几乎是一样的,从CustomEdit继承在Create中创建一个SpeedButton,但是如果不处理SetCursor消息的话,它的指针就是I_bar。为什么?再次骚扰,多谢多谢 也许你这个组件的speedbutton是放在TCustomEdit里了吧,只不过用TSpeedButton来覆盖住TCustomEdit的最右边一部分,这样光标放在按钮上时它其它还是认为当前的控件是TCustomEdit本身,你应该把speedbutton放在TCustomEdit之外,这样试一下? 是的,我的SpeedButton的Parent是TCustomEdit,但是TSpinEdit也是这样啊,而且我确实希望是放在里面的。再次骚扰,多谢多谢 秘密就在这里:procedure TSpinEdit.CreateWnd;begin inherited CreateWnd; SetEditRect; *******看一看源码吧end; 谢谢txInfo,我看过源代码了,而且将它的源代码拷出来试了多次,最后的发现是:秘密在它使用的TSpinEdit上,TSpinEdit是从TWincontrol继承来的,然后在其中Create两个SpeedButton,然后用SetBounds将这个SpeedButton画到指定的位置上。由此可以看出只要从TWincontrol继承来的东东就是默认的Arrow指针--我得臆测,尚待检验 不好意思,仔细看了一下,的确是跟CreateWnd无关感觉TCustomEdit的光标是I_Bar,我怀疑是在TCustomEdit.CreateParams那里有这么一句话:CreateSubClass(Params, 'EDIT');不过不好测试,等高人说明了如果方便,你可以把你的控件代码发过来我看一下 [email protected] [GDI+问题!求助!]实现类似于音乐播放器LRC字幕部分的文字向上滚动中出现的问题 求助! 如何使直线旋转任意角度后不产生锯齿或波浪 连接Oracle一般用什么组件??? 读取未知扩展名的文本文件 [Fatal Error] Required package 'dxPScxGridLnkD7' not found 程序片断 怎样遍离TListView 属性改变导致行为改变-----是怎么实现的 package 组件包的含义到底是什么? 不想Requery,我的思路是否可行? 可以把多个PROJECT一起编译成一个程序吗? 大家请帮忙,我查了大半天实在找不到错误的原因(急坏了!!!!!!)
procedure WMSetCursor(var Msg: TWMSetCursor); message WM_SETCURSOR;代码可以这么写
var
P: TPoint;
begin //缺省情况下,edit控件会把光标变为I_bar,但我们把光标移到按钮位置时
//需要把它设为箭头 //得到当前光标位置
GetCursorPos(P);
if PtInRect(Rect(Width - FButtonWidth - 4, 0, ClientWidth, ClientHeight), ScreenToClient(P)) then
Windows.SetCursor(LoadCursor(0, Idc_Arrow))
else
inherited;
end;
而如果想在一个TCustomEdit里自己画按钮,就可以考虑使用我说的方法
procedure TSpinEdit.CreateWnd;
begin
inherited CreateWnd;
SetEditRect; *******看一看源码吧
end;
秘密在它使用的TSpinEdit上,TSpinEdit是从TWincontrol继承来的,然后在其中Create两个SpeedButton,然后用SetBounds将这个SpeedButton画到指定的位置上。由此可以看出只要从TWincontrol继承来的东东就是默认的Arrow指针--我得臆测,尚待检验
感觉TCustomEdit的光标是I_Bar,我怀疑是在TCustomEdit.CreateParams那里有
这么一句话:CreateSubClass(Params, 'EDIT');
不过不好测试,等高人说明了如果方便,你可以把你的控件代码发过来我看一下 [email protected]