Sulle versioni di Windows più successivamente allora Win95, potete sottoclasse di casella di modifica a
intercettare il messaggio di WM_CTLCOLOREDIT (per TEdit, sarebbe
CN_CTLCOLOREDIT preferibilmente) e restituiscono una spazzola che è generata da una bitmap.
Potete allora disegnare una bitmap di che cosa tipo di esposizione di progresso volete.
Qui è un esempio semplice:
TForm1 = codice categoria (TForm)
pubblicato
Edit1: TEdit;
Timer1: TTimer;
procedura FormCreate (mittente: TObject)
procedura Timer1Timer (mittente: TObject);
riservato
OldWndProc: TWndMethod;
procedura EditWndProc (messaggio di varietà: TMessage);
estremità;
procedura TForm1.FormCreate (mittente: TObject);
cominciare
OldWndProc: = Edit1.WindowProc;
Edit1.WindowProc: = EditWndProc;
estremità;
procedura TForm1.EditWndProc (messaggio di varietà: TMessage);
varietà
bmp: TBitmap;
r: TRect;
oldRight: Numero intero;
cominciare
se Message.Msg = CN_CTLCOLOREDIT allora
cominciare
Windows.SetTextColor (Message.WParam,
ColorToRGB (Edit1.Font.Color));
Window.SetBkMode (Message.WParam, TRASPARENTI);
bmp: = TBitmap.Create;
prova
r: = Edit1.ClientRect;
bmp. Larghezza: = (r.Right - r.Left);
bmp. Altezza: = (r.Bottom - r.Top);
se Edit1.Tag > 0 allora
cominciare
oldRight: = r.Right;
r.Right: = r.Left + ((r.Right - r.Left) *
(Esteso)/100 (di Edit1->Tag);
bmp. Canvas.Brush.Color: = clAqua;
bmp. Canvas.FillRect (r);
r.Left: = r.Right;
r.Right: = oldRight;
estremità;
bmp. Canvas.Brush.Color: = Edit1.Color;
bmp. Canvas.FillRect (r);
Message.Result: = Windows.CreatePatternBrush (bmp. Maniglia);
infine
bmp. Libero;
estremità;
Uscita;
estremità;
OldWndProc (messaggio);
estremità;
procedura TForm1.Timer1Timer (mittente: TObject);
cominciare
// I Timer1.Interval stabiliti a 50ms…
se >= 100 di Edit1.Tag allora
Edit1.Tag: = 0
altrimenti
Edit1.Tag: = Edit1.Tag + 1;
Edit1.Invalidate;
estremità;