Auf Versionen von Windows später dann Win95, können Sie Unterklasse eine redigierensteuerung zu
die WM_CTLCOLOREDIT Mitteilung abfangen (für TEdit, sein es
CN_CTLCOLOREDIT anstatt) und zurückbringen eine Bürste oredit, die von einer Bitübersicht hergestellt.
Sie können eine Bitübersicht von dann zeichnen, was Art der Fortschrittsanzeige Sie wünschen.
Ist hier ein einfaches Beispiel:
TForm1 = Kategorie (TForm)
veröffentlicht
Edit1: TEdit;
Timer1: TTimer;
Verfahren FormCreate (Absender: TObject)
Verfahren Timer1Timer (Absender: TObject);
privat
OldWndProc: TWndMethod;
Verfahren EditWndProc (var-Mitteilung: TMessage);
Ende;
Verfahren TForm1.FormCreate (Absender: TObject);
anfangen
OldWndProc: = Edit1.WindowProc;
Edit1.WindowProc: = EditWndProc;
Ende;
Verfahren TForm1.EditWndProc (var-Mitteilung: TMessage);
var
bmp: TBitmap;
r: TRect;
oldRight: Ganze Zahl;
anfangen
wenn Message.Msg = CN_CTLCOLOREDIT dann
anfangen
Windows.SetTextColor (Message.WParam,
ColorToRGB (Edit1.Font.Color));
Window.SetBkMode (Message.WParam, TRANSPARENT);
bmp: = TBitmap.Create;
Versuch
r: = Edit1.ClientRect;
bmp. Breite: = (r.Right - r.Left);
bmp. Höhe: = (r.Bottom - r.Top);
wenn Edit1.Tag > 0 dann
anfangen
oldRight: = r.Right;
r.Right: = r.Left + ((r.Right - r.Left) *
(Verlängert (Edit1->Tag)/100);
bmp. Canvas.Brush.Color: = clAqua;
bmp. Canvas.FillRect (r);
r.Left: = r.Right;
r.Right: = oldRight;
Ende;
bmp. Canvas.Brush.Color: = Edit1.Color;
bmp. Canvas.FillRect (r);
Message.Result: = Windows.CreatePatternBrush (bmp. Handgriff);
schließlich
bmp. Frei;
Ende;
Ausgang;
Ende;
OldWndProc (Mitteilung);
Ende;
Verfahren TForm1.Timer1Timer (Absender: TObject);
anfangen
// I gesetzte Timer1.Interval zu 50ms…
wenn Edit1.Tag >= 100 dann
Edit1.Tag: = 0
sonst
Edit1.Tag: = Edit1.Tag + 1;
Edit1.Invalidate;
Ende;