Воскресенье, 22.10.2017, 05:41
Приветствую Вас Гость

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

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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Delphi » Создание mp3 плеера на Delphi » Добавление в плэйлист перетаскиванием файла
Добавление в плэйлист перетаскиванием файла
PresentДата: Воскресенье, 13.01.2013, 13:34 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 2
Репутация: 0
Статус: Offline
Собственно, как реализовать добавление в плэйлист перетаскиванием файла, например, взять трэк с раб.стола и курсором перетащить его в ЛистБокс.
Желательно чтобы он при этом добавлялся именно в то место, куда его перетащили, как в Виндовс Медиа Плеер.

Так же интересует вопрос как изменить положение уже имеющихся трэков в плэйлисте, тоже перетаскиванием в ЛистБоксе.
Спасибо.
 
xaramamburuДата: Вторник, 15.01.2013, 20:01 | Сообщение # 2
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: 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
smile
 
PresentДата: Воскресенье, 20.01.2013, 12:42 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 2
Репутация: 0
Статус: Offline
Спасибо)
 
VladДата: Понедельник, 30.09.2013, 19:03 | Сообщение # 4
Лейтенант
Группа: Пользователи
Сообщений: 57
Репутация: 0
Статус: Offline
при перетаскивании файла в листбокс, он добавляется в конец. как сделать так, чтобы он добавлялся именно туда, где находится курсор?
 
xaramamburuДата: Понедельник, 30.09.2013, 20:28 | Сообщение # 5
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: 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
Репутация: 0
Статус: Offline
спасибо

Добавлено (30.09.2013, 23:32)
---------------------------------------------
теперь нужна черточка, которая показывает, между какими файлами встанет данный трек

Сообщение отредактировал Vlad - Понедельник, 30.09.2013, 22:44
 
xaramamburuДата: Понедельник, 30.09.2013, 23:33 | Сообщение # 7
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: Offline
Интернет рулит. Думайте сами.)))
 
VladДата: Понедельник, 30.09.2013, 23:36 | Сообщение # 8
Лейтенант
Группа: Пользователи
Сообщений: 57
Репутация: 0
Статус: Offline
а вы не знаете?
 
xaramamburuДата: Вторник, 01.10.2013, 19:48 | Сообщение # 9
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: Offline
Нет.)))
 
VladДата: Пятница, 04.10.2013, 17:03 | Сообщение # 10
Лейтенант
Группа: Пользователи
Сообщений: 57
Репутация: 0
Статус: Offline
как сделать так, чтобы листбокс показывал позицию при перетаскивании???
 
xaramamburuДата: Пятница, 04.10.2013, 19:17 | Сообщение # 11
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: Offline
К сожалению ваш вопрос ни чем не отличается от предыдущего. Если вы сможете показать позицию, то и черточку там нарисовать нет ни каких проблем. Проблема в том, что  при перетаскивании из вне формы, окно Listbox'а обрабатывает сообщения и пока вы не отпустите кнопку мыши, оно не на что не реагирует, а как от этого избавиться я не знаю.)))
 
VladДата: Суббота, 12.10.2013, 23:56 | Сообщение # 12
Лейтенант
Группа: Пользователи
Сообщений: 57
Репутация: 0
Статус: 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;

но когда я отпущу ее (папку) на листбоксе - ничего не происходит. помогите help
 
xaramamburuДата: Воскресенье, 13.10.2013, 17:29 | Сообщение # 13
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: Offline
Я уже вам писал, что про перетаскивание в ЛистБокс можно почитать здесь http://basicsprog.ucoz.ru/blog/2012-02-12-12 . Там же есть два примера с исходниками, первый перетаскивание отдельных файлов, а второй папок. Кроме этого читайте комментарии к этой статье, это все уже сто раз обсуждалось.))))
 
Black-LotusДата: Среда, 23.10.2013, 20:19 | Сообщение # 14
Рядовой
Группа: Пользователи
Сообщений: 5
Репутация: 0
Статус: 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
Репутация: 0
Статус: Offline
я недавно заметил, что когда в ListBox перетащишь текущий трек с одного места на другое, текущий трек заканчивается, и за ним играет тот, который стоял перед ним до перетаскивания

Сообщение отредактировал Vlad - Пятница, 21.03.2014, 00:53
 
Форум » Delphi » Создание mp3 плеера на Delphi » Добавление в плэйлист перетаскиванием файла
Страница 1 из 11
Поиск:


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