Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Вниз

Медиаплеер на Delphi   Найти похожие ветки 

 
m-kirill-2003 ©   (2006-10-22 15:22) [0]

Нужна срочно Ваша помощь
Пишу медиа плеер на Delphi, но при запуске глюк.
Проигрывает пару секунду и завершает работу. Привожу текст программы:
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 ComCtrls, ExtCtrls, StdCtrls, MPlayer, ToolWin;
type
 TForm1 = class(TForm)
   Button1: TButton;
   MediaPlayer1: TMediaPlayer;
   Timer1: TTimer;
   OpenDialog1: TOpenDialog;
   TrackBar1: TTrackBar;
   DateTimePicker1: TdateTimePicker;
   Panel1: TPanel;
   procedure Button1Click(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
   procedure TrackBar1Change(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;
var
 Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
 opendialog1.Execute;
 mediaplayer1.filename:=opendialog1.filename;
 mediaplayer1.timeformat:=tfmilliseconds;
 mediaplayer1.open;
 timer1.enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 trackbar1.position:=round(mediaplayer1.position*trackbar1.max/mediaplayer1.length);
 datetimepicker1.time:=(mediaplayer1.position/(24*60*60*1000)+0.0000001);
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
 mediaplayer1.position:=round(trackbar1.position*mediaplayer1.length/trackbar1.max);
end;
end.

Прикол в том, что есть как бы полоса прокрутки (элемент trackbar) и что то типа счетчика времени (datetime picker) всё связано с помощью таймера. Ошибка в том, что плеер начинает играть, а когда переходит в процедуру таймера, то воспроизведение останавливается... ПОМОГИТЕ


 
Ketmar ©   (2006-10-22 15:24) [1]

никогда не думал, что при присвоении чего-то свойству position трэкбара у него (трэкбара) вызывается событие OnChange?


 
m-kirill-2003 ©   (2006-10-22 15:27) [2]

Это что бы можнобыло с помощью полосы перемотки перематывать файл


 
Ketmar ©   (2006-10-22 15:32) [3]

читай внимательно [1]. думай.


 
Virgo_Style ©   (2006-10-22 15:36) [4]

m-kirill-2003 ©   (22.10.06 15:27) [2]
Это что бы можнобыло с помощью полосы перемотки перематывать файл


Это ясно, но реализация-то ошибочна


 
m-kirill-2003 ©   (2006-10-22 15:39) [5]

Это сделана для того, что когда меняется значение полосы прокрутки меняется позиция файл, воспроизводимого в плеере... Да если это убрать, то все равно такая же ошибка... Подскажи а? Ты ведь знаешь...


 
Проггер из библиотеки   (2006-10-22 15:43) [6]

Насколько я помню, TrackBar"ом всё равно глючно получается, скачет сильно и т.д. Как насчёт свой компонент написать и там всё культурно сделать?


 
Чародей ©   (2006-10-22 15:45) [7]


> Насколько я помню, TrackBar"ом всё равно глючно получается,
>  скачет сильно и т.д. Как насчёт свой компонент написать
> и там всё культурно сделать?

Не плох орешек


 
m-kirill-2003 ©   (2006-10-22 15:49) [8]


> Это ясно, но реализация-то ошибочна
но почему то работает? Странно да?
Вы мне помогите с тем, что мне надо, чтобы проигрыватель не стопорился.


 
Проггер из библиотеки   (2006-10-22 15:52) [9]

> [7]
Почему орешек, если не секрет?

> [8]
Уже говорили: OnChange вызывается, когда в таймерной процедуре меняешь положение (change"ишь) положение TrackBar"а. Ищи в справке по TrackBar"у другое событие. по-моему, там было такое.


 
m-kirill-2003 ©   (2006-10-22 16:04) [10]

Боже шь ты мой... мне дадут нормальный ответ тут или нет?
Как сделать что бы воспроизведение не прерывалось....


 
Проггер из библиотеки   (2006-10-22 16:09) [11]

[9]
Скопируй, пожалуйста, из справки по Дельфи список событий TrackBar"а (я сейчас не дома). Выберем, будем думать дальше.


 
m-kirill-2003 ©   (2006-10-22 16:13) [12]

причем тут это? Причем тут trackbar? Ошибка, которую мне надо устронить в том, что когда выполняется команда  timer1.enabled:=true; начинается процедура таймера и вопроизведение останавливается...


 
Проггер из библиотеки   (2006-10-22 16:17) [13]

Слишком самоуверенно для начинающего.

Смотрим, что делает прога...

procedure TForm1.Timer1Timer(Sender: TObject);
begin
trackbar1.position:=round(mediaplayer1.position*trackbar1.max/mediaplayer1.length); {Здесь меняется положение TrackBar"а и он автоматически вызывает OnChange, см. туда}
datetimepicker1.time:=(mediaplayer1.position/(24*60*60*1000)+0.0000001);
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
mediaplayer1.position:=round(trackbar1.position*mediaplayer1.length/trackbar1.max); {После перехода сюда из процедуры таймера меняется положение MediaPlayer"а - это и есть причина}
end;


 
m-kirill-2003 ©   (2006-10-22 16:29) [14]

Бля.... Я - идиота кусок, да еще и какой... Точно... Все работает...
Вот список событйи из справки
In TTrackBar

OnChange

Derived from TWinControl

OnEnter
 OnExit
 OnKeyDown
 OnKeyPress
 OnKeyUp

Derived from TControl

OnContextPopup
 OnDragDrop
 OnDragOver
 OnEndDock
 OnEndDrag
 OnStartDock
 OnStartDrag


 
Проггер из библиотеки   (2006-10-22 16:34) [15]

Да, чяестно говоря, ожидал чего-то получше, чем этот список. Там, кстати, ещё OnClick должен быть, если не ошибаюсь. Можно попробовать отловить отпускание левой кнопки мыши. Жду результатов по проверке этих двух вариантов или вопросов по их реализации.


 
@!!ex ©   (2006-10-22 16:39) [16]

Да зафиг другое событие???


var
 ChangePosition:boolean = false;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 ChangePosition:=true;
 
 ...

 ChangePosition:=false;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
 if not ChangePosition then
 begin
 end;
end;


 
Проггер из библиотеки   (2006-10-22 16:40) [17]

> [16]
Не мерцает//скачет?


 
Ketmar ©   (2006-10-22 16:43) [18]

>[16] @!!ex(c) 22-Oct-2006, 16:39
>Да зафиг другое событие???
чтобы удобно было. OnSeek -- оно весьма удобно. %-)


 
@!!ex ©   (2006-10-22 16:43) [19]

Лет 6 назад писал плеер. Использовал флаг. Все отлично работало. не мерцало не скакало. :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.045 c
2-1161598700
id
2006-10-23 14:18
2006.11.05
Вычисления значения функции.


6-1150542080
Dark_Star
2006-06-17 15:01
2006.11.05
Передача данных по сети


2-1161313889
Officeman
2006-10-20 07:11
2006.11.05
Каким Образом можно убрать определенные части их текста.


4-1150390635
PRT
2006-06-15 20:57
2006.11.05
Запустить приложение свернутым


6-1150219083
Интересующийся
2006-06-13 21:18
2006.11.05
Как определьть IP указывающий основной шлюз?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский