Форум: "Начинающим";
Текущий архив: 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.047 c