Programowanie w języku Delphi » FAQ

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

  • 2007-07-05 00:31
  • 1 komentarz
  • 544 odsłony
  • Oceń ten tekst jako pierwszy
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

kleha 2008-04-02 22:16

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