På versioner av Windows mer sistnämnd därefter Win95, du kan subclassen en redigera kontrollera till
fånga upp WM_CTLCOLOREDIT-meddelandet (för TEdit, den skulle är
CN_CTLCOLOREDIT i stället) och går en borsta tillbaka som skapas från en bitmap.
Du kan därefter dra en bitmap av, allt vad typ av framstegskärm som du önskar.
Är här ett enkelt exempel:
TForm1 = klassificerar (TForm)
publicerat
Edit1: TEdit;
Timer1: TTimer;
tillvägagångssätt FormCreate (avsändare: TObject)
tillvägagångssätt Timer1Timer (avsändare: TObject);
privat
OldWndProc: TWndMethod;
tillvägagångssätt EditWndProc (var-meddelande: TMessage);
avsluta;
tillvägagångssätt TForm1.FormCreate (avsändare: TObject);
börja
OldWndProc: = Edit1.WindowProc;
Edit1.WindowProc: = EditWndProc;
avsluta;
tillvägagångssätt TForm1.EditWndProc (var-meddelande: TMessage);
var
bmp: TBitmap;
r: TRect;
oldRight: Heltal;
börja
om Message.Msg = CN_CTLCOLOREDIT därefter
börja
Windows.SetTextColor (Message.WParam,
ColorToRGB (Edit1.Font.Color));
Window.SetBkMode (Message.WParam som, ÄR GENOMSKINLIGA);
bmp: = TBitmap.Create;
försök
r: = Edit1.ClientRect;
bmp. Bredd: = (r.Right - r.Left);
bmp. Höjd: = (r.Bottom - r.Top);
om Edit1.Tag > 0 därefter
börja
oldRight: = r.Right;
r.Right: = r.Left + ((r.Right - r.Left) *
(Fördjupat) (för Edit1->Tag/100);
bmp. Canvas.Brush.Color: = clAqua;
bmp. Canvas.FillRect (r);
r.Left: = r.Right;
r.Right: = oldRight;
avsluta;
bmp. Canvas.Brush.Color: = Edit1.Color;
bmp. Canvas.FillRect (r);
Message.Result: = Windows.CreatePatternBrush (bmp. Handtag);
slutligen
bmp. Fritt;
avsluta;
Gå ut;
avsluta;
OldWndProc (meddelande);
avsluta;
tillvägagångssätt TForm1.Timer1Timer (avsändare: TObject);
börja
// I fastställda Timer1.Interval till 50ms…,
om Edit1.Tag->= 100 därefter
Edit1.Tag: = 0
annars
Edit1.Tag: = Edit1.Tag + 1;
Edit1.Invalidate;
avsluta;