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
Niby wszystko ok, ale nie działa :(
Trzeba jeszcze ustawić Styl ComboBox'a na "csOwnerDrawFixed" , dopasować wysokość ItemHeight i wtedy jest OK :D