Op versies van Vensters later toen Win95, kunt u subklasse uitgeeft controle aan
onderschep het Wm_ctlcoloredit- bericht (voor TEdit, zou het zijn
CN_CTLCOLOREDIT in plaats daarvan) en keer een borstel terug die van bitmap wordt gecre�ërd.
U kunt bitmap van het type van vooruitgangsvertoning dan trekken u wilt.
Hier is een eenvoudig voorbeeld:
TForm1 = klasse (TForm)
gepubliceerd
Edit1: TEdit;
Timer1: TTimer;
procedure FormCreate (Afzender: TObject)
procedure Timer1Timer (Afzender: TObject);
privé
OldWndProc: TWndMethod;
procedure EditWndProc (var Bericht: TMessage);
eind;
procedure TForm1.FormCreate (Afzender: TObject);
begin
OldWndProc: = Edit1.WindowProc;
Edit1.WindowProc: = EditWndProc;
eind;
procedure TForm1.EditWndProc (var Bericht: TMessage);
var
bmp: TBitmap;
r: TRect;
oldRight: Geheel;
begin
als Message.Msg = CN_CTLCOLOREDIT toen
begin
Windows.SetTextColor (Message.WParam,
ColorToRGB (Edit1.Font.Color));
Window.SetBkMode (TRANSPARANTE Message.WParam,);
bmp: = TBitmap.Create;
probeer
r: = Edit1.ClientRect;
bmp. Breedte: = (r.Right - r.Left);
bmp. Hoogte: = (r.Bottom - r.Top);
als Edit1.Tag > 0 toen
begin
oldRight: = r.Right;
r.Right: = r.Left + ((r.Right - r.Left) *
(Uitgebreid (Edit1->Tag)/100);
bmp. Canvas.Brush.Color: = clAqua;
bmp. Canvas.FillRect (r);
r.Left: = r.Right;
r.Right: = oldRight;
eind;
bmp. Canvas.Brush.Color: = Edit1.Color;
bmp. Canvas.FillRect (r);
Message.Result: = Windows.CreatePatternBrush (bmp. Behandel);
tot slot
bmp. Vrij;
eind;
Uitgang;
eind;
OldWndProc (Bericht);
eind;
procedure TForm1.Timer1Timer (Afzender: TObject);
begin
// plaatste ik Timer1.Interval aan 50ms…
als Edit1.Tag >= 100 toen
Edit1.Tag: = 0
anders
Edit1.Tag: = Edit1.Tag + 1;
Edit1.Invalidate;
eind;