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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2010, 13:07   #1
DevilMaster
 
Регистрация: 27.02.2010
Сообщений: 8
Вопрос Отрисовка listbox и проблема с textout.

Всем привет, ток недавно начал программировать и начал я с плеера. Наткнулся на проблемму которую уже второй день не могу решить, и по форумам ненашол ничего нужного мне. Пролемма с listbox в playlist-е. Тоесть я открываю файлы через opendialog и хочу что б в верхней строчке было Название композиции и иссполнитель, а в нижней строчке размер и продолжительность файла. Прошу помоч с кодом, как привязать значения ID3 тегов к textout. И ещё проблемма с нумерацией. Заранее спасибо.

Отрисовывал listbox так:
Код:
procedure TForm3.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
   bmp1:tbitmap;
   bmp2:tbitmap;
      bmp3:tbitmap;
      i:integer;
  begin
  i:=listbox1.Items.Count; //количество item-ов
 begin
 bmp1 := tbitmap.Create;
 bmp1 := img_item_active.Picture.Bitmap;

 bmp2 := tbitmap.Create;
 bmp2 := img_under_item1.Picture.Bitmap;

  bmp3 := tbitmap.Create;
 bmp3 := img_under_item2.Picture.Bitmap;

 with (control as tlistbox).Canvas do
  begin
   //цвет рамки прямоугольника
brush.Color := clnone;
   font.Color := $00B1B1B1; //цвет текста
   font.Style := [];
   font.Name := 'tahoma'; //шрифт
   font.Size := 8; //размер текста
   listbox1.ItemHeight := 30; //высота item-a
   fillrect(rect); // очищаем прямоугольник
   draw(rect.Left, rect.Top,   // это положение рисунка
        img_item_static.Picture.Bitmap); //рисуем в нём картинку
   textout(rect.Left + 51, rect.Top + 4, //положение текста
            listbox1.Items[index]); //Выводим текст

              brush.Color := clnone;
   font.Color := clgreen; //цвет текста
   font.Style := [fsbold];
   font.Name := 'tahoma'; //шрифт
   font.Size := 10; //размер текста
   listbox1.ItemHeight := 30; //высота item-a
    textout(rect.Left + bmp1.width+ 4, rect.Top + 8, //положение текста
          inttostr(i)+'.');

       brush.Color := clnone;
   font.Color := $00525252; //цвет текста
   font.Name := 'tahoma'; //шрифт
   font.Size := 7; //размер текста
   listbox1.ItemHeight := 30; //высота item-a
    textout(rect.Left + 51, rect.Top + 15, //положение текста
           dirr);



  if ((State = [odSelected, odfocused]) or (State = [odSelected])) then
    begin
    draw(rect.left + (bmp1.Width), rect.Top, bmp2);
    draw(listbox1.Width - (bmp1.Width + bmp3.Width), rect.Top, bmp3);
    draw(rect.left, rect.Top, bmp1);




     brush.Color := clnone;
   font.Color := clWhite; //цвет текста
   font.Style := [fsbold];
   font.Name := 'tahoma'; //шрифт
   font.Size := 8; //размер текста
    textout(rect.Left + 51, rect.Top + 4, //положение текста
            listbox1.Items[index]);

                      brush.Color := clnone;
   font.Color := clgreen; //цвет текста
   font.Style := [fsbold];
   font.Name := 'tahoma'; //шрифт
   font.Size := 10; //размер текста
   listbox1.ItemHeight := 30; //высота item-a
    textout(rect.Left + bmp1.width+ 4, rect.Top + 8, //положение текста
          inttostr(i)+'.');

    brush.Color := clnone;
   font.Color := clgreen; //цвет текста
   font.Name := 'tahoma'; //шрифт
   font.Size := 7; //размер текста
   listbox1.ItemHeight := 30; //высота item-a
    textout(rect.Left + 51, rect.Top + 15, //положение текста
              dirr);


    draw(listbox1.Width - (bmp1.Width), rect.Top, bmp1);

    end;
а открывал так:
Код:
 if opendialog1.Execute then
 for i := 0 to opendialog1.Files.Count - 1 do
  begin
 listbox1.Items.Add(opendialog1.Files.Strings[i]);
  dirr := extractfilename(opendialog1.Files.Strings[i]);
  end;
Изображения
Тип файла: png Снимок.PNG (7.6 Кб, 133 просмотров)

Последний раз редактировалось DevilMaster; 27.02.2010 в 13:39.
DevilMaster вне форума Ответить с цитированием
Старый 25.01.2012, 20:55   #2
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

Извините за Офтоп
Искал себе про отрисовку, накопался на эту тему - так вот, нумерация неверна, потому что вы всегда выводили количество итемов в листбоксе, а нужно выводить Index:
Код:
textout(rect.Left + bmp1.width+ 4, rect.Top + 8, //положение текста
          inttostr(index)+'.');
Delphi_ProGer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с listbox... jumper_ua Общие вопросы Delphi 15 16.02.2010 01:54
Свой шрифт в TextOut apromix Общие вопросы Delphi 1 17.01.2010 16:34
проблема с listbox и listview. blackstersl Общие вопросы Delphi 3 06.05.2009 23:31
TextOut xzDelphi Помощь студентам 9 23.10.2007 12:29
Image1.canvas.textout. Координаты символов Alar Компоненты Delphi 0 29.10.2006 22:04