|
Вопрос # 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] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|