Sur des versions de Windows plus tard puis Win95, vous pouvez sous-classe une commande d'édition à
arrêter le message de WM_CTLCOLOREDIT (pour TEdit, il serait
CN_CTLCOLOREDIT à la place) et renvoient une brosse qui est créée d'une carte binaire.
Vous pouvez alors dessiner une carte binaire de quelque type d'affichage de progrès vous vouliez.
Voici un exemple simple :
TForm1 = classe (TForm)
édité
Edit1 : TEdit ;
Timer1 : TTimer ;
procédé FormCreate (expéditeur : TObject)
procédé Timer1Timer (expéditeur : TObject) ;
privé
OldWndProc : TWndMethod ;
procédé EditWndProc (message de variété : TMessage) ;
extrémité ;
procédé TForm1.FormCreate (expéditeur : TObject) ;
commencer
OldWndProc : = Edit1.WindowProc ;
Edit1.WindowProc : = EditWndProc ;
extrémité ;
procédé TForm1.EditWndProc (message de variété : TMessage) ;
variété
BMP : TBitmap ;
r : TRect ;
oldRight : Nombre entier ;
commencer
si Message.Msg = puis CN_CTLCOLOREDIT
commencer
Windows.SetTextColor (Message.WParam,
ColorToRGB (Edit1.Font.Color));
Window.SetBkMode (Message.WParam, TRANSPARENTS) ;
BMP : = TBitmap.Create ;
essai
r : = Edit1.ClientRect ;
BMP. Largeur : = (r.Right - r.Left) ;
BMP. Taille : = (r.Bottom - r.Top) ;
si Edit1.Tag > 0 puis
commencer
oldRight : = r.Right ;
r.Right : = r.Left + ((r.Right - r.Left) *
(Prolongé) (d'Edit1->Tag/100) ;
BMP. Canvas.Brush.Color : = clAqua ;
BMP. Canvas.FillRect (r) ;
r.Left : = r.Right ;
r.Right : = oldRight ;
extrémité ;
BMP. Canvas.Brush.Color : = Edit1.Color ;
BMP. Canvas.FillRect (r) ;
Message.Result : = Windows.CreatePatternBrush (BMP. Poignée) ;
finalement
BMP. Libre ;
extrémité ;
Sortie ;
extrémité ;
OldWndProc (message) ;
extrémité ;
procédé TForm1.Timer1Timer (expéditeur : TObject) ;
commencer
// I Timer1.Interval réglés à 50ms…
si >= 100 d'Edit1.Tag puis
Edit1.Tag : = 0
autrement
Edit1.Tag : = Edit1.Tag + 1 ;
Edit1.Invalidate ;
extrémité ;