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.

  • 相关阅读:
    vue自定义指令
    ZOJ Problem Set–2104 Let the Balloon Rise
    ZOJ Problem Set 3202 Secondprice Auction
    ZOJ Problem Set–1879 Jolly Jumpers
    ZOJ Problem Set–2405 Specialized FourDigit Numbers
    ZOJ Problem Set–1874 Primary Arithmetic
    ZOJ Problem Set–1970 All in All
    ZOJ Problem Set–1828 Fibonacci Numbers
    要怎么样调整状态呢
    ZOJ Problem Set–1951 Goldbach's Conjecture
  • 原文地址:https://www.cnblogs.com/honeynm/p/4184480.html
Copyright © 2011-2022 走看看