En su momento también necesite un código parecido, en mi caso no cambio el tipo de letra cuando el control está activo pero si el color del mismo permitiendo su selección desde el inspector de objetos.
Por otro lado, cómo la aplicación era de tamaño físicamente reducido decidí cargarme las etiquetas de cada TEdit y para que se supiera que era cada componente, decidí añadir una propiedad más
DefaultValue que sirve para mostrar un texto por defecto en el caso que el usuario al salir del TEdit lo deje vacío (previamente tengo que decir que al entrar en el TEdit el text por defecto se borra para permitir al usuario introducir el valor que el quiera o no en función de la propiedad ClearOnEnter).
Os dejo mi código:
Código Delphi
[-]
unit AdvEdit;
interface
uses
SysUtils, Classes, Controls, StdCtrls, Graphics;
type
TAdvEdit = class(TEdit)
private
FDefault : string;
FChanged : boolean;
FColor : TColor;
FOldColor : TColor;
FClear: boolean;
protected
function getDefault : string; virtual;
procedure setDefault(AValue:string); virtual;
procedure DoEnter; override;
procedure DoExit; override;
public
procedure Cls;
function getChanges : boolean;
published
property DefaultValue : string read getDefault write setDefault;
property ActiveColor : TColor read FColor write FColor;
property ClearOnEnter : boolean read FClear write FClear;
end;
procedure Register;
implementation
uses MaskUtils;
procedure Register;
begin
RegisterComponents('Meus', [TAdvEdit]);
end;
procedure TAdvEdit.Cls;
begin
Text := DefaultValue;
FChanged := FALSE;
Change
end;
procedure TAdvEdit.DoEnter;
begin
FOldColor := Color;
Color := ActiveColor;
if ((Text = DefaultValue) AND (FClear)) then Text := '';
inherited;
end;
procedure TAdvEdit.DoExit;
begin
if ((Text = '') OR (Text = Self.DefaultValue)) then begin
Self.Text := Self.DefaultValue;
Self.FChanged := FALSE;
end
else
Self.FChanged := TRUE;
Color := FOldColor;
inherited;
end;
function TAdvEdit.getChanges: boolean;
begin
getChanges := FChanged;
end;
function TAdvEdit.getDefault: string;
begin
getDefault := FDefault;
end;
procedure TAdvEdit.setDefault(AValue: string);
begin
FDefault := AValue;
end;
end.
Espero que alguien más a parte de mi pueda encontrar utilidad este "componente".
Un saludo y gracias a todos.