TComboBox
25.07.1999
  • Wyłączanie pozycji z ComboBox lub ListBox.

      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; 
   } 
}