| 
| 
 | Вопрос # 4 808/ вопрос открыт / | 
 |  Здравствуйте, эксперты!Мне необходимо реализовать плей лист в делфи. В моем проигрователе я использую стандартные компоненты и образы. Всё реализовано нехватает бегунка, плейлиста и способа сохранить плейлист. Я надеюсь на вашу помощь, если вам будет не трудно, то помогите пожалуйста.
 
|  |   Вопрос задала: Ящерка (статус: Посетитель)Вопрос отправлен: 11 декабря 2010, 19:07
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 30; последнее сообщение — 24 декабря 2010, 18:51; участников в обсуждении: 6. Страницы: [1] [2] [Следующая »]  
|   | min@y™ (статус: Доктор наук), 11 декабря 2010, 19:25 [#1]:Чо не получается? Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Ящерка (статус: Посетитель), 11 декабря 2010, 19:40 [#2]:Выдает ошибку. Какую я к сожалению не помню, ноутбук не рядом. Я прошлась по сйтам, но достойных ответов я там не увидела, доверяя этому сайту я решила задать вопрос тут. Я в Делфи не очень хорошо разбираюсь, пока учусь.Это мне нужно для лабораторной, я пыталась реализовать через TListBox, но проблем возникает много. |  
|   | 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™ (статус: Доктор наук), 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 (статус: Посетитель), 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™ (статус: Доктор наук), 22 декабря 2010, 13:06 [#14]:2mirt.steelwater: перед FreeAndNil() вызов Assigned() не нужен. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | 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™ (статус: Доктор наук), 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™ (статус: Доктор наук), 22 декабря 2010, 13:44 [#18]: Цитата (Вадим К): А переменную для объекта не занулили... вот тут и получим исключение  Во-во! Я щас проверил, если указатель = nil (инициализирован), то никакого Acсess violation не возникает. А локальные переменные таки получают случайные значения. Я посмотрел щас исходники FreeEndNil() и TObject.Free(). Так и быть должно.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | mirt.steelwater (статус: Посетитель), 22 декабря 2010, 13:53 [#19]:да, все верно, я протупил - нужно инициализировать. но почему нельзя конструктор вызывать внутри try ? если бы я делал так
 
 with TStream.Create do
try
    { do something }
finally
    Free;
end;то понятно, но вообще в чем разница - если конструктор до try или после - я особых различий в выполнении не вижу, а они есть?Ⓐ свобода сопротивление солидарность |  
|   | min@y™ (статус: Доктор наук), 22 декабря 2010, 14:12 [#20]: Цитата (mirt.steelwater): если конструктор до try или после - я особых различий в выполнении не вижу, а они есть?  Зайди вот сюда и поотвечай на вопросы анкеты. Узнаешь много интересного, гарантирую. Правильные ответы ты увидишь по окончании теста. Особое внимание удели вопросу №5.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Страницы: [1] [2] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |