Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Изменить цвет неактивного TEdit

Delphi , Компоненты и Классы , TEdit

Изменить цвет неактивного TEdit

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{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.

Код предоставленного компонента TPBExEdit, который наследуется от TEdit. Он позволяет изменять цвет неактивированного (т.е., не включенного) редактора. Цвет можно изменить с помощью опубликованных свойств DisabledColor и DisabledTextColor.

Вот разбивка кода:

  1. Конструктор Create(aOwner: TComponent) переопределен для установки 기본ных значений для FDisabledColor и FDisabledTextColor.
  2. Процедуры SetDisabledColor и SetDisabledTextColor используются для изменения цвета при включении компонента.
  3. Процедура WMEraseBkGnd используется для переопределения отрисовки фона при включении компонента. Она заливает контроль указанным FDisabledColor.
  4. Процедура WMPaint используется для переопределения отрисовки текста при включении компонента. Она устанавливает цвет текста в FDisabledTextColor.

Чтобы использовать этот компонент, вам нужно создать экземпляр TPBExEdit, установить его свойства по необходимости и затем поместить его на форму.

Вот пример изменения цвета:

var
  MyEdit: TPBExEdit;
begin
  MyEdit := TPBExEdit.Create(nil);
  MyEdit.Parent := Form1;
  MyEdit.Width := 200;
  MyEdit.Height := 20;
  MyEdit.Enabled := false; // Отключает редактор
  MyEdit.DisabledColor := clRed; // Устанавливает фон в красный цвет
  MyEdit.DisabledTextColor := clBlue; // Устанавливает текст в синий цвет
end;

В этом примере компонент MyEdit создается и помещается на форму. Свойство Enabled устанавливается в false, чтобы отключить редактор. Затем свойства DisabledColor и DisabledTextColor устанавливаются для изменения цвета фона и текста, соответственно.

Изменить цвет неактивного TEdit можно за счет создания наследника класса TEdit и перерисовки его в момент деактивации.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TEdit ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:55:52/0.0038919448852539/0