TComboBox=class(StdCtrls.TComboBox)
protected
  procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
end;
procedure TComboBox.WMPaint(var Message: TWMPaint);
var
  EC:TControlCanvas;
begin
  inherited;
  if Self.Enabled = False then
  begin
    EC:= TControlCanvas.Create;
    EC.Handle:= GetDC(Self.Handle);
    EC.Font:= Self.Font;
    EC.Brush:= Self.Brush;
    Ec.TextOut(3,3,Self.Text);
    ReleaseDC(Self.Handle,EC.Handle);
    EC.Free;
  end;
end;我断点跟踪能运行到指定的代码。但是效果没有出来!大虾帮帮忙!

解决方案 »

  1.   

    看不出什么问题,你在哪写的,不会窗体单元吧,如果是别用self,新建立一个单元试试
      

  2.   

    我就在放TCOMBOBOX的窗体里写的。我本意是想把Enabled为FALSE的字体颜色改成他本身的颜色。所以重画他的Canvas。
      

  3.   

    TcomboBox其实是windows的标准控件的封装,使用wm_paint消息没有用。你可以使用windows的控件超类方法,或实用控件的自绘图消息wm_drawitem和wm_measrueitem.
      

  4.   

    TO:wisdosoft 
    你说的方法我没有用过。能不能给点语句。谢谢了
      

  5.   

      TComboBoxEx = class(TComboBox)
      protected
        procedure CreateWnd; override;
        procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
      end;procedure TComboBoxEx.CreateWnd;
    begin
      inherited;
      if FEditHandle <> 0 then EnableWindow(FEditHandle, True);
    end;procedure TComboBoxEx.CMEnabledChanged(var Message: TMessage);
    begin
      inherited;
      if FEditHandle <> 0 then EnableWindow(FEditHandle, True);
    end;
      

  6.   

    谢谢 lake_cx !你给出的方法是我没有想到的。用激活它的方法来实现!再次谢谢!
    不过还有个问题,当TCOMBOBOX的STYLE设置为csDropDownList的时候!没有效果,是不是当csDropDownList模式的时候没有输入焦点的原因!