Co zrobić gdy chcę umieścić ikonę obok pozycji ComboBox

Adam Boduch

Nasze ikonki zostały wcześniej wczytane do komponentu ImageList z zakładce Win32. Aby je teraz wyświetlić na ComboBox'ie można posłużyć się metodą "malowania po ekranie" czyli Canvas'em (więcej o klasie TCanvas: Kliknij tutaj)

Definiujemy zmienną globalną:

const Pozycje_w_ComboBox : array[0..2] of String[20] =
      ('Konfiguracja', 'Instalacja', 'Notatnik'); //Tu podajemy pozycje jakie będą znajdować się w ComboBox 

Procedura OnDrawItem komponentu ComboBox:

procedure TMainForm.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with ComboBox1 do
  begin
  {  namalowanie obrazka w zaleznosci od pozycji }
    ImageList.Draw(ComboBox1.Canvas, Rect.Left + 2, Rect.Top + 2, Index);
  { obok obrazka dodaj odpowiedni tekst }
    Canvas.TextOut(Rect.Left + 22, Rect.Top + 2, Pozycje_w_ComboBox[Index]);
  end;
end;

Procedura OnCreate TMainForm:

procedure TMainForm.FormCreate(Sender: TObject);
var
  i : Integer;
begin
{  podczas tworzenia programu dodaj nowe pozycje }
  for I := 0 to 2 do
    ComboBox1.Items.Add(Pozycje_w_ComboBox[i]);
end;

Wersja lekko zmodyfikowana.
Wskazówka zrobiona na podstawie programu "odraw" Adama Boducha. Program można pobrać z:

http://download.4programmers.net/odraw.zip

1 komentarz

Niby wszystko ok, ale nie działa :(
Trzeba jeszcze ustawić Styl ComboBox'a na "csOwnerDrawFixed" , dopasować wysokość ItemHeight i wtedy jest OK :D