W tym przykładzie wyłączymy pierwszą pozycję z listy w ComboBox. Sposób dla ListBox'a jest praktycznie taki sam. Zauważ, że TOwnerDrawState nie wpływa na sposób w jaki wyświetlane są pozycje. Sprawdzanie stanu i działanie należy jedynie od użytkownika. Nie zapomnij zmienić typ ComboBox na OwnerDrawnVariable.
//--------------------------------------------------- //(1) Implementacja obsługi zdarzenia OnDrawItem ... void __fastcall TForm1::ComboBox1DrawItem(TWinControl *Control, int Index, TRect &Rect, TOwnerDrawState State) { //Eliminuje śmieci ComboBox1->Canvas->FillRect(Rect); //Sprawdza czy Index jest naszą "wyłączoną" pozycją if (Index == 0) { //Pisze szary tekst ComboBox1->Canvas->Font->Color = clGray; //Maluje na biało prostokąt wyboru if (State.Contains(odSelected)) { ComboBox1->Canvas->Brush->Color = clWhite; ComboBox1->Canvas->FillRect(Rect); } } else { ComboBox1->Canvas->Font->Color = clBlack; //Zamiana koloru fontu na biały //gdy kursor nad właczoną pozycją if (State.Contains(odSelected)) { ComboBox1->Canvas->Font->Color = clWhite; } } ComboBox1->Canvas->TextOut(Rect.Left, Rect.Top, ComboBox1->Items->Strings[Index]); } //----------------------------------------------- //(2) Jeżeli kliknięta pozycja jest wyłączona, // zapobiega jej wybraniu void __fastcall TForm1::ComboBox1Change(TObject *Sender) { if (ComboBox1->ItemIndex == 0) { ComboBox1->ItemIndex = -1; ComboBox1->DroppedDown = true; } } |