procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
IconIndex: Integer;
S : String;
begin
// сначала рисуем фон - белый, если строка выбрана - синий
// рамочку вокруг выбранного элемента отрисует сам ListBox
with ListBox1.Canvas do
begin
Brush.Style := bsSolid;
Pen.Style := psSolid;
Pen.Width := 1;
if odSelected in State then
begin
Brush.Color := clNavy;
Pen.Color := clNavy;
Font.Color := clWhite;
end
else
begin
Brush.Color := clWhite;
Pen.Color := clWhite;
Font.Color := clBlack;
end;
Rectangle(Rect);
end;
// определяем индекс иконки, можно брать из каких-то других данных
// по Index, в данном примере берется из самой строки до символа '~'
IconIndex := -1;
S := ListBox1.Items[Index];
if Pos('~',S) > 1 then
begin
IconIndex := StrToInt(Copy(s,1,Pos('~',S)-1));
Delete(S,1,Pos('~',S));
end;
// рисуем иконку
if IconIndex >= 0 then
ImageList1.Draw(ListBox1.Canvas,Rect.Left+1,Rect.Top+2,IconIndex);
// сдвигаем левую границу Rect на ширину иконки + отступ
Inc(Rect.Left,18);
// рисуем текст из S
ListBox1.Canvas.TextRect(Rect,Rect.Left,Rect.Top+2,S);
end;
procedure TForm1.FormShow(Sender: TObject);
begin
ListBox1.Items.Add('0~Тест 1');
ListBox1.Items.Add('1~Тест 2');
ListBox1.Items.Add('1~Тест 3');
ListBox1.Items.Add('0~Тест 4');
end;
Список с иконками
Кто-нибудь знает, как сделать в ListBox-се список с иконкам?
Ну, чтобы к каждой строчке была своя иконка.
Заранее благодарю!
Цитата:
Originally posted by GooD
Привет всем!
Кто-нибудь знает, как сделать в ListBox-се список с иконкам?
Ну, чтобы к каждой строчке была своя иконка.
Заранее благодарю!
Привет всем!
Кто-нибудь знает, как сделать в ListBox-се список с иконкам?
Ну, чтобы к каждой строчке была своя иконка.
Заранее благодарю!
Я те попоже пример накатаю. К вечеру.
Цитата:
Originally posted by Werti
Я те попоже пример накатаю. К вечеру.
Я те попоже пример накатаю. К вечеру.
Жду!
Создаешь ListBox и ImageList. (Рис.1)
Добавляешь нужные иконки в ImageList.
У листбокса выставляешь Style = lbOwnerDrawFixed (Рис.2)
Всё рисование описываешь в OnDrawItem листбокса.
Пример:
Код:
Результат на рис.3.
P.S. Картинка не присобачилась :(