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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2010, 00:00   #11
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Цитата:
Сообщение от DomiNick Посмотреть сообщение
Может там шрифт специальный у них, в котором одинаковая ширина?
о-ооо... мне уже страшно .
Цитата:
Сообщение от DomiNick Посмотреть сообщение
Сейчас сделаю...)

Только последнее: название и время отделяются чем-нибудь друг от друга (пробелом или например символом "|")? И что будет если время 12:20 или ещё хуже - 13:02:55?
Могу любой разделитель поставить, к примеру 3 пробела. А время всегда в минутах и секундах (12:12).
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 06.08.2010, 00:54   #12
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
Лампочка

Цитата:
А время всегда в минутах и секундах (12:12)
У меня навалом треков по полтора часа... Что он мне показывать тогда станет?)
Цитата:
Могу любой разделитель поставить
Пусть будет "|"...

Ну вот как-то так:
Код:
Procedure TForm1.FormCreate(Sender: TObject);
Begin
ListBox1.Style:=lbOwnerDrawVariable; // включим возможность ручной отрисовки (можно настроить дизайн-тайм)
End;

Procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
Var c: TCanvas; text, time: String; n, h, w: Integer;
Begin
text:=TListBox(Control).Items.Strings[Index];
n:=Pos('|', text); // разделитель - '|'
If n>0 Then
      Begin
      time:=Copy(text, n+1, Length(text)-n);
      text:=Copy(text, 1, n-1);
      End;
C:=TListBox(Control).Canvas;
C.Brush.Color:=RGB(0, 0, 0); // цвет фона
C.FillRect(Rect); // заливаем строку (если нужно картинку на фон, то рисуем тут)
If (odSelected In State) Then
      C.Font.Color:=RGB(255, 255, 255) // цвет текста у выделенных строк
Else
      C.Font.Color:=RGB(0, 255, 0); // цвет текста у не выделенных строк
h:=Index*TListBox(Control).ItemHeight+(TListBox(Control).ItemHeight-C.TextHeight(text)) Div 2;
w:=C.TextWidth(time);
C.TextOut(6, h, text); // выводим название песни
C.TextOut(Rect.Right-w-6, h, time); // выводим время
If (odFocused In State) Then
      Windows.DrawFocusRect(C.Handle, Rect); // чтоб рамки выделения не было
End;

Procedure TForm1.FormResize(Sender: TObject);
Begin
ListBox1.Repaint;
End;
Там какая-то бага была с перерисовкой после изменения размера... Добавил ListBox1.Repaint в FormResize и вроде норм...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 06.08.2010, 01:07   #13
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Цитата:
Сообщение от DomiNick Посмотреть сообщение
У меня навалом треков по полтора часа... Что он мне показывать тогда станет?)
Ну... будет просто 90:00 если полтора час . А за код огромное спасибо!
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выравнивание по ширине FoNeZly Общие вопросы C/C++ 0 24.05.2010 23:42
выравнивание столбцов dbgrid по ширине текста kate158 БД в Delphi 2 30.07.2009 17:28
игры по ширине не на весь экран batist65 Свободное общение 6 19.02.2009 11:56
текст в richedit по ширине *Devil* Компоненты Delphi 1 15.06.2007 16:27
выравнивание текста по ширине Алёна Общие вопросы Delphi 6 18.04.2007 11:31