目前做到个对应数据库字段为int类型的dbedit控件,当不屏蔽粘贴时,粘贴非数字时会报错,请问有什么办法?或者说自己定义报错的格式和内容
我试过在onchange,Exit,onkeypress,onkeydown事件里写过都没有成功,高分请大家帮忙!急,已上图

解决方案 »

  1.   

    那就把字段改一下~~~然后在onchange中叛断只有输入数字在显示
      

  2.   

    onkeydown
    if (key = v键 ) and (Shift = Ctrl键)
    try 
      dbedit.text:=剪贴版的内容
    except
      dbedit.text:=0;
    end;
    好久没用了,你改改看看可不可以!
      

  3.   

    试试在DATASOUCE的ONCHANG事件里试试看行不行。
      

  4.   

    brightyang :你的方法虽然可行,但我数据库表太多,如果要改的话太大而且用的是oracle,已经有很多数据了。
    love985 :可能你还没有理解我的意思,我是要让用户使用粘贴建,但不能让用户粘贴非数字的内容,而且我用的是dbedit控件,所有一粘贴错系统就会自动报错,我想设计个报错的提示框都有困难
    lbdragon:你的方法我试试看!如果可能分就给你了
    PS:继续等待更好的方法!
      

  5.   

    lbdragon:你的方法我也试过了还是不行
      

  6.   

       
      EDIT中的内容要改变的话一定要用到键盘了。   
      设一个标志当edit取得焦点时将该标志设为TRUE;   
      重载PreTranslateMessage()   
      if(pMsg->message==WM_KEYDOWN&&标志为TRUE)   
      {   
      .......................   
      }   
      这样就行了。
      

  7.   

    flashtong:不是很懂什么意思,能举个例子吗?
      

  8.   

    楼主,我下面是例子,你看看吧,在你的窗体上放几个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.
      

  9.   

    招聘 delphi 程序员(人数:2)
     毕业两年以上
     两年以上 delphi 工作经验
     熟悉 sql server 
     sql 编写能力突出者优先联系方式:
     深圳中普达科技有限公司
     0755 86170837
     请将简历发至 [email protected]
      

  10.   

    不好意思,最近比较忙,刚来看,flashtong我试试你的方法看,如果可以的话肯定送分
      

  11.   

    FLASHTONG,你的方法我试了下,达不到我的要的目的,照样可以复制粘贴非数字的。
    是不是有什么地方我还没有弄对,我把你的源码一模一样运行后不能达到只能复制粘贴的目的
      

  12.   

    呵呵,FLASHTONG,我把事件放在FROMCREATE里面好像有点可以的,先和小组队员讨论下,如果真能用的话再给分,等等哦
      

  13.   

    FLASHtong,你的源码对我们还是挺有帮助的,分就全给你了,别说少哦,因为我把我剩余所有的分都给你了
      

  14.   

    奇怪了送不了分,FLASHTONG或者达人帮我看下是什么原因,我已经截图了,谢谢