quinta-feira, 11 de setembro de 2008

Simular a nova propriedade HintText do Delphi2009

Olá Pessoal,

Fiquei muito entusiasmado com os novos recursos e componentes da VCL, e um deles que é de muita utilidade é a nova propriedade HintText presente no TEdit, ela permite que você defina um texto padrão a ser exibido no Edit quando a propriedade text não tiver nenhum valor.

Bom, como eu sei que nem todos podem migrar imediatamente e desfrutar desse novo recurso, resolvi demonstrar como é possível simular o HintText utilizando qualquer versão do Delphi.

Veja o exemplo:

unit uFormPadrao;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XPMan;

type
TFormPadrao = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure TextHintOnEnter(Sender: TObject);
procedure TextHintOnExit(Sender: TObject);
{ Private declarations }
public
{ Public declarations }
end;

var
FormPadrao: TFormPadrao;

implementation

{$R *.dfm}

Const
DefaultColor: TColor = clBlack;

procedure TFormPadrao.FormCreate(Sender: TObject);
var
i: Integer;
begin
for i := 0 to ComponentCount - 1 do
begin
if Components[i] is TEdit then
begin
TEdit(Components[i]).OnEnter := TextHintOnEnter;
TEdit(Components[i]).OnExit := TextHintOnExit;
TextHintOnExit(TEdit(Components[i]));
end;
end;
end;

procedure TFormPadrao.TextHintOnEnter(Sender: TObject) ;
begin
if Sender is TEdit then
begin
if TEdit(Sender).Text = TEdit(Sender).Hint then
TEdit(Sender).Text := EmptyStr;
TEdit(Sender).Font.Color := DefaultColor;
end;
end;

procedure TFormPadrao.TextHintOnExit(Sender: TObject) ;
begin
if Sender is TEdit then
begin
if TEdit(Sender).Text = EmptyStr then
begin
TEdit(Sender).Text := TEdit(Sender).Hint;
TEdit(Sender).Font.Color := clGray;
end;
end;
end;
end.

Para que todos os forms tenham a funcionalidade você pode criar um form Padrao e utilizar a herança para fazer o trabalho para você.

Veja o nosso exemplo funcionando:

Bom a única observação é que na hora de utilizar esse valor (seja para gravar no banco ou apenas exibir ao usuário) você deve verificar se o text é igual ao hint, se estiver igual significa que Text está vazio.

É isso ai! um grande abraço a todos.

1 comentários:

Luciano Paranhos disse...

Muito Bom!

Testei aqui e funcionou muito Bem!

Obrigado. Vou tentar fazer isso com uma Combobox.