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

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

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

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Delphi » Создание mp3 плеера на Delphi » Копирование mp3 из listbox (Копирование mp3 из listbox)
Копирование mp3 из listbox
SufictkДата: Понедельник, 06.08.2012, 12:22 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 2
Репутация: 0
Статус: 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
Репутация: 26
Статус: 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
Репутация: 0
Статус: Offline
Получилось. Но при повторной загрузки плеера, не показывает лист скопированных треков в lestbox2. И еще вопрос.
Как сделать сортировку треков по альбомам и исполнителям.
К примеру я выделил исполнителя "akon" и при нажатии определенной кнопки, программа собирает все треки, этого исполнителя в отдельную папку так же и альбомы туда же.
И полное сортирование листа) Как это можно сделать?
 
xaramamburuДата: Среда, 08.08.2012, 20:26 | Сообщение # 4
Полковник
Группа: Администраторы
Сообщений: 240
Репутация: 26
Статус: Offline
Sufictk,
Он и не будет показывать, т.к. вы не где информацию об этом не сохраняете. Если хотите, чтоб показывалось, то сохраняйте информацию о файлах например в ini файле, а при загрузке считывайте ее. Или сразу при загрузке заполняйте lestbox2 из папки, аналогично заполнению listbox1.
Для полной сортировки ListBox у него есть свойство Sorted, установите True и ListBox будет автоматический сортироваться в алфавитном порядке.
Или вот ссылка как отсортировать программно:
http://www.cyberforum.ru/delphi-beginners/thread147464.html
Другие способы думаю сможете найти сами в интернете.
С сортировкой по альбомам и исполнителям все сложнее и зависит от того где вы собираетесь брать название альбома или исполнителя. Если из mp3 тегов, то делаете цикл по всему плейлисту и в цикле вытаскиваете тег исполнителя сравниваете его с выделенным и если совпадают то копируете файл в нужную папку. ))))))))))))))))))
 
Форум » Delphi » Создание mp3 плеера на Delphi » Копирование mp3 из listbox (Копирование mp3 из listbox)
Страница 1 из 11
Поиск:


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