Solved

changing color font in disabled edit box

Posted on 1998-12-28
3
473 Views
Last Modified: 2013-12-03
Hi,
is there a way of changing the color of the font in a disabled tedit control? i.e is it possible to have the contents displayed in something different than the grey color to show a disabled status ? (for ex: I want red font over white background when control is disabled)
0
Comment
Question by:fadyg
  • 2
3 Comments
 
LVL 17

Accepted Solution

by:
inthe earned 50 total points
ID: 1353448
yes but it's quite tricky .
i post a component for you to to it cut n paste and save as DiscEdit.Pas then install component it will be on samples pallette :

unit DisCEdit;

interface

uses
  WinTypes, WinProcs, Messages, SysUtils, Classes, Graphics, Controls,
  StdCtrls;

type
  TDisabledColorEdit = class(Tedit)
  private
    { Private declarations }
    FEnabled: Boolean;
    FDisabledColor: Tcolor;
    FDisabledFontColor: TColor;
    FOldColor, FOldFontColor: TColor;

    Procedure SetEnabled( value: Boolean );
    Procedure SetDisabledColor( value: TColor );
    Procedure SetDisabledFontColor( value: TColor );
    Procedure SetReadOnly( value: Boolean );
    Function GetReadOnly: Boolean;
  protected
    { Protected declarations }
  public
    { Public declarations }

    Constructor Create( aOwner: TComponent ); override;
  published
    { Published declarations }

    property Enabled: Boolean read FEnabled write SetEnabled default true;
    property ReadOnly: Boolean read GetReadOnly write SetReadOnly default
false;
    property DisabledColor: TColor read FDisabledColor write
SetDisabledColor;
    property DisabledFontColor: TColor read FDisabledFontColor write
SetDisabledFontColor;
  end;

procedure Register;

implementation

 Constructor TDisabledColorEdit.Create( aOwner: TComponent );
 Begin
   FEnabled := True;
   FDisabledColor := clWindowText;
   FDisabledFontColor := clGrayText;
   inherited Create( aOwner );
 End;

 Procedure TDisabledColorEdit.SetEnabled( value: Boolean );
 Begin
   If FEnabled <> value Then Begin
     inherited ReadOnly := not value;
     FEnabled := value;
     If value Then Begin
       Color := FOldColor;
       Font.Color := FOldFontColor;
     End
     Else Begin
       FOldColor := Color;
       FOldFontColor := Font.Color;
       Color := FDisabledColor;
       Font.Color := FDisabledFontColor;
     End;
   End;
 End;

 Procedure TDisabledColorEdit.SetDisabledColor( value: TColor );
 Begin
   If FDisabledColor <> value Then Begin
     If not FEnabled Then
       Color := value;
     FDisabledColor := value;
   End;
 End;

 Procedure TDisabledColorEdit.SetDisabledFontColor( value: TColor );
 Begin
   If FDisabledFontColor <> value Then Begin
     If not FEnabled Then
       Font.Color := value;
     FDisabledFontColor := value;
   End;
 End;

 Procedure TDisabledColorEdit.SetReadOnly( value: Boolean );
 Begin
   If FEnabled Then
     inherited ReadOnly := value;
 End;

 Function TDisabledColorEdit.GetReadOnly: Boolean;
 Begin
   result := inherited ReadOnly;
 End;

procedure Register;
begin
  RegisterComponents('Samples', [TDisabledColorEdit]);
end;

end.

0
 

Author Comment

by:fadyg
ID: 1353449
thanks for your reply,
your component would work correctly but this would give me a control that can get the focus (even though you won't be able to change anything because it's a read-only).  What is needed is the exact same behaviour as diabled i.e. no focus.

any ideas ?
0
 
LVL 17

Expert Comment

by:inthe
ID: 1353450
ok to try this put my comp on a form and a button
give my comp some disabledcolors then on button click type this:

SetWindowLong(DisabledColorEdit1.Handle,GWL_STYLE,
    GetWindowLong(DisabledColorEdit1.Handle,GWL_STYLE) or WS_DISABLED);
DisabledColorEdit1.Enabled:=False;

this will stop it from recieving focus
if you want it to recieve focus type this:

SetWindowLong(DisabledColorEdit1.Handle,GWL_STYLE,
    GetWindowLong(DisabledColorEdit1.Handle,GWL_STYLE) and not WS_DISABLED);

Regards Barry



0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Hello everybody This Article will show you how to validate number with TEdit control, What's the TEdit control? TEdit is a standard Windows edit control on a form, it allows to user to write, read and copy/paste single line of text. Usua…
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…

680 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question