zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    HDU 3944 DP? (Lucas定理)
    Gym 100548F Color (数论容斥原理+组合数)
    Gym 100548K Last Defence (数论)
    Gym 100548A Built with Qinghuai and Ari Factor (水题)
    npx命令
    开源许可证(转载)
    CMD命令
    学习ES6的全部特性
    深入浅出数据库索引(转)
    .net基础总复习(3)
  • 原文地址:https://www.cnblogs.com/honeynm/p/4184480.html
Copyright © 2011-2022 走看看