楼主,我下面是例子,你看看吧,在你的窗体上放几个edit看看吧. 无论是键盘还是粘帖都只能是数字, 如果你看不懂这写代码,我就没办法帮你,你得好好去看看书了 还有,如果能够实现你的功能,还记得给分啊. unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Clipbrd;type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; procedure FormShow(Sender: TObject); private public end;var Form1: TForm1;type TEditLmt = class(TComponent) private NowEdit: TEdit; OldEditWndProc: TWndMethod; procedure NewEditWndProc(var message: TMessage); public end;implementation{$R *.dfm}procedure TEditLmt.NewEditWndProc(var message: TMessage); var CBStr: string; i: Integer; const allowChar = [48..57, 45, 46, 3, 8, 22, 24, 26]; begin case message.Msg of wm_char: //¼üÅÌÊäÈë begin with message do begin if wparam in allowChar then OldEditWndProc(message); end; end; wm_paste: //¸´ÖƽøÈëµÄ begin CBStr := clipboard.AsText; for i := 1 to length(CBStr) do begin if not (ord(cbstr[i]) in allowChar) then break; end; if i = length(CBStr) + 1 then OldEditWndProc(message); end; else OldEditWndProc(message); end; end;procedure TForm1.FormShow(Sender: TObject); var i: integer; begin for i := 0 to self.ComponentCount - 1 do begin if self.Components[i] is TEdit then begin with TEditLmt.Create(self) do begin NowEdit := (self.Components[i] as TEdit); OldEditWndProc := NowEdit.WindowProc; NowEdit.WindowProc := NewEditWndProc; end; end; end; end;end.
if (key = v键 ) and (Shift = Ctrl键)
try
dbedit.text:=剪贴版的内容
except
dbedit.text:=0;
end;
好久没用了,你改改看看可不可以!
love985 :可能你还没有理解我的意思,我是要让用户使用粘贴建,但不能让用户粘贴非数字的内容,而且我用的是dbedit控件,所有一粘贴错系统就会自动报错,我想设计个报错的提示框都有困难
lbdragon:你的方法我试试看!如果可能分就给你了
PS:继续等待更好的方法!
EDIT中的内容要改变的话一定要用到键盘了。
设一个标志当edit取得焦点时将该标志设为TRUE;
重载PreTranslateMessage()
if(pMsg->message==WM_KEYDOWN&&标志为TRUE)
{
.......................
}
这样就行了。
无论是键盘还是粘帖都只能是数字,
如果你看不懂这写代码,我就没办法帮你,你得好好去看看书了
还有,如果能够实现你的功能,还记得给分啊.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Clipbrd;type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
procedure FormShow(Sender: TObject);
private
public
end;var
Form1: TForm1;type TEditLmt = class(TComponent)
private
NowEdit: TEdit;
OldEditWndProc: TWndMethod;
procedure NewEditWndProc(var message: TMessage);
public end;implementation{$R *.dfm}procedure TEditLmt.NewEditWndProc(var message: TMessage);
var CBStr: string;
i: Integer;
const
allowChar = [48..57, 45, 46, 3, 8, 22, 24, 26];
begin
case message.Msg of
wm_char: //¼üÅÌÊäÈë
begin
with message do
begin
if wparam in allowChar then
OldEditWndProc(message);
end;
end;
wm_paste: //¸´ÖƽøÈëµÄ
begin
CBStr := clipboard.AsText;
for i := 1 to length(CBStr) do
begin
if not (ord(cbstr[i]) in allowChar) then break;
end;
if i = length(CBStr) + 1 then
OldEditWndProc(message);
end;
else OldEditWndProc(message);
end;
end;procedure TForm1.FormShow(Sender: TObject);
var i: integer;
begin
for i := 0 to self.ComponentCount - 1 do
begin
if self.Components[i] is TEdit then
begin
with TEditLmt.Create(self) do
begin
NowEdit := (self.Components[i] as TEdit);
OldEditWndProc := NowEdit.WindowProc;
NowEdit.WindowProc := NewEditWndProc;
end;
end;
end;
end;end.
毕业两年以上
两年以上 delphi 工作经验
熟悉 sql server
sql 编写能力突出者优先联系方式:
深圳中普达科技有限公司
0755 86170837
请将简历发至 [email protected]
是不是有什么地方我还没有弄对,我把你的源码一模一样运行后不能达到只能复制粘贴的目的