Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Список с иконками

404
07 марта 2004 года
GooD
108 / / 04.12.2003
Привет всем!
Кто-нибудь знает, как сделать в ListBox-се список с иконкам?
Ну, чтобы к каждой строчке была своя иконка.
Заранее благодарю!
2.1K
08 марта 2004 года
Werti
47 / / 31.01.2004
Цитата:
Originally posted by GooD
Привет всем!
Кто-нибудь знает, как сделать в ListBox-се список с иконкам?
Ну, чтобы к каждой строчке была своя иконка.
Заранее благодарю!



Я те попоже пример накатаю. К вечеру.

404
08 марта 2004 года
GooD
108 / / 04.12.2003
Цитата:
Originally posted by Werti


Я те попоже пример накатаю. К вечеру.



Жду!

2.4K
15 марта 2004 года
Russtam
33 / / 26.07.2003
Простой пример...

Создаешь ListBox и ImageList. (Рис.1)
Добавляешь нужные иконки в ImageList.
У листбокса выставляешь Style = lbOwnerDrawFixed (Рис.2)
Всё рисование описываешь в OnDrawItem листбокса.

Пример:
Код:
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;


Результат на рис.3.

P.S. Картинка не присобачилась :(
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог