Fråga : Knäppas Combobox

Hälsningar utsikten för

Since Windows, till exempel, ”tilltalar bommar för” är lika en Combobox, var du kan klicka i
You för banaexample

C:\Windows\System32\ kan klicka i Windows eller C:\, inte nödvändigtvis att klicka i den bakåtriktade button
To se vad I-förmiddagen som omkring talar, öppnar i Windows 7 kontrollbordet och navigerar i kategorier… i tilltala bommar för, du kan gå tillbaka, eller att välja en annan bana, genom att klicka i, knäppas insida comboboxen!

Somebody vet något del- att simulera samma? Jag sågar redan, men minns inte det känt: /

Regards,
Carlos
" klar "

Svar : Knäppas Combobox

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;
Andra lösningar  
 
programming4us programming4us