Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2007, 17:11   #1
Рустам
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 260
Лампочка Как мне в ListBox Добавить/Изменить рисунок (иконку)?

Пожалуйста, подскажите как мне в ListBox Добавить/Изменить рисунок(иконку)?
Если кто знает, то подскажите!!! Буду весьма признателен!!!
Заранее благодарю!!!
Хорошо не там, где нас нет, а там, где нас еще небыло!!!
Рустам вне форума Ответить с цитированием
Старый 05.07.2007, 19:30   #2
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Имеется ввиду собственная прорисовка элементов? Типа какого-нибудь значка перед надписью? Если так, то нужно устновить свойство Style равным lbOwnerDrawFixed или lbOwnerDrawVariable и обрабатывать событие OnDrawItem. Ну что-то вроде этого:
Код:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  ListBox1.Canvas.Brush.Color := clRed;
  ListBox1.Canvas.Rectangle(Rect.Left + 2, Rect.Top + 2, Rect.Left + 15, Rect.Bottom - 2);

  ListBox1.Canvas.Brush.Style := bsClear;
  ListBox1.Canvas.TextOut(Rect.Left + 20, Rect.Top + 1, ListBox1.Items[Index]);
end;
Jeni вне форума Ответить с цитированием
Старый 05.07.2007, 19:47   #3
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Полный код:
Код:
const
f='h:\Bitmap1.bmp';
.......
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  Bitmap : TBitmap;
  Offset : Integer;
  BMPRect: TRect;
begin
  WITH (Control as TListBox).Canvas do begin
    FillRect(Rect);
    Bitmap := TBitmap.Create;
    Bitmap.LoadFromFile(f);//(ListBox1.Items[Index]);
    Offset := 0;
     if Bitmap <> NIL then begin
      BMPRect := Bounds(Rect.Left+2, Rect.Top+2,
                        (Rect.Bottom-Rect.Top-2)*2, Rect.Bottom-Rect.Top-2);
      {StretchDraw(BMPRect, Bitmap); Можно просто нарисовать, но лучше сначала убрать фон}
      BrushCopy(BMPRect,Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height),
                Bitmap.Canvas.Pixels[0, Bitmap.Height-1]);
      Offset := (Rect.Bottom-Rect.Top+1)*2;
    end;
    TextOut(Rect.Left+Offset, Rect.Top, ListBox1.Items[Index]);
    Bitmap.Free;
   end;

end;
Alex21 вне форума Ответить с цитированием
Старый 06.07.2007, 10:02   #4
Рустам
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 260
По умолчанию

Ребята, вы СУПЕР!!! РЕСПЕКТ И УВАЖУХА!!! (я в восторге!!!) ))))
Хорошо не там, где нас нет, а там, где нас еще небыло!!!
Рустам вне форума Ответить с цитированием
Старый 06.07.2007, 10:37   #5
Рустам
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 260
По умолчанию

Но здесь есть один ньюанс. Картинка цепляется ко всем записям в ListBox, а надо только к тем, к которым надо.
Хорошо не там, где нас нет, а там, где нас еще небыло!!!
Рустам вне форума Ответить с цитированием
Старый 06.07.2007, 12:23   #6
Трофимов Александр
Форумчанин
 
Аватар для Трофимов Александр
 
Регистрация: 03.11.2006
Сообщений: 321
По умолчанию

Тогда наверное условие поставь:
If index=.. then
begin
.....//код который был выше
end;
Трофимов Александр вне форума Ответить с цитированием
Старый 06.07.2007, 12:46   #7
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

2 Трофимов Александр: просто код вставить не получится, надо перересовывать остальные поля тоже.

2 Рустам: вот код. есть массив ind [1..4(длина списка)]of boolean;
Вместо БООЛ можно использовать byte, integer... тогда с case...
Код:
const
f1='D:\img\1.bmp';
f2='D:\img\2.bmp';
var
  Form1: TForm1;
   ind: array[1..4]of boolean;
    i:integer;
implementation
{$R *.dfm}
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  Bitmap : TBitmap;
  Offset : Integer;
  BMPRect: TRect;
begin
  WITH (Control as TListBox).Canvas do begin
    FillRect(Rect);
    Bitmap := TBitmap.Create;
 if ind[Index+1]=true then Bitmap.LoadFromFile(f1) 
else
Bitmap.LoadFromFile(f2);
    Offset := 0;
     if Bitmap <> NIL then begin
      BMPRect := Bounds(Rect.Left+2, Rect.Top+2,
                        (Rect.Bottom-Rect.Top-2)*2, Rect.Bottom-Rect.Top-2);
      BrushCopy(BMPRect,Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height),
                Bitmap.Canvas.Pixels[0, Bitmap.Height-1]);
      Offset := (Rect.Bottom-Rect.Top+1)*2;
    end;
    TextOut(Rect.Left+Offset, Rect.Top, ListBox1.Items[Index]);
    Bitmap.Free;
   end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ind[1]:=true;
ind[2]:=false;
ind[3]:=false;
ind[4]:=true;
end;

Последний раз редактировалось Alex21; 07.07.2007 в 11:24.
Alex21 вне форума Ответить с цитированием
Старый 06.07.2007, 13:07   #8
Рустам
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 260
По умолчанию

А возможно создавать массивы во время исполнения программы?
Хорошо не там, где нас нет, а там, где нас еще небыло!!!
Рустам вне форума Ответить с цитированием
Старый 06.07.2007, 13:10   #9
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от Рустам Посмотреть сообщение
А возможно создавать массивы во время исполнения программы?
Это есть- динамический массив.
Alex21 вне форума Ответить с цитированием
Старый 06.07.2007, 13:19   #10
Рустам
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 260
Восклицание Напомни, как это делается - а то я незнаю!!!

Напомни, как это делается - а то я незнаю!!!
Хорошо не там, где нас нет, а там, где нас еще небыло!!!
Рустам вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как изменить иконку EXE файлу Warlog Общие вопросы Delphi 6 20.12.2017 14:42
Извлечь иконку из EXE? Алексей_C Общие вопросы Delphi 22 27.12.2008 23:34
Изменить иконку xakkkkker Общие вопросы Delphi 2 23.08.2008 19:40
Помогите пожалуйсто изменить этот рисунок CyberWolf Свободное общение 1 28.03.2008 17:48
изменить иконку Projecta zzzzz Общие вопросы Delphi 1 12.12.2007 23:22