Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 808

/ вопрос открыт /

Здравствуйте, эксперты!
Мне необходимо реализовать плей лист в делфи. В моем проигрователе я использую стандартные компоненты и образы. Всё реализовано нехватает бегунка, плейлиста и способа сохранить плейлист. Я надеюсь на вашу помощь, если вам будет не трудно, то помогите пожалуйста.

Ящерка Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: Ящерка (статус: Посетитель)
Вопрос отправлен: 11 декабря 2010, 19:07
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 30; последнее сообщение — 24 декабря 2010, 18:51; участников в обсуждении: 6.

Страницы: [1] [2] [Следующая »]

min@y™

min@y™ (статус: Доктор наук), 11 декабря 2010, 19:25 [#1]:

Чо не получается?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ящерка

Ящерка (статус: Посетитель), 11 декабря 2010, 19:40 [#2]:

Выдает ошибку. Какую я к сожалению не помню, ноутбук не рядом. Я прошлась по сйтам, но достойных ответов я там не увидела, доверяя этому сайту я решила задать вопрос тут. Я в Делфи не очень хорошо разбираюсь, пока учусь.Это мне нужно для лабораторной, я пыталась реализовать через TListBox, но проблем возникает много.
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 11 декабря 2010, 19:42 [#3]:

Самый популярный формат для плейлистов — M3U. Вот статья: Работа с форматом M3U
min@y™

min@y™ (статус: Доктор наук), 11 декабря 2010, 19:51 [#4]:

Цитата (Ящерка):

Выдает ошибку. Какую я к сожалению не помню

Мне угадать, да?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ящерка

Ящерка (статус: Посетитель), 11 декабря 2010, 19:53 [#5]:

Ды зачем гадать то???
Если чесно я вообще не в дамек как его писать
Жикльор

Жикльор (статус: 5-ый класс), 12 декабря 2010, 03:47 [#6]:

Самый простой способ:
ListBox1.Items.SaveToFile(<путь к файлу>) //сохранить элементы ListBox'a
ListBox1.Items.LoadFromFile(<путь к файлу>) //загрузить с файла элементы
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
min@y™

min@y™ (статус: Доктор наук), 12 декабря 2010, 08:11 [#7]:

Ваще пипец, граждане!
Вот приду я в автосервис и скажу: "Пацаны, выручайте, машина не заводится!". А на вопрос "Какая у тебя машина" отвечу: "Не помню, машина не рядом".
Угадайте, на какие три буквы меня пошлют механики? И правильно сделают.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ящерка

Ящерка (статус: Посетитель), 12 декабря 2010, 19:01 [#8]:

Хах, это разные вещи!!!!!
Я тебе не сказала что непомню какой выпуск у меня делфи, а сказала что ошибку не помню!!!!!Это разное
Вадим К

Вадим К (статус: Академик), 12 декабря 2010, 19:07 [#9]:

думаю, в данном случае версия делфи не имеет значения. А вотпрос наверно лучше сформулировать как "ой, у меня тут не работает машина", "А что именно там не работает - не помню, вот только не едет".
Галочка "подтверждения прочтения" - вселенское зло.
Ящерка

Ящерка (статус: Посетитель), 12 декабря 2010, 19:49 [#10]:

вот на это я бы промолчала. Только суть то не в этом.
Я прошу помощи реализовать мне плей-лист в Делфи, если вам не трудно.
Ящерка

Ящерка (статус: Посетитель), 12 декабря 2010, 21:26 [#11]:

я попробовала реализовать плей-лист с помощью статьи Работа с форматом M3U , но на ListView ни чего не происходит. Вообще ни чего, а две кнопки это как будто кнопки для открытия файла и то он не видит ни файл который я открыла ни уж тем более плейлист. В чем проблема??
Вадим К

Вадим К (статус: Академик), 12 декабря 2010, 21:55 [#12]:

сложно по одним всхлыпиваниям судить, что там именно не работает. Может Вы просто код скопировали и вставили, а к кнопкам не привязали.
Выложите исходники на какой то файлообменник - народ и поможет.
Галочка "подтверждения прочтения" - вселенское зло.
mirt.steelwater

mirt.steelwater (статус: Посетитель), 22 декабря 2010, 12:50 [#13]:

бегунок можно взять из Alpha Skins или отдельный компонент есть в сети TSlider
правильным подходом в реализации плей-листа будет создание потомка на основе TStringList
описать в нем мкетоды для правильного вывода строк, разбора формата m3u и т.п.
для этого нужно переопределить методы LoadFromFile и SaveToFile
примерно так:
type
    TPlayList = class (TStringList)
    private
    protected
    public
        procedure LoadFromFile (const FileName: string); override;
        procedure SaveToFile (const FileName: string); override;
    end;
procedure TPlayList.LoadFromFile (const FileName: string);
var
    Stream    : TMemoryStream;
    Buffer    : PChar;
    Pos       : Integer;
    Positions : array of Integer;
    Delimiter : String;
    L         : Integer;
begin
    try
        Stream := TMemoryStream.Create;
        Stream.LoadFromFile (FileName);
        with Stream do
        begin
            Pos := -1;
            SetLength (Positions,Size);
            Buffer := AllocMem (L+1);
            while ( Position <= (Size-L-1) ) do
            begin
                Seek (1,soFromCurrent);
                if (   (  Read (Buffer^,L) > 0  ) and
                       (  Buffer = Delimiter  )
                    ) then
                begin
                    Inc (Pos);
                    { запоминаем позицию разделителя }
                    Positions [Pos] := Position-L;
                end
                else
                    Seek (-L,soFromCurrent);
            end;
            FreeMem (Buffer);
            Buffer := NIL;
            { после того, как нашли разделители строк,
              начинаем читать строки }
            Position := 0;
            for I := 0 to Pos do
            begin
                if ( I = 0 ) then
                    L := Positions [I]
                else
                    L := Positions [I] - Positions [I-1] - Length (Delimiter);
                Buffer := AllocMem (L+1);
                if (  Read (Buffer^,L) > 0  ) then
                begin
                    { здесь можно передать строку на дальнейший парсинг }
                    Add (Buffer);
                end;
                FreeMem (Buffer);
                Buffer := NIL;
                Seek ( Length (Delimiter), soFromCurrent );
            end;
        end;
    finally
        if Assigned (Stream) then
            FreeAndNil (Stream);
    end;
end;
сохранение ты выполняешь в обратном порядке, обходя строки своего списка, выделяя из них необходимые данные и записывая вначале в поток, а затем сохраняя его в файл, используя методы TMemoryStream Write и SaveToFile.

затем с помощью этого класса ты сможешь легко заполнить данными любой визуальный компонент
Ⓐ свобода сопротивление солидарность
min@y™

min@y™ (статус: Доктор наук), 22 декабря 2010, 13:06 [#14]:

2mirt.steelwater: перед FreeAndNil() вызов Assigned() не нужен.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
mirt.steelwater

mirt.steelwater (статус: Посетитель), 22 декабря 2010, 13:24 [#15]:

нужен. если Stream := TMemoryStream.Create; не сработает, то в Stream будет NIL и FreeAndNil (NIL) вызовет исключение. Конечно, сложно себе представить ситуацию, когда такое будет, но все же она возможна - конструктор может дать сбой в условиях "жесткого" тестирования. еще правильнее написать так:
try
    Stream := TMemoryStream.Create;
    if not Assigned (Stream) then
        raise Exception.CreateFmt ('Ошибка создания экземпляра класса %s !',[Stream.ClassName]);
finally
    if Assigned (Stream) then
        FreeAndNil (Stream);
end;
Ⓐ свобода сопротивление солидарность
Вадим К

Вадим К (статус: Академик), 22 декабря 2010, 13:33 [#16]:

Конструктор в try finally не заключают. Если объект не создался, то и удалять нечего:)
к тому же FreeAndNil спокойно игнорирует nil.
Так что выше - идусский код.
Но в этом коде есть большая ошибка. Пускай конструктор действительно не отработал. А переменную для объекта не занулили... вот тут и получим исключение:)
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 22 декабря 2010, 13:36 [#17]:

Да, я был неправ. Не посмотрел код полностью. Создавать объекты между try ... finally - это не комильфо. Я вот так пишу:
Stream:= TMemoryStream.Create();
try
  // работа тут
finally
  Stream.Free(); // здесь гарантированно Stream <> nil
end;
Если предположить, что конструктор может дать исключение, то я пишу вот так:
try
  Stream:= TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    // работа тут
  finally
    Stream.Free()
  end;
except
  // обработка исключения, выдача сообщения об ошибке.
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 22 декабря 2010, 13:44 [#18]:

Цитата (Вадим К):

А переменную для объекта не занулили... вот тут и получим исключение:)

Во-во! Я щас проверил, если указатель = nil (инициализирован), то никакого Acсess violation не возникает. А локальные переменные таки получают случайные значения. Я посмотрел щас исходники FreeEndNil() и TObject.Free(). Так и быть должно.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
mirt.steelwater

mirt.steelwater (статус: Посетитель), 22 декабря 2010, 13:53 [#19]:

да, все верно, я протупил - нужно инициализировать. но почему нельзя конструктор вызывать внутри try ?
если бы я делал так
with TStream.Create do
try
    { do something }
finally
    Free;
end;
то понятно, но вообще в чем разница - если конструктор до try или после - я особых различий в выполнении не вижу, а они есть?
Ⓐ свобода сопротивление солидарность
min@y™

min@y™ (статус: Доктор наук), 22 декабря 2010, 14:12 [#20]:

Цитата (mirt.steelwater):

если конструктор до try или после - я особых различий в выполнении не вижу, а они есть?

Зайди вот сюда и поотвечай на вопросы анкеты. Узнаешь много интересного, гарантирую. Правильные ответы ты увидишь по окончании теста. Особое внимание удели вопросу №5.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:30
Выполнено за 0.04 сек.