• change the color of a disabled TEdit?


    change the color of a disabled TEdit?

    Author: P. Below 

    Category: VCL

    {Question:
    How can I change the color of a disabled (Edit1.Enabled := false;) control?
    I do not want the normal grey color.

    Answer:
    Two options:

    1) place the control on a panel and disable the panel instead of the control.
    This way the color stays to whatever you set it.

    2) make a descendent and take over the painting when it is disabled.

    Here is an example:}


    unit PBExEdit;

    interface

    uses
      
    Windows, Messages, SysUtils, Classes, Graphics, Controls,
      Forms, Dialogs, StdCtrls;

    type
      
    TPBExEdit = class(TEdit)
      private
        
    { Private declarations }
        
    FDisabledColor: TColor;
        FDisabledTextColor: TColor;
        procedure WMPaint(var msg: TWMPaint); message WM_PAINT;
        procedure WMEraseBkGnd(var msg: TWMEraseBkGnd); message WM_ERASEBKGND;
        procedure SetDisabledColor(const Value: TColor); virtual;
        procedure SetDisabledTextColor(const Value: TColor); virtual;
      protected
        
    { Protected declarations }
      
    public
        
    { Public declarations }
        
    constructor Create(aOwner: TComponent); override;
      published
        
    { Published declarations }
        
    property DisabledTextColor: TColor read FDisabledTextColor
          write SetDisabledTextColor default clGrayText;
        property DisabledColor: TColor read FDisabledColor
          write SetDisabledColor default clWindow;
      end;

    procedure Register;

     implementation

    procedure Register
    ;
    begin
      
    RegisterComponents('PBGoodies', [TPBExEdit]);
    end;


    constructor TPBExEdit.Create(aOwner: TComponent);
    begin
      inherited
    ;
      FDisabledColor := clWindow;
      FDisabledTextColor := clGrayText;
    end;


    procedure TPBExEdit.SetDisabledColor(const Value: TColor);
    begin
      if 
    FDisabledColor <> Value then
      begin
        
    FDisabledColor := Value;
        if not Enabled then
          
    Invalidate;
      end;
    end;


    procedure TPBExEdit.SetDisabledTextColor(const Value: TColor);
    begin
      if 
    FDisabledTextColor <> Value then
      begin
        
    FDisabledTextColor := Value;
        if not Enabled then
          
    Invalidate;
      end;
    end;


    procedure TPBExEdit.WMEraseBkGnd(var msg: TWMEraseBkGnd);
    var
      
    Canvas: TCanvas;
    begin
      if 
    Enabled then
        inherited
      else
      begin
        
    Canvas:= TCanvas.Create;
        try
          
    Canvas.Handle := msg.DC;
          SaveDC(msg.DC);
          try
            
    canvas.Brush.Color := FDisabledColor;
            canvas.Brush.Style := bsSolid;
            canvas.Fillrect(clientrect);
            msg.Result := 1;
          finally
            
    RestoreDC(msg.DC, - 1);
          end;
        finally
          
    canvas.free
        end;
      end;
    end;


    procedure TPBExEdit.WMPaint(var msg: TWMPaint);
    var
      
    Canvas: TCanvas;
      ps: TPaintStruct;
      CallEndPaint: Boolean;
    begin
      if 
    Enabled then
        inherited
      else
      begin
        
    CallEndPaint := False;
        Canvas:= TCanvas.Create;
        try
          if 
    msg.DC <> 0 then
          begin
            
    Canvas.Handle := msg.DC;
            ps.fErase := true;
          end
          else
          begin
            
    BeginPaint(Handle, ps);
            CallEndPaint:= True;
            Canvas.handle := ps.hdc;
          end;
          if ps.fErase then
            
    Perform(WM_ERASEBKGND, Canvas.Handle, 0);
          SaveDC(canvas.handle);
          try
            
    Canvas.Brush.Style := bsClear;
            Canvas.Font := Font;
            Canvas.Font.Color := FDisabledTextColor;
            Canvas.TextOut(1, 1, Text);
          finally
            
    RestoreDC(Canvas.Handle, - 1);
          end;
        finally
          if 
    CallEndPaint then
            
    EndPaint(handle, ps);
          Canvas.Free
        end;
      end;
    end;

    end.

  • 相关阅读:
    淘宝技术分享
    15个富有创意的单页设计
    jQuery全能图片滚动插件
    jquery性能优化
    Algs4-1.4.40随机输入3-sum问题
    Algs4-1.4.39 改进倍率测试的精度
    Algs4-1.4.38 3-sum的初级算法与ThreeSum性能比较
    Algs4-1.4.37自动装箱的性能代价
    Algs4-1.4.35下压栈的时间成本
    Algs4-1.4.36下压栈的空间成本
  • 原文地址:https://www.cnblogs.com/honeynm/p/4184480.html
Copyright © 2020-2023  润新知