Em versões de Windows mais tarde então Win95, você pode subclass um controle de edição a
interceptar a mensagem de WM_CTLCOLOREDIT (para TEdit, seria
CN_CTLCOLOREDIT preferivelmente) e retornam uma escova que seja criada de um bitmap.
Você pode então extrair um bitmap do que tipo de exposição do progresso você quer.
Está aqui um exemplo simples:
TForm1 = classe (TForm)
publicado
Edit1: TEdit;
Timer1: TTimer;
procedimento FormCreate (remetente: TObject)
procedimento Timer1Timer (remetente: TObject);
confidencial
OldWndProc: TWndMethod;
procedimento EditWndProc (mensagem do var: TMessage);
extremidade;
procedimento TForm1.FormCreate (remetente: TObject);
começar
OldWndProc: = Edit1.WindowProc;
Edit1.WindowProc: = EditWndProc;
extremidade;
procedimento TForm1.EditWndProc (mensagem do var: TMessage);
var
bmp: TBitmap;
r: TRect;
oldRight: Inteiro;
começar
se Message.Msg = CN_CTLCOLOREDIT então
começar
Windows.SetTextColor (Message.WParam,
ColorToRGB (Edit1.Font.Color));
Window.SetBkMode (Message.WParam, TRANSPARENTES);
bmp: = TBitmap.Create;
tentativa
r: = Edit1.ClientRect;
bmp. Largura: = (r.Right - r.Left);
bmp. Altura: = (r.Bottom - r.Top);
se Edit1.Tag > 0 então
começar
oldRight: = r.Right;
r.Right: = r.Left + ((r.Right - r.Left) *
(Estendido) (de Edit1->Tag/100);
bmp. Canvas.Brush.Color: = clAqua;
bmp. Canvas.FillRect (r);
r.Left: = r.Right;
r.Right: = oldRight;
extremidade;
bmp. Canvas.Brush.Color: = Edit1.Color;
bmp. Canvas.FillRect (r);
Message.Result: = Windows.CreatePatternBrush (bmp. Punho);
finalmente
bmp. Livre;
extremidade;
Saída;
extremidade;
OldWndProc (mensagem);
extremidade;
procedimento TForm1.Timer1Timer (remetente: TObject);
começar
// I Timer1.Interval ajustados a 50ms…
se >= 100 de Edit1.Tag então
Edit1.Tag: = 0
mais
Edit1.Tag: = Edit1.Tag + 1;
Edit1.Invalidate;
extremidade;