把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都可以了
我给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都可以了
解决方案 »
- Delphi程序有错误,编译的时候不提示,为什么?
- 如何在外部程序中分配 tstringlist的空间
- dbgrid输出到word!
- 简单问题一个,请大家解决?
- 请问谁知道UltraEdit中怎么操作实现与Delphi中全部左移或右移的方法?
- 在DataSet的动态字段中怎样定义此事件?
- 参与有分:把xml文件装换成表格形式出错?
- shr,xor,这些东东代表何意,谢谢!
- 求救:在TStringgrid的OnSelectCell事件中如何得到目前鼠标点击的行数和列数?
- 请问如何动态修改网关(不需重新启动,立即生效!)
- 为什么我的IdTCPClient传输文件后文件的内容不一样的,但大小却没有变化!
- 报表的外部自定义函数问题
如果你不想修改原来的程序这么写,建立一个新的unit MyTEdit
unit Unit2;interfaceUses
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;
…………
否则你必须引入其他的属性来描述记载这东西,这对于兼容不是个好办法。如果你下定决心,自己重新完善一下这个控件,你还是从TCustomEdit继承一个。Color是从TControl继承下来的,想彻底修改它比较复杂。