Frage : Knopf Combobox

Hallo, ist

Since Windows Vista z.B. der „Adressenstab“ wie ein Combobox, in dem Sie im Weg example

C:\Windows\System32\

You klicken können können in Windows oder in C:\ klicken, nicht notwendigerweise sieht Klicken über im rückwärtigen button

To, was ich spreche, öffnet in Windows 7 den Kontrollbereich und steuert in den Kategorien… im Adressenstab, können Sie einen anderen Weg zurückbringen oder wählen, indem Sie in den Knöpfen innerhalb des combobox klicken!

Somebody kennen irgendeinen Bestandteil, das die selben simulieren? Ich sah bereits, aber erinnere nicht den an Namen: /

Regards,
Carlos

Antwort : Knopf Combobox

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;
Weitere Lösungen  
 
programming4us programming4us