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.

Sobre Cristiano Martins

Programador Delphi desde 2000, desenvolvendo aplicações Client/Server. Colunista da Revista ActiveDelphi Membro Fundador do DUG-SP ( www.dug-sp.com ) Ver todos os artigos de Cristiano Martins

Os comentários estão desativados.