На вариантах Windows более поздно после этого Win95, вы можете subclass управление редактировать к
перехватите сообщение WM_CTLCOLOREDIT (для TEdit, оно был бы
CN_CTLCOLOREDIT вместо) и возвращают щетку создана от поэлементного карты.
Вы можете после этого нарисовать поэлементное карту любой тип индикации прогресса вы хотите.
Здесь просто пример:
TForm1 = тип (TForm)
опубликовано
Edit1: TEdit;
Timer1: TTimer;
процедура FormCreate (прислужник: TObject)
процедура Timer1Timer (прислужник: TObject);
приватно
OldWndProc: TWndMethod;
процедура EditWndProc (сообщение var: TMessage);
конец;
процедура TForm1.FormCreate (прислужник: TObject);
начните
OldWndProc: = Edit1.WindowProc;
Edit1.WindowProc: = EditWndProc;
конец;
процедура TForm1.EditWndProc (сообщение var: TMessage);
var
bmp: TBitmap;
r: TRect;
oldRight: Интежер;
начните
если Message.Msg = CN_CTLCOLOREDIT после этого
начните
Windows.SetTextColor (Message.WParam,
ColorToRGB (Edit1.Font.Color));
Window.SetBkMode (Message.WParam, ПРОЗРАЧНЫЕ);
bmp: = TBitmap.Create;
попытка
r: = Edit1.ClientRect;
bmp. Ширина: = (r.Right - r.Left);
bmp. Высота: = (r.Bottom - r.Top);
если Edit1.Tag > 0 после этого
начните
oldRight: = r.Right;
r.Right: = r.Left + ((r.Right - r.Left) *
(Удлинено) (Edit1->Tag/100);
bmp. Canvas.Brush.Color: = clAqua;
bmp. Canvas.FillRect (r);
r.Left: = r.Right;
r.Right: = oldRight;
конец;
bmp. Canvas.Brush.Color: = Edit1.Color;
bmp. Canvas.FillRect (r);
Message.Result: = Windows.CreatePatternBrush (bmp. Ручка);
окончательно
bmp. Свободно;
конец;
Выход;
конец;
OldWndProc (сообщение);
конец;
процедура TForm1.Timer1Timer (прислужник: TObject);
начните
// iий установленные Timer1.Interval к 50ms…
если >= 100 Edit1.Tag после этого
Edit1.Tag: = 0
еще
Edit1.Tag: = Edit1.Tag + 1;
Edit1.Invalidate;
конец;