我是指在封装基于 TEdit 的组件的时候.
目前它只会把其中的文字变成灰色,背景仍是白色的. 如果里面没有文字,那么看起来跟 Enabled=True 时没有两样,不便于提示用户.
谢谢指教!

解决方案 »

  1.   

    把color属性改成你想要的颜色不行了,比如灰色啊
      

  2.   

    edit1.Enabled := false;
    edit1.Color := clgray;
      

  3.   

    各位,这两句不是在同一个地方啊!
    edit1.Enabled := false; 是在实例的代码中写edit1.Color := clgray; 是在封装阶段写. 我的意思是,对这个新的组件,它自己能够根据其Enabled的状态来自动设置color.
      

  4.   

    可以用一个ActionLIst在他的Update事件里面 if not edit1.enabled then
                                                edit1.color := clgray
      

  5.   

    published Enabled: Boolean read FEnabled write SetEnabled;...
    procedure TmyEdit.SetEnabled(Value:Boolean);
    begin
      Enabled:=Value;
      if Enabled then
        Color:=clGray
      else
        Color:=clWhite;
      Repaint;
    end;
      

  6.   

    published
        property Enabled: Boolean read FEnabled write SetEnabled;编译到上面的第二行时出错,说:
    [Error] myEdit.pas(60): Field or method identifier expected
    procedure也不缺呀,不知总是在哪?
      

  7.   

    应该是enabled的名称不对,应为控件本身就有了这个属性
    你可以定义一个新的名字
    比如NewEnabled
    然后在读写操作里更改控件本身的enabled属性
      

  8.   

    我另加了一个属性  FEnabledNew ,对外称为 EnabledNew ,通过它来操纵Enabled,可以达到最初的目的了,也算是成功了吧。多谢各位!
    不过,不能直接操纵Enabled,还是有点遗憾。
      

  9.   

    截到WM_ENABLE消息就行了呀!
    wParam
    Specifies whether the window has been enabled or disabled. This parameter is TRUE if the window has been enabled or FALSE if the window has been disabled.
    lParam
    This parameter is not used.
      

  10.   

    TMyEdit = class(TEdit)
      ...
      procedure SetEnabled(Value: Boolean); override;
      ...
    end;procedure TMyEdit.SetEnabled;
    begin
      inherited;  if Value then
        Color := clWhite
      else
        Color := clGray;
    end;
      

  11.   

    按 lyre(大头鬼) 的指示,全部成功了.
    谢谢大家.结帖!