Delphi 在StdCntrls单元中的TEdit类中重写默认的按键方法
避免输入单引号。但在编译项目时出错: [致命错误]StdCtrls.pas(1238):使用不同版本的StdCtrls.TEdit编译单元对话框Delphi 在StdCntrls单元中的TEdit类中重写默认的按键方法,delphi,Delphi,避免输入单引号。但在编译项目时出错: [致命错误]StdCtrls.pas(1238):使用不同版本的StdCtrls.TEdit编译单元对话框 VCL的源代码可以读取和调试,但许可证不允许您进行更改和分发这些更改(至少据我所知) 在您的情况下,如果希望在多个表单或项目中重用此控件,最好创建一个从TEdit(或TCustomEdit)派生的新控件。VCL的源代码可以读取和调试,但许可证不允许您进行更改和分发这些更改(至少据我所知) 在您的情况下,如果要在多个表单或项目中重用此控件,最好创建一个从
VCL的源代码可以读取和调试,但许可证不允许您进行更改和分发这些更改(至少据我所知)
在您的情况下,如果希望在多个表单或项目中重用此控件,最好创建一个从TEdit(或TCustomEdit)派生的新控件。VCL的源代码可以读取和调试,但许可证不允许您进行更改和分发这些更改(至少据我所知)
在您的情况下,如果要在多个表单或项目中重用此控件,最好创建一个从TEdit(或TCustomEdit)派生的新控件。只需编写一个
OnKeyPress
事件处理程序:
procedure TMyForm.EditNoSingleQuotes(Sender: TObject; var Key: Char);
begin
if Key = '''' then Key := #0;
end;
或者从TEdit
继承并覆盖KeyPress
方法:
procedure TMyEdit.KeyPress(var Key: Char);
begin
if Key = '''' then Key := #0;
inherited KeyPress(Key);
end;
只需编写一个
OnKeyPress
事件处理程序:
procedure TMyForm.EditNoSingleQuotes(Sender: TObject; var Key: Char);
begin
if Key = '''' then Key := #0;
end;
或者从TEdit
继承并覆盖KeyPress
方法:
procedure TMyEdit.KeyPress(var Key: Char);
begin
if Key = '''' then Key := #0;
inherited KeyPress(Key);
end;
您更改了StdCtrls单元的接口。这就要求所有使用它的单元也要重新编译,即使是Delphi提供的VCL单元。如果有一种方法可以在不修改德尔福单位的情况下实现目标,那就选择它 无需提供自己版本的StdCtrls.pas。您需要做的一切都可以通过继承基本
TEdit
控件来完成。几年前,下面的彼得演示了如何。您可以修改代码以接受除撇号以外的所有内容
简而言之,您可以这样做:
- 覆盖以拒绝不需要的键。证明了这一点
- 提供消息处理程序以从剪贴板中筛选不需要的字符
- 提供和消息处理程序,以过滤直接使用和属性时产生的不需要的字符
TEdit
控件来完成。几年前,下面的彼得演示了如何。您可以修改代码以接受除撇号以外的所有内容
简而言之,您可以这样做:
- 覆盖以拒绝不需要的键。证明了这一点
- 提供消息处理程序以从剪贴板中筛选不需要的字符
- 提供和消息处理程序,以过滤直接使用和属性时产生的不需要的字符