-=C@$PeR=-
06.11.2009, 22:39
Вопрос: № 1
Я пишу программу будильник, в ней есть такая функция, как воспроизвести музыкальный файл, который тебя и будет утром будить, кнопка такая нажимаешь и прослушиваешь, что ты за песню выбрал. Я нажимаю воспроизвести (кнопка Play), появляется ползунок/бегунок (TrackBar1.Visible := True; ) Запускается таймер с интервалом 1000 миллисекунд, он и меняет положение ползунка каждую секунду и если песня кончилась, то присваивает кнопке плэй, вид и тэг, что она типа уже не плэй, а стоп, меняет положение ползунка на начало и сам себя (таймер) выключает. Теперь сам вопрос, как сделать, чтобы ползунок показывал сколько песни проиграло, сколько осталось. Проще говоря, как получить сколько длиться песня? Как я понимаю когда получу миллисекунды (продолжительность трэка), то мне надо сделать так: (TrackBar1.Max := «Те самые миллисекунды»; ) Воспроизводит звук TMediaPlayer . Да и вообще посоветуйте как это лучше реализовать, если я не правильно придумал?
Вопрос: №2
Я пишу будильник, но уже приличный, там будут напоминания дней рождений, простые напоминания и сами будильники. На форме SettingForm есть ListView, нажимаю кнопку «Новый» (будильник), появляется форма, настраиваю, жму «ОК» и будильник добавляется в список «ListView» Будильник это объект: TClock = class(TObject). Мне надо как то привязать будильник к конкретной строке списка, чтобы когда я выделял в списке нужный будильник и нажимал «Изменить» то он передавал свои параметры той форме про которую я говорил выше. Как передавать я знаю, как привязывать объект и потом его получать не могу понять, объясните кто нибудь пожалуйста. Вот код нажатия на кнопку «Новый», я походу не правильно добавляю объект. Если правильно то как его вызывать?
procedure TForm1.BtnNewClockClick(Sender: TObject);
var Alarm : TClock;
begin
FormNewClock := TFormNewClock.Create(self);
FormNewClock.ReserveVolume := FormNewClock.GetVolume; //зарезервировать текущую громкость звука
try
if FormNewClock.ShowModal = mrOK then //если в FormNewClock нажали "ОК" то выполняется код
begin
Alarm := TClock.Create;
FormNewClock.SetData(Alarm); //получить настройки будильника из формы FormNewClock
if (Alarm.FMode = ONE_ALARM) then
begin
with ListViewAlarm.Items.Add do
begin
Caption := Alarm.FTextMessage;
SubItems.Add(DateToStr(FormNewClock.DatePicker.Dat e));
SubItems.Add(TimeToStr(FormNewClock.TimePicker.Tim e));
SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
Checked := True;
end;
end;
if (Alarm.FMode = EVERY_DAY) then
begin
with ListViewAlarm.Items.Add do
begin
Caption := Alarm.FTextMessage;
DecodeTime(FormNewClock.TimePicker.Time, Alarm.FHour, Alarm.FMin, Alarm.FSec, Alarm.FMilSec);
if (Alarm.FHour >= HourOf(Now)) and (Alarm.FMin > MinuteOf(Now))
then SubItems.Add('сегодня ')
else SubItems.Add('завтра ');
SubItems.Add(TimeToStr(FormNewClock.TimePicker.Tim e));
SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
SubItems.AddObject('Будильник', Alarm);
Checked := True;
end;
end;
if (Alarm.FMode = EVERY_WEEK) then
begin
with ListViewAlarm.Items.Add do
begin
Caption := Alarm.FTextMessage;
SubItems.Add(IntDayWeekToStr(Alarm.FDayOfWeek));
SubItems.Add(TimeToStr(FormNewClock.TimePicker.Tim e));
SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
SubItems.AddObject('Будильник', Alarm);
Checked := True;
end;
end;
if (Alarm.FMode = EVERY_HOUR) then
begin
with ListViewAlarm.Items.Add do
begin
Caption := Alarm.FTextMessage;
DecodeTime(FormNewClock.TimePicker.Time, Alarm.FHour, Alarm.FMin, Alarm.FSec, Alarm.FMilSec);
SubItems.Add('ежедневно ');
SubItems.Add(IntToStr(Alarm.FMin)+' мин');
SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
SubItems.AddObject('Будильник', Alarm);
Checked := True;
end;
end;
if (Alarm.FMode = EVERY_MONTH) then
begin
with ListViewAlarm.Items.Add do
begin
Caption := Alarm.FTextMessage;
SubItems.Add((FormNewClock.EditEveryYear.Text)+'-го числа');
SubItems.Add(TimeToStr(FormNewClock.TimePicker.Tim e));
SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
SubItems.AddObject('Будильник', Alarm);
Checked := True;
end;
end;
if (Alarm.FMode = EVERY_YEAR) then
begin
with ListViewAlarm.Items.Add do
begin
Caption := Alarm.FTextMessage;
SubItems.Add((FormNewClock.EditEveryYear.Text)+'-го '+IntMonthToStr(Alarm.FMonth));
SubItems.Add(TimeToStr(FormNewClock.TimePicker.Tim e));
SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
SubItems.AddObject('Будильник', Alarm);
Checked := True;
end;
end;
end; //чтобы в дальнейшем их сохранить и добавить запись в ListView
finally
FormNewClock.Free;
waveOutSetVolume(WAVE_MAPPER, FormNewClock.ReserveVolume); //востановить громкость из резерва
end;
end;
Я пишу программу будильник, в ней есть такая функция, как воспроизвести музыкальный файл, который тебя и будет утром будить, кнопка такая нажимаешь и прослушиваешь, что ты за песню выбрал. Я нажимаю воспроизвести (кнопка Play), появляется ползунок/бегунок (TrackBar1.Visible := True; ) Запускается таймер с интервалом 1000 миллисекунд, он и меняет положение ползунка каждую секунду и если песня кончилась, то присваивает кнопке плэй, вид и тэг, что она типа уже не плэй, а стоп, меняет положение ползунка на начало и сам себя (таймер) выключает. Теперь сам вопрос, как сделать, чтобы ползунок показывал сколько песни проиграло, сколько осталось. Проще говоря, как получить сколько длиться песня? Как я понимаю когда получу миллисекунды (продолжительность трэка), то мне надо сделать так: (TrackBar1.Max := «Те самые миллисекунды»; ) Воспроизводит звук TMediaPlayer . Да и вообще посоветуйте как это лучше реализовать, если я не правильно придумал?
Вопрос: №2
Я пишу будильник, но уже приличный, там будут напоминания дней рождений, простые напоминания и сами будильники. На форме SettingForm есть ListView, нажимаю кнопку «Новый» (будильник), появляется форма, настраиваю, жму «ОК» и будильник добавляется в список «ListView» Будильник это объект: TClock = class(TObject). Мне надо как то привязать будильник к конкретной строке списка, чтобы когда я выделял в списке нужный будильник и нажимал «Изменить» то он передавал свои параметры той форме про которую я говорил выше. Как передавать я знаю, как привязывать объект и потом его получать не могу понять, объясните кто нибудь пожалуйста. Вот код нажатия на кнопку «Новый», я походу не правильно добавляю объект. Если правильно то как его вызывать?
procedure TForm1.BtnNewClockClick(Sender: TObject);
var Alarm : TClock;
begin
FormNewClock := TFormNewClock.Create(self);
FormNewClock.ReserveVolume := FormNewClock.GetVolume; //зарезервировать текущую громкость звука
try
if FormNewClock.ShowModal = mrOK then //если в FormNewClock нажали "ОК" то выполняется код
begin
Alarm := TClock.Create;
FormNewClock.SetData(Alarm); //получить настройки будильника из формы FormNewClock
if (Alarm.FMode = ONE_ALARM) then
begin
with ListViewAlarm.Items.Add do
begin
Caption := Alarm.FTextMessage;
SubItems.Add(DateToStr(FormNewClock.DatePicker.Dat e));
SubItems.Add(TimeToStr(FormNewClock.TimePicker.Tim e));
SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
Checked := True;
end;
end;
if (Alarm.FMode = EVERY_DAY) then
begin
with ListViewAlarm.Items.Add do
begin
Caption := Alarm.FTextMessage;
DecodeTime(FormNewClock.TimePicker.Time, Alarm.FHour, Alarm.FMin, Alarm.FSec, Alarm.FMilSec);
if (Alarm.FHour >= HourOf(Now)) and (Alarm.FMin > MinuteOf(Now))
then SubItems.Add('сегодня ')
else SubItems.Add('завтра ');
SubItems.Add(TimeToStr(FormNewClock.TimePicker.Tim e));
SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
SubItems.AddObject('Будильник', Alarm);
Checked := True;
end;
end;
if (Alarm.FMode = EVERY_WEEK) then
begin
with ListViewAlarm.Items.Add do
begin
Caption := Alarm.FTextMessage;
SubItems.Add(IntDayWeekToStr(Alarm.FDayOfWeek));
SubItems.Add(TimeToStr(FormNewClock.TimePicker.Tim e));
SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
SubItems.AddObject('Будильник', Alarm);
Checked := True;
end;
end;
if (Alarm.FMode = EVERY_HOUR) then
begin
with ListViewAlarm.Items.Add do
begin
Caption := Alarm.FTextMessage;
DecodeTime(FormNewClock.TimePicker.Time, Alarm.FHour, Alarm.FMin, Alarm.FSec, Alarm.FMilSec);
SubItems.Add('ежедневно ');
SubItems.Add(IntToStr(Alarm.FMin)+' мин');
SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
SubItems.AddObject('Будильник', Alarm);
Checked := True;
end;
end;
if (Alarm.FMode = EVERY_MONTH) then
begin
with ListViewAlarm.Items.Add do
begin
Caption := Alarm.FTextMessage;
SubItems.Add((FormNewClock.EditEveryYear.Text)+'-го числа');
SubItems.Add(TimeToStr(FormNewClock.TimePicker.Tim e));
SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
SubItems.AddObject('Будильник', Alarm);
Checked := True;
end;
end;
if (Alarm.FMode = EVERY_YEAR) then
begin
with ListViewAlarm.Items.Add do
begin
Caption := Alarm.FTextMessage;
SubItems.Add((FormNewClock.EditEveryYear.Text)+'-го '+IntMonthToStr(Alarm.FMonth));
SubItems.Add(TimeToStr(FormNewClock.TimePicker.Tim e));
SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
SubItems.AddObject('Будильник', Alarm);
Checked := True;
end;
end;
end; //чтобы в дальнейшем их сохранить и добавить запись в ListView
finally
FormNewClock.Free;
waveOutSetVolume(WAVE_MAPPER, FormNewClock.ReserveVolume); //востановить громкость из резерва
end;
end;