Суббота, 20.04.2024, 09:07
Приветствую Вас Гость

Не ошибается тот, кто ничего не делает.
Но и ничего не делать - ошибка.

Эмиль Кроткий

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Delphi » Создание mp3 плеера на Delphi » Как работать с плейлистом в delphi на библиотеке BASS.DLL? (разбираем работу с плейлистом на delphi)
Как работать с плейлистом в delphi на библиотеке BASS.DLL?
BM_GORAДата: Четверг, 05.07.2012, 14:11 | Сообщение # 61
Лейтенант
Группа: Пользователи
Сообщений: 44
Репутация: 0
Статус: Offline
Для начала должен сказать , прикольный дизайн у вас получился ))) Если делать так как у вас, то если у трека будет длинное название то оно будет вылазить из рамок плей листа, чет типо того http://i40.fastpic.ru/big/2012/0705/cd/f3d097ca0ad347155ee23c4993a9e9cd.jpg
 
Filo$oFДата: Четверг, 05.07.2012, 18:32 | Сообщение # 62
Лейтенант
Группа: Пользователи
Сообщений: 61
Репутация: 2
Статус: Offline
BM_GORA
Как перенести на другую строку я увы не осведомлен, но вот по поводу выхода названия за рамки - у меня всё нормально.

Добавлено (05.07.2012, 18:32)
---------------------------------------------
xaramamburu,

Хотелось бы повторить вопрос, может вы его просто не заметили, так как он был добавлен позже smile

Пытаюсь осуществить перемотку 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
Репутация: 26
Статус: 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;

smile
 
xaramamburuДата: Четверг, 05.07.2012, 21:47 | Сообщение # 64
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: Offline
BM_GORA,
При отрисовке в ListBox используйте функцию Copy и отрезайте от названия сколько надо, плюс можете прибавить какой нибудь разделитель (..., |) для отделения времени. Или как предложил Filo$oF разнести название и время на разные уровни.)))))
 
BM_GORAДата: Пятница, 06.07.2012, 01:59 | Сообщение # 65
Лейтенант
Группа: Пользователи
Сообщений: 44
Репутация: 0
Статус: 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
Репутация: 2
Статус: Offline
BM_GORA

Думаю вам нужно почитать это smile

http://www.delphi.int.ru/articles/118/
 
BM_GORAДата: Пятница, 06.07.2012, 11:24 | Сообщение # 67
Лейтенант
Группа: Пользователи
Сообщений: 44
Репутация: 0
Статус: Offline
Прочитал, нашол там про Copy , но этот способ давольно таки неудобен, а про разделитель чет там нет ничего (
 
xaramamburuДата: Пятница, 06.07.2012, 11:32 | Сообщение # 68
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: Offline
BM_GORA,
Выложите ваш код отрисовки.))))))))))
 
BM_GORAДата: Пятница, 06.07.2012, 11:47 | Сообщение # 69
Лейтенант
Группа: Пользователи
Сообщений: 44
Репутация: 0
Статус: 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
Репутация: 26
Статус: 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
Репутация: 0
Статус: Offline
спс ) вечером проверю, но скорее всего я все же буду думать как сделать разделитель, т.к. для так сказать стиля моего плеера перенос названия песни как то неуместен )
 
xaramamburuДата: Пятница, 06.07.2012, 13:48 | Сообщение # 72
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: Offline
BM_GORA,
В этом коде нет переноса, а просто обрезание части названия трека и добавление разделителя между названием и временем трека в виде '|'. smile
 
BM_GORAДата: Воскресенье, 08.07.2012, 00:19 | Сообщение # 73
Лейтенант
Группа: Пользователи
Сообщений: 44
Репутация: 0
Статус: 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
Репутация: 2
Статус: Offline
BM_GORA,
У тебя listbox шириной чуть боле чем 60 символов. Потому и не влазит.
Нужно растянуть сам listbox в ширину или вернуть "45".
 
BM_GORAДата: Воскресенье, 08.07.2012, 10:32 | Сообщение # 75
Лейтенант
Группа: Пользователи
Сообщений: 44
Репутация: 0
Статус: 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 больше чем нужно

 
Форум » Delphi » Создание mp3 плеера на Delphi » Как работать с плейлистом в delphi на библиотеке BASS.DLL? (разбираем работу с плейлистом на delphi)
Поиск:


Copyright MyCorp © 2024Конструктор сайтов - uCoz