Добавление в плэйлист перетаскиванием файла
|
|
Present | Дата: Воскресенье, 13.01.2013, 13:34 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 2
Статус: Offline
| Собственно, как реализовать добавление в плэйлист перетаскиванием файла, например, взять трэк с раб.стола и курсором перетащить его в ЛистБокс. Желательно чтобы он при этом добавлялся именно в то место, куда его перетащили, как в Виндовс Медиа Плеер.
Так же интересует вопрос как изменить положение уже имеющихся трэков в плэйлисте, тоже перетаскиванием в ЛистБоксе. Спасибо.
|
|
| |
xaramamburu | Дата: Вторник, 15.01.2013, 20:01 | Сообщение # 2 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| Present, Про перетаскивание в ЛистБокс можно почитать здесь http://basicsprog.ucoz.ru/blog/2012-02-12-12 . Перетаскивание внутри ЛистБокса можно сделать следующим образом: Код procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer); begin with (Sender as TListBox) do Items.Move(ItemIndex,ItemAtPos(Point(x,y),True)); end; procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := (Sender=Source); end; Не забудьте в ListBox присвоить свойству DragMode значение dmAutomatic.
Подробнее смотрите здесь http://www.delphisources.ru/forum/showthread.php?t=2048
|
|
| |
Present | Дата: Воскресенье, 20.01.2013, 12:42 | Сообщение # 3 |
Рядовой
Группа: Пользователи
Сообщений: 2
Статус: Offline
| Спасибо)
|
|
| |
Vlad | Дата: Понедельник, 30.09.2013, 19:03 | Сообщение # 4 |
Лейтенант
Группа: Пользователи
Сообщений: 57
Статус: Offline
| при перетаскивании файла в листбокс, он добавляется в конец. как сделать так, чтобы он добавлялся именно туда, где находится курсор?
|
|
| |
xaramamburu | Дата: Понедельник, 30.09.2013, 20:28 | Сообщение # 5 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| В разделе Var добавляете переменную PosItems: integer = -1;
Для события OnMouseMove компонента ListBox1 пишите код: Код procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin //Получаем индекс позиции курсора в ListBox1 PosItems:=ListBox1.ItemAtPos(Point(X,Y), true) ; end; Ну и в процедуре перетаскивания WMDropFiles в место строчки: listbox1.items.add(StrPas(Filename)); пишите строчку: ListBox1.Items.Insert(PosItems ,StrPas(Filename));
Думаю должно работать.))))
|
|
| |
Vlad | Дата: Понедельник, 30.09.2013, 23:32 | Сообщение # 6 |
Лейтенант
Группа: Пользователи
Сообщений: 57
Статус: Offline
| спасибо Добавлено (30.09.2013, 23:32) --------------------------------------------- теперь нужна черточка, которая показывает, между какими файлами встанет данный трек
Сообщение отредактировал Vlad - Понедельник, 30.09.2013, 22:44 |
|
| |
xaramamburu | Дата: Понедельник, 30.09.2013, 23:33 | Сообщение # 7 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| Интернет рулит. Думайте сами.)))
|
|
| |
Vlad | Дата: Понедельник, 30.09.2013, 23:36 | Сообщение # 8 |
Лейтенант
Группа: Пользователи
Сообщений: 57
Статус: Offline
| а вы не знаете?
|
|
| |
xaramamburu | Дата: Вторник, 01.10.2013, 19:48 | Сообщение # 9 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| Нет.)))
|
|
| |
Vlad | Дата: Пятница, 04.10.2013, 17:03 | Сообщение # 10 |
Лейтенант
Группа: Пользователи
Сообщений: 57
Статус: Offline
| как сделать так, чтобы листбокс показывал позицию при перетаскивании???
|
|
| |
xaramamburu | Дата: Пятница, 04.10.2013, 19:17 | Сообщение # 11 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| К сожалению ваш вопрос ни чем не отличается от предыдущего. Если вы сможете показать позицию, то и черточку там нарисовать нет ни каких проблем. Проблема в том, что при перетаскивании из вне формы, окно Listbox'а обрабатывает сообщения и пока вы не отпустите кнопку мыши, оно не на что не реагирует, а как от этого избавиться я не знаю.)))
|
|
| |
Vlad | Дата: Суббота, 12.10.2013, 23:56 | Сообщение # 12 |
Лейтенант
Группа: Пользователи
Сообщений: 57
Статус: Offline
| я нашел код для перетаскивания папок в плейлистКод procedure GetAllFiles( Path: string); var sRec: TSearchRec; isFound: boolean; begin isFound := FindFirst( Path + '\*.*', faAnyFile, sRec ) = 0; while isFound do begin if ( sRec.Name <> '.' ) and ( sRec.Name <> '..' ) then begin if ( sRec.Attr and faDirectory ) = faDirectory then GetAllFiles( Path + '\' + sRec.Name); [b]//условие, проверки, что файл является mp3 файлом, если эту строчку убрать, будут добавляться все файлы if lowercase(ExtractFileExt(Path + '\' + sRec.Name))='.mp3' then ListBox1.Items.Add( Path + '\' + sRec.Name ); end; Application.ProcessMessages; isFound := FindNext( sRec ) = 0; end; FindClose( sRec ); end; но когда я отпущу ее (папку) на листбоксе - ничего не происходит. помогите
|
|
| |
xaramamburu | Дата: Воскресенье, 13.10.2013, 17:29 | Сообщение # 13 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| Я уже вам писал, что про перетаскивание в ЛистБокс можно почитать здесь http://basicsprog.ucoz.ru/blog/2012-02-12-12 . Там же есть два примера с исходниками, первый перетаскивание отдельных файлов, а второй папок. Кроме этого читайте комментарии к этой статье, это все уже сто раз обсуждалось.))))
|
|
| |
Black-Lotus | Дата: Среда, 23.10.2013, 20:19 | Сообщение # 14 |
Рядовой
Группа: Пользователи
Сообщений: 5
Статус: Offline
| Кому интересно могу выложить 1 идею , и подсказку к реализации остальное сами. когда делал плеер на "басс длл". я делал 2 лист бокса друг за другом спрятаные на 1 были адресса файлов ,на втором который вверху были только имена файлов и они были синхронизированы имена до использования тегов выводил так Код listbox1.items.add(filename); listbox2.items.add(ExtractFileName(filename)); где filename это имя файла а код по перетаскиванию итемов мой вариант могу выложить так же не жалко. Учтите этот код подходит для этой самой идеи 2лист бокса 1 для ссылок на файлы другой для имен.
Код var lindex:integer; //глобальная переменая
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer); var tmp,tmp2:string; begin lindex:=listbox1.ItemIndex; tmp:=Lst1.Items[lindex]; listbox1.Items.Insert(listbox1.ItemAtPos(Point(x,y),true),tmp); tmp2:=ListBox2.Items[lindex]; ListBox2.Items.Insert(listbox1.ItemAtPos(Point(x,y),true),tmp2); ... + код сохранения в фаил но думаю это не нужно=) end;
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin listbox1.Items.Delete(lindex); ListBox2.Items.Delete(lindex); end;
|
|
| |
Vlad | Дата: Пятница, 21.03.2014, 00:44 | Сообщение # 15 |
Лейтенант
Группа: Пользователи
Сообщений: 57
Статус: Offline
| я недавно заметил, что когда в ListBox перетащишь текущий трек с одного места на другое, текущий трек заканчивается, и за ним играет тот, который стоял перед ним до перетаскивания
Сообщение отредактировал Vlad - Пятница, 21.03.2014, 00:53 |
|
| |
|