//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'
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'
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;上面这样可以运行,不过不明白有什么用?
改为
procedure TForm1.editchange(sender:tobject;var Key: Char);//写你的窗体类名
然后再过程这样写
procedure Tsettingfrm.editchange(sender:tobject;var Key: Char);
to lincanwen(密码错误) 为何此处要加SELF?
另:现在此过程不能为EIDT的ONCHANGE事件共享了,为什么?
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;
begin
edit1.OnKeyDown:=myKeyDown;
edit2.OnKeyDown:=myKeyDown;
edit3.OnKeyDown:=myKeyDown;
end;
procedure TForm1.editchange(Sender: TObject; var Key: Char);
begin
if not (sender is tEdit) then
exit;
if ord(key)>128 then
key:=#0;
end;
不用刚才那么复杂。
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;
看看先,搞定就回帖,万分感谢: lincanwen(密码错误) 大大