Edit的enable问题

tomzhou 2003-12-08 10:01:34
把edit的enable属性置为false的时候,仅仅只是将font的颜色变了,但是edit的背景颜色没有变化。如果edit中没有字的话,就看不出区别,用户容易误会。

setenable是TControl的一个保护方法,调用的是Perform(CM_ENABLEDCHANGED, 0, 0);
我给TControl增加了一个ffcolor的私有变量,在setenable中增加了一段
if FEnabled then
FColor:= FFColor
else
FColor:= clBtnFace;

ffcolor在setcolor方法中,保持与fcolor一致


但是TControl.pas编译不通过
报错: unit forms was compiled with a diffrent version of Controls.TWinControl

如何解决, 我想直接修改vcl实现,设置enable属性的时候,背景颜色跟着改变,这样TMemo,TComboBox都可以了
...全文
175 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
delphiseabird 2003-12-08
  • 打赏
  • 举报
回复
从父类自己继承一个类 再实现自己的功能
sixgj 2003-12-08
  • 打赏
  • 举报
回复
%
tomzhou 2003-12-08
  • 打赏
  • 举报
回复
谢谢各位了
flora1984 2003-12-08
  • 打赏
  • 举报
回复
最好不要直接修改VCL的代码,你直接新建一个组件继承自它就是了。。。
saien 2003-12-08
  • 打赏
  • 举报
回复
继承下来再说
耙子 2003-12-08
  • 打赏
  • 举报
回复
你不能通过修改字体的颜色方式吗?比如把字体变红。
否则你必须引入其他的属性来描述记载这东西,这对于兼容不是个好办法。

如果你下定决心,自己重新完善一下这个控件,你还是从TCustomEdit继承一个。Color是从TControl继承下来的,想彻底修改它比较复杂。
tomzhou 2003-12-08
  • 打赏
  • 举报
回复
pazee(耙子) 谢谢你的回答,但是有一个问题

这样的edit我就只能改变一次颜色了。

比如在输入中 我发现输入的是负数 颜色改变为clred, 然后设置了enable属性

下次输入中 输入的是正数, 颜色改变为clwindow, 这时如果设置enable属性 ,则颜色会变为clred, 如何解决?
耙子 2003-12-08
  • 打赏
  • 举报
回复
更简单的办法
如果你不想修改原来的程序这么写,

建立一个新的unit MyTEdit
unit Unit2;

interface

Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, StdCtrls;


type
TEdit= Class(StdCtrls.TEdit)
private
FColor: TColor;
protected
procedure SetEnabled(Value: Boolean); override;
end;


implementation

{ TEdit }
procedure TEdit.SetEnabled(Value: Boolean);
begin
inherited;
if FColor=0 then
FColor:= Self.Color;
if Value then
Self.Color:= FColor
else
Self.Color:= clBtnFace;
end;

end.

然后在你的正常程序里面

interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, MyTEdit;
//. ~~~~~~~~~
这个MyTEdit一定要写在 StdCtrls 之后
然后你再看看

type
TForm1 = class(TForm)
Button1: TButton;
DBGrid1: TDBGrid;
Edit1: TEdit;
…………
耙子 2003-12-08
  • 打赏
  • 举报
回复
直接修改VCL代码会有很多问题,建议你还是自己从TCustomEdit继承一个下来,这样比较简单,而且还有一个更好的办法,我给你写个例子,等等
daemonking 2003-12-08
  • 打赏
  • 举报
回复
很多的地方又应用了TControl所在单元,需要都重新编译把?
tomzhou 2003-12-08
  • 打赏
  • 举报
回复
我想直接修改vcl实现,设置enable属性的时候,背景颜色跟着改变,这样TMemo,TComboBox都可以了

每个都去写太麻烦

而且 setcolor是Tcontrol的私有方法

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧