D
darnis
Unregistered / Unconfirmed
GUEST, unregistred user!
是这样的,想定制一个控件 TEdit 的,我想让它只能接受 0..9,和 '.' 也就是只能输入
合法的数字。
在控件的 OnkeyPress 可以很好地解决通过键盘输入的数据过滤问题。
但是我为了把从鼠标操作粘进来的数据进行检测,却不知怎么回事了。
遇到的问题如下:
1、在 WM_PASTE 发生时,能不能取得这时 paste 的内容啊?
2、是 TEdit 不支持 WM_SETTEXT 事件吗?我在组件代码里把这个消息的处理过程写
了,但是永远都发生不了 WM_SETTEXT 事件是怎么回事啊?
部分源代码如下:
TNumeric = class(TEdit)
private
{ Private declarations }
procedure Filter(Sender: TObject;var Key :Char);
procedure WMSetText(var msg: TWMSetText);message WM_SETTEXT;
procedure WMPaste(var msg: TWMPaste);message WM_PASTE;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent);override;
published
{ Published declarations }
end;
..............
procedure TNumeric.WMPaste(var msg: TWMPaste);
begin
// 在这里可不可以取得 正在paste的内容呢?
end;
procedure TNumeric.WMSetText(var msg: TWMSetText);
var
str , sv : string;
begin
try // 不管控件值发生什么样的变化,,都不能触发 WM_SETTEXT事件而到达这里面。
str := msg.Text;
strtofloat(str);
except
MessageBeep(0);
msg.Text := '';
end;
end;
合法的数字。
在控件的 OnkeyPress 可以很好地解决通过键盘输入的数据过滤问题。
但是我为了把从鼠标操作粘进来的数据进行检测,却不知怎么回事了。
遇到的问题如下:
1、在 WM_PASTE 发生时,能不能取得这时 paste 的内容啊?
2、是 TEdit 不支持 WM_SETTEXT 事件吗?我在组件代码里把这个消息的处理过程写
了,但是永远都发生不了 WM_SETTEXT 事件是怎么回事啊?
部分源代码如下:
TNumeric = class(TEdit)
private
{ Private declarations }
procedure Filter(Sender: TObject;var Key :Char);
procedure WMSetText(var msg: TWMSetText);message WM_SETTEXT;
procedure WMPaste(var msg: TWMPaste);message WM_PASTE;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent);override;
published
{ Published declarations }
end;
..............
procedure TNumeric.WMPaste(var msg: TWMPaste);
begin
// 在这里可不可以取得 正在paste的内容呢?
end;
procedure TNumeric.WMSetText(var msg: TWMSetText);
var
str , sv : string;
begin
try // 不管控件值发生什么样的变化,,都不能触发 WM_SETTEXT事件而到达这里面。
str := msg.Text;
strtofloat(str);
except
MessageBeep(0);
msg.Text := '';
end;
end;