//editchange为自定义过程,为多个EDIT的ONCHANGE事件共享
procedure editchange(sender:tobject;var Key: Char);
var i:integer;
begin
for i:=0 to controlcount -1 do
begin
if controls[i] is tedit then
begin
if ord(key)>128 then
key:=#0;
end;
end;
end;
编译出错。
[Error] Unit7.pas(98): Undeclared identifier: 'controlcount'
[Error] Unit7.pas(100): '.' expected but '[' found
[Error] Unit7.pas(100): Operator not applicable to this operand type
[Error] Unit7.pas(58): Unsatisfied forward or external declaration: 'Tsettingfrm.editchange'

解决方案 »

  1.   

    procedure Tform1.editchange(sender:tobject;var Key: Char);
    var i:integer;
    begin
        for i:=0 to self.ComponentCount -1 do
        begin
            if self.controls[i] is tedit then
            begin
                if ord(key)>128 then
                    key:=#0;
            end;
        end;
    end;上面这样可以运行,不过不明白有什么用?
      

  2.   

    procedure editchange(sender:tobject;var Key: Char);
    改为
    procedure TForm1.editchange(sender:tobject;var Key: Char);//写你的窗体类名
      

  3.   

    先申明一下该自定义过程
    然后再过程这样写
    procedure Tsettingfrm.editchange(sender:tobject;var Key: Char);
      

  4.   

    改了,编译可过了
    to  lincanwen(密码错误) 为何此处要加SELF?
    另:现在此过程不能为EIDT的ONCHANGE事件共享了,为什么?
      

  5.   

    我的想法是将此过程共享多个EDIT的ONCHANGE事件,如果输入非数字和E文字符,就不显示了
      

  6.   

    是不是这样的呢?
    procedure TForm1.myKeyDown(Sender: TObject; var Key: Word;
        Shift: TShiftState);
    begin
        (Sender as Tedit).readonly:=true;
        if ((key>=48) and (key<=57)) or ((key>=65) and (key<=90)) then
        (Sender as Tedit).readonly:=false;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
        edit1.OnKeyDown:=myKeyDown;
    end;
      

  7.   

    procedure TForm1.FormCreate(Sender: TObject);
    begin
        edit1.OnKeyDown:=myKeyDown;
        edit2.OnKeyDown:=myKeyDown;
        edit3.OnKeyDown:=myKeyDown;
    end;
      

  8.   

    应该将edit 的Edit1KeyPress事件设置为你的这个过程,Onchange只有一个参数,而你的这个过程有2个参数,当然不可以了。现在知道你的意思了。将edit 的Edit1KeyPress事件设置为editchange,你的程序可以改成:
    procedure TForm1.editchange(Sender: TObject; var Key: Char);
    begin
        if not (sender is tEdit) then
           exit;
        if ord(key)>128 then
           key:=#0;
    end;
    不用刚才那么复杂。
      

  9.   

    不过如果运行的时候在edit中右键,然后粘贴呢?
      

  10.   

    1.对付右键:设一个空字符的menu1,让edit1的popupmenu=menu1
    2.对付ctrl+v:
    procedure TForm1.myKeyDown(Sender: TObject; var Key: Word;
        Shift: TShiftState);
    begin
        (Sender as Tedit).readonly:=true;
        if (key=86) and (ssCtrl in Shift) then exit;
        if ((key>=48) and (key<=57)) or ((key>=65) and (key<=90)) then
        (Sender as Tedit).readonly:=false;
    end;
      

  11.   

    老大们,不好意思,出去玩去了!!
    看看先,搞定就回帖,万分感谢: lincanwen(密码错误) 大大