Изменить цвет неактивного TEditDelphi , Компоненты и Классы , TEditИзменить цвет неактивного TEdit
Оформил: DeeCo {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. Код предоставленного компонента Вот разбивка кода:
Чтобы использовать этот компонент, вам нужно создать экземпляр Вот пример изменения цвета:
В этом примере компонент Изменить цвет неактивного TEdit можно за счет создания наследника класса TEdit и перерисовки его в момент деактивации. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |