Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 493
  • Last Modified:

changing color font in disabled edit box

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
fadyg
Asked:
fadyg
  • 2
1 Solution
 
intheCommented:
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
 
fadygAuthor Commented:
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
 
intheCommented:
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

Industry Leaders: 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!

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now