Копирование mp3 из listbox
|
|
Sufictk | Дата: Понедельник, 06.08.2012, 12:22 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 2
Статус: Offline
| Привет, на форме 2 listbox'а. В listbox1 Идет загрузка плейлиста таким вот образом. Code Uses fileCtrl;
procedure TForm1.PlayList(Path: string); var SearchRec: TSearchRec; begin ListBox1.Clear; if FindFirst(Path + '*.mp3', faAnyFile, SearchRec) =0 then begin ListBox1.Items.Add(Path+SearchRec.Name); while (FindNext(SearchRec) = 0) do ListBox1.Items.Add(Path+SearchRec.Name); end; ListBox1.ItemIndex := 0; end;
procedure TForm1.Button4Click(Sender: TObject); var Root: string; pwRoot : PWideChar; Dir: string; begin Root := ''; GetMem(pwRoot, (Length(Root)+1) * 2); pwRoot := StringToWideChar(Root,pwRoot,MAX_PATH*2); if not SelectDirectory('Выберите папку', pwRoot, Dir) then Dir :='' else Dir := Dir+'\';
SoundPath := Dir; PlayList(SoundPath); end;
После загрузки скрываю пути к файлам, тока название треков.
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])); end; end
Задача такова: копировать выделенный мп3 файл, из listbox1 в указанную мной папку (путь к папке для копирования лежит в переменной qwerty) После копирования, внести в listbox название скопированного трека, и в listbox1 напротив скопированного трека поставить иконку. Так же интересует как вырезать файл и вставить, по нажатию одной кнопки(По такому же принципу.).
|
|
| |
xaramamburu | Дата: Вторник, 07.08.2012, 15:38 | Сообщение # 2 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| Sufictk, Используйте функцию CopyFile(Начальный_файл, Конечный_файл, Перезапись); Например копирование можно сделать так: Данный код нужно повесить на кнопку. Code Var File1,File2:string; begin File1:=ListBox1.Items.Strings[ListBox1.ItemIndex]; File2:=qwerty+extractfilename(File1); CopyFile(pChar(File1),pChar(File2),False); Listbox2.Items.Add(File2); end; Да папка для копирования должна быть создана, иначе нужно добавить команду создания нужной папки. Вырезание делается аналогично, только после копирования файл нужно удалить командой: DeleteFile(pChar(File1)); И удалить запись из Listbox1: ListBox1.Items.Delete(ListBox1.ItemIndex); С иконкой все сложнее. При отрисовке ListBox должен знать где рисовать иконку, а где нет. Для этого информацию о скопированных файла нужно где то хранить или прямо при отрисовке проверять если такой файл в данной папке есть FileName:=qwerty+extractfilename(Listbox1.Items[index]); FileExists(FileName); то рисуем иконку иначе нет. Процедура отрисовки в этом случае будет выглядеть как то так: Code
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); const W = 16; H = 16; var BMPRect: TRect; FileName:string; begin with (Control as TListBox).Canvas do begin FillRect(Rect); FileName:=qwerty+extractfilename(Listbox1.Items[index]); if FileExists(FileName) then begin Listbox1.Canvas.Draw(0, Rect.Top, Image1.Picture.Graphic); BMPRect := Bounds(Rect.Left, Rect.Top, W, H); end;
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+10, Rect.Top, IntToStr(Index) + '. ' + extractfilename(Listbox1.Items[index])); end; end; Компонент Image1 необходимо добавить на форму. Свойство Visible-> False, в свойство Picture загрузить вашу иконку. Пробуйте должно работать.))))))))))))))))
|
|
| |
Sufictk | Дата: Среда, 08.08.2012, 17:40 | Сообщение # 3 |
Рядовой
Группа: Пользователи
Сообщений: 2
Статус: Offline
| Получилось. Но при повторной загрузки плеера, не показывает лист скопированных треков в lestbox2. И еще вопрос. Как сделать сортировку треков по альбомам и исполнителям. К примеру я выделил исполнителя "akon" и при нажатии определенной кнопки, программа собирает все треки, этого исполнителя в отдельную папку так же и альбомы туда же. И полное сортирование листа) Как это можно сделать?
|
|
| |
xaramamburu | Дата: Среда, 08.08.2012, 20:26 | Сообщение # 4 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| Sufictk, Он и не будет показывать, т.к. вы не где информацию об этом не сохраняете. Если хотите, чтоб показывалось, то сохраняйте информацию о файлах например в ini файле, а при загрузке считывайте ее. Или сразу при загрузке заполняйте lestbox2 из папки, аналогично заполнению listbox1. Для полной сортировки ListBox у него есть свойство Sorted, установите True и ListBox будет автоматический сортироваться в алфавитном порядке. Или вот ссылка как отсортировать программно: http://www.cyberforum.ru/delphi-beginners/thread147464.html Другие способы думаю сможете найти сами в интернете. С сортировкой по альбомам и исполнителям все сложнее и зависит от того где вы собираетесь брать название альбома или исполнителя. Если из mp3 тегов, то делаете цикл по всему плейлисту и в цикле вытаскиваете тег исполнителя сравниваете его с выделенным и если совпадают то копируете файл в нужную папку. ))))))))))))))))))
|
|
| |