Как работать с плейлистом в delphi на библиотеке BASS.DLL?
|
|
BM_GORA | Дата: Четверг, 05.07.2012, 14:11 | Сообщение # 61 |
Лейтенант
Группа: Пользователи
Сообщений: 44
Статус: Offline
| Для начала должен сказать , прикольный дизайн у вас получился ))) Если делать так как у вас, то если у трека будет длинное название то оно будет вылазить из рамок плей листа, чет типо того http://i40.fastpic.ru/big/2012/0705/cd/f3d097ca0ad347155ee23c4993a9e9cd.jpg
|
|
| |
Filo$oF | Дата: Четверг, 05.07.2012, 18:32 | Сообщение # 62 |
Лейтенант
Группа: Пользователи
Сообщений: 61
Статус: Offline
| BM_GORA Как перенести на другую строку я увы не осведомлен, но вот по поводу выхода названия за рамки - у меня всё нормально.
Добавлено (05.07.2012, 18:32) --------------------------------------------- xaramamburu,
Хотелось бы повторить вопрос, может вы его просто не заметили, так как он был добавлен позже
Пытаюсь осуществить перемотку listboxa движением image1 (Name -> Scroll) по image2 (Name -> Scrollb). как это было сделано со звуком и треком. Code TForm_player.scrollbMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var l:integer; begin if ssleft in shift then begin if (mouse.CursorPos.y-yn2>=scroll.Top) and ((mouse.CursorPos.y-yn2+scrollb.Top )<=(scroll.top+scroll.Height)) then scrollb.top:=mouse.CursorPos.y-yn2; l:=percent(y*2.5, scroll.Height ); List[number_list].ItemIndex:=Trunc(y * List[number_list].Items.Count / scroll.height); end; end;
procedure TForm_player.scrollbMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin yn2:=mouse.CursorPos.y-(scrollb.top); end;
listbox прокручивается, но вот картинка либо не двигается, либо движется до середины а дальше останавливается, но строки продолжают прокручиваться. Что тут не так?
Сообщение отредактировал Filo$oF - Четверг, 05.07.2012, 18:33 |
|
| |
xaramamburu | Дата: Четверг, 05.07.2012, 21:35 | Сообщение # 63 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| Filo$oF, У меня получилось как - то так: Code procedure TForm_player.scrollbMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin yn2:=mouse.CursorPos.y-(scrollb.top); end;
procedure TForm_player.scrollbMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ssleft in shift then begin if (mouse.CursorPos.y-yn2>=scroll.Top) and ((mouse.CursorPos.y-yn2+scrollb.Height )<=(scroll.top+scroll.Height)) then scrollb.top:=mouse.CursorPos.y-yn2; ListBox1.ItemIndex:=Trunc((scrollb.top-scroll.top)/((scroll.height-scrollb.Height)/(ListBox1.Items.Count-1))); end; end;
|
|
| |
xaramamburu | Дата: Четверг, 05.07.2012, 21:47 | Сообщение # 64 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| BM_GORA, При отрисовке в ListBox используйте функцию Copy и отрезайте от названия сколько надо, плюс можете прибавить какой нибудь разделитель (..., |) для отделения времени. Или как предложил Filo$oF разнести название и время на разные уровни.)))))
|
|
| |
BM_GORA | Дата: Пятница, 06.07.2012, 01:59 | Сообщение # 65 |
Лейтенант
Группа: Пользователи
Сообщений: 44
Статус: Offline
| ну так на счет разделителя я и спрашивал как это сделать ))) если не сложно скажите плизз )))) Добавлено (06.07.2012, 01:59) --------------------------------------------- а если быть точнее как сделать вот так ? : http://i42.fastpic.ru/big/2012/0629/84/1667f63941171e3dff8d853a0a585b84.jpg
|
|
| |
Filo$oF | Дата: Пятница, 06.07.2012, 08:45 | Сообщение # 66 |
Лейтенант
Группа: Пользователи
Сообщений: 61
Статус: Offline
| BM_GORA
Думаю вам нужно почитать это
http://www.delphi.int.ru/articles/118/
|
|
| |
BM_GORA | Дата: Пятница, 06.07.2012, 11:24 | Сообщение # 67 |
Лейтенант
Группа: Пользователи
Сообщений: 44
Статус: Offline
| Прочитал, нашол там про Copy , но этот способ давольно таки неудобен, а про разделитель чет там нет ничего (
|
|
| |
xaramamburu | Дата: Пятница, 06.07.2012, 11:32 | Сообщение # 68 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| BM_GORA, Выложите ваш код отрисовки.))))))))))
|
|
| |
BM_GORA | Дата: Пятница, 06.07.2012, 11:47 | Сообщение # 69 |
Лейтенант
Группа: Пользователи
Сообщений: 44
Статус: Offline
| Code procedure TForm_player.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); const W = 16; H = 16; begin with (Control as TListBox).Canvas do begin FillRect(Rect); end; with (control as TListBox).canvas do begin Font.Color := clGray; Font.Size := 9; Brush.Style := bsClear; Brush.Color := clGray; SetBkMode(ListBox1.canvas.Handle, TRANSPARENT); TextOut(Rect.Left + w, Rect.Top, IntToStr(Index) + '. ' + extractfilename(Listbox1.Items[index])); //для названия песни TextOut(rect.right-50, rect.top, lentime(Listbox1.Items[index]));//для времени end; end;
|
|
| |
xaramamburu | Дата: Пятница, 06.07.2012, 12:39 | Сообщение # 70 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| BM_GORA, Должно быть как-то так: Code procedure TForm_player.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); const W = 16; H = 16; begin with (Control as TListBox).Canvas do begin FillRect(Rect); end; with (control as TListBox).canvas do begin Font.Color := clGray; Font.Size := 9; Brush.Style := bsClear; Brush.Color := clGray; SetBkMode(ListBox1.canvas.Handle, TRANSPARENT); if length(extractfilename(Listbox1.Items[index]))>45 then TextOut(Rect.Left + w, Rect.Top, IntToStr(Index) + '. ' + copy(extractfilename(Listbox1.Items[index]),1,45)+'...') //для названия песни else TextOut(Rect.Left + w, Rect.Top, IntToStr(Index) + '. ' + extractfilename(Listbox1.Items[index])); TextOut(rect.right-60, rect.top,'|'+lentime(Listbox1.Items[index]));//для времени end; end; В места числа 45 подберите свое (это длина отрезания). Если вы собираетесь сделать изменяемый по ширине плейлист, то это число нужно вычислять в зависимости от ширины плейлиста и размера шрифта (ширина букв).))))))))
|
|
| |
BM_GORA | Дата: Пятница, 06.07.2012, 13:20 | Сообщение # 71 |
Лейтенант
Группа: Пользователи
Сообщений: 44
Статус: Offline
| спс ) вечером проверю, но скорее всего я все же буду думать как сделать разделитель, т.к. для так сказать стиля моего плеера перенос названия песни как то неуместен )
|
|
| |
xaramamburu | Дата: Пятница, 06.07.2012, 13:48 | Сообщение # 72 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| BM_GORA, В этом коде нет переноса, а просто обрезание части названия трека и добавление разделителя между названием и временем трека в виде '|'.
|
|
| |
BM_GORA | Дата: Воскресенье, 08.07.2012, 00:19 | Сообщение # 73 |
Лейтенант
Группа: Пользователи
Сообщений: 44
Статус: Offline
| оо тогда спс большое ))) просто увидел Copy и подумал так )) Добавлено (07.07.2012, 10:02) --------------------------------------------- ураааа, все ништяк)) спс большое )))) Добавлено (08.07.2012, 00:19) --------------------------------------------- а вот и проблемка, поставил значение 60 вместо 45 вот в этих местах : [code] if length(extractfilename(Listbox1.Items[index]))>60 then TextOut(Rect.Left + w, Rect.Top, IntToStr(Index) + '. ' + copy(extractfilename(Listbox1.Items[index]),1,60)+'...') //для названия песни вобщем то обрезает он как то непонятно, вот скрин: http://i40.fastpic.ru/big/2012/0708/9f/147147513f7ef31015f8da20a06d3d9f.jpg
|
|
| |
Filo$oF | Дата: Воскресенье, 08.07.2012, 08:52 | Сообщение # 74 |
Лейтенант
Группа: Пользователи
Сообщений: 61
Статус: Offline
| BM_GORA, У тебя listbox шириной чуть боле чем 60 символов. Потому и не влазит. Нужно растянуть сам listbox в ширину или вернуть "45".
|
|
| |
BM_GORA | Дата: Воскресенье, 08.07.2012, 10:32 | Сообщение # 75 |
Лейтенант
Группа: Пользователи
Сообщений: 44
Статус: Offline
| да не в этом дело, он обрезает не по 60 символов а как то странно, тоесть допустим, есть трек с названием в 70 символов, по идеи он должен обрезать трек после 60 символа, вот так: qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq... но если в названии допустим 40 символов то он почему то обрезает на 35 символе(к примеру), вот так : qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq... но стоит то обрезка на 60 символе, почему так ? а если поставить допустим 80 символов то обрезка идет где то на 70 символе: qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq... и вот в чем причина я не понял.
и да, чет не пойму смысл твоего сообщения, ты написал "что листбокс более 60 символов, поэтому и не влазиет" как это понимать ? Может быть ты имел ввиду менее ?Добавлено (08.07.2012, 10:21) --------------------------------------------- ида, даже если вернуть 45 то получается так, допустим 50 символов, обрезка идет на 45, это правильно , но если там 70 символов то обрезка будет гдето на 50, если 20 то без обрезки, вообще не понятно )) Добавлено (08.07.2012, 10:32) --------------------------------------------- если внимательно посмотреть на скрин то вы увидите то что 1 строчка обрезана меньше чем нужно, 2 нормально ,а 3 больше чем нужно
|
|
| |
|