Студопедия — Implementation
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Implementation






uses MainUnit;

 

Здесь идет обращение к MainForm, и данная форма должна быть к этому моменту (то есть моменту создания ControlForm) уже созданной.

По умолчанию при создании приложения полагается, чтобы при запуске выводилась только главная форма. Однако в данном случае в программе должны быть видны обе формы. Обязательно, у ControlForm установить свойство Visible:= true. Иначе форма будет не видна при запуске программы.

 

 

 

 

Рис. 85.

 


Можно описать тот же код, с точностью до перемены ссылок, в обработчике MainForm.OnCreate главной формы. Для того чтобы выбрать нужный модуль, нажмите на кнопку панели инструментов (выбрать модуль для редактирования). Соседняя кнопка служит для выбора форм (выбрать форму для редактирования). Следующая кнопка – переключатель модуль/форма.

 


Первая форма создается раньше второй. Следовательно, и событие OnCreate у нее возникает еще до того, как создана вторая форма, и значит попытка доступа к ней (попытка установить ее положение) вызовет ошибку.

 

13. Оставим главной форме только предназначение экрана. Удалите код внутри обработчиков кнопок, а также сами кнопки.

procedure TMainForm.MediaOpenBtnClick (Sender: TObject);

Begin

End;

procedure TMainForm.SetColorBtnClick (Sender: TObject);

Begin

End;

Установите медиапроигрывателю Visible:= false, переместите его поверх панели. Если панель в форму добавлена позже проигрывателя, то проигрыватель окажется под панелью. Поэтому предварительно поменяйте порядок – щелкните правой кнопкой мыши на проигрыватель и выберите "Bring To Front".

 


Теперь измените клиентскую высоту формы. Экран готов.

 


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

procedure TControlForm.PosTimerTimer(Sender: TObject);
begin
PosTrkBar.Position:= MainForm.MPlayer.Position;
end;

procedure TControlForm.PosTrkBarChange(Sender: TObject);
begin
if not PosTimer.Enabled then
MainForm.MPlayer.Position:= PosTrkBar.Position;
end;

 

В обработчике кнопки загрузки помещается код, похожий на тот, что уже писали.

Код относится к компонентам главной формы. Из-за этого необходимо указывать вторую форму, когда обращаются к ее компонентам, хотя и так находятсяся в обработчике второй формы.

Обратите внимание на два таймера – один запускает визуализацию, а другой двигает бегунок. Передвижения бегунка действенны, только когда воспроизведение остановлено – PosTimer.Enabled:= false. Иначе происходит конфликт – таймер меняет позицию бегунка, а бегунок в ответ меняет позицию проигрывателя. Если необходимо менять позицию во время воспроизведения, придется вводить дополнительные проверки.

Когда запись остановлена, можно поменять ее позицию тем же бегунком. Кнопки управления программно запускают и останавливают проигрыватель. Пока файл не загружен, их следует отключить, иначе при нажатии на них произойдет ошибка. Последняя кнопка определит, проигрывать ли запись в цикле.

 

procedure TControlForm.PlaySpBtnClick(Sender: TObject);
begin
MainForm.MPlayer.Play;
PosTimer.Enabled:= true;
end;

procedure TControlForm.PauseSpBtnClick(Sender: TObject);
begin
MainForm.MPlayer.Pause;
PosTimer.Enabled:= false;
end;

procedure TControlForm.StopSpBtnClick(Sender: TObject);
begin
MainForm.MPlayer.Stop;
PosTimer.Enabled:= false;
end;

 

Запуская и останавливая проигрыватель, мы запускаем и останавливаем таймер. Необходимо внести изменения в код в модуле MainUnit, событие OnNotify проигрывателя:

procedure TMainForm.MPlayerNotify(Sender: TObject);
begin
if ControlForm.RewSpBtn.Down then
with MPlayer do
if NotifyValue = nvSuccessful then
begin
Notify:= true;
Play;
end;
end;

 

Здесь происходит проверка, зажата ли кнопка "цикличного воспроизведения" во второй форме. При открытии файла необходимо включить все кнопки и бегунок (изначально Enabled:= false), запустить таймеры, настроить PosTrkBar на длину записи и вывести название воспроизводимого файла в Caption формы:

 

procedure TControlForm.MediaOpenSpBtnClick(Sender: TObject);
begin
with MainForm do
if MediaOpenDlg.Execute then
begin
MPlayer.FileName:= MediaOpenDlg.FileName;
MPlayer.Open;
MPlayer.Display:= ScreenPanel;
MPlayer.DisplayRect:= Rect(0, 0, ScreenPanel.Width, ScreenPanel.Height);
MPlayer.Play;
LifeImage.Visible:= not (ExtractFileExt(MPlayer.FileName) = '.avi');
LifeTimer.Enabled:= true;
ControlForm.PosTimer.Enabled:= true;
ControlForm.PosTrkBar.Max:= MPlayer.Length;
ControlForm.PosTrkBar.Enabled:= true;
ControlForm.PlaySpBtn.Enabled:= true;
ControlForm.PauseSpBtn.Enabled:= true;
ControlForm.StopSpBtn.Enabled:= true;
ControlForm.Caption:= MediaOpenDlg.Filename;
end;
end;

 

14. Добавить к медиапроигрывателю игру «жизнь». Для управления визуализацией потребуется отдельная форма. С помощью этой формы можно очищать, заполнять и редактировать конфигурации клеток игры «Жизнь». Более того, появляется возможность сохранять интересные комбинации в специальные файлы с введенным нами расширением.lif. Кроме того, можно будет управлять скоростью «жизни» и, что уже реализовывалось, задавать цвет поля и клеток.

Создайте новую форму, сохраните ее модуль, поместите на нее пять кнопок Button, одну SpeedButton, один TrackBar, две надписи Label и диалоги загрузки и сохранения.

Измените параметры компонент:

LifeSaveDlg: TSaveDialog

DefaultExt = ‘lif’

Filter = ‘файлы игры «Жизнь» (*.lif)|*.lif’

Title = ‘Загрузить позицию игры’

LifeOpenDlg: TOpenDialog

DefaultExt = ‘lif’

Filter = ‘файлы игры «Жизнь» (*.lif)|*.lif’

Options.ofFileMustExist = true

Title = ‘Сохранить текущую позицию игры’

 

 


В модуле второй формы добавьте строки, при открытии файла выводящие или скрывающие третью форму и отпускающие кнопку.

procedure TControlForm.MediaOpenSpBtnClick(Sender: TObject);
begin
with MainForm do
if MediaOpenDlg.Execute then
begin
MPlayer.FileName:= MediaOpenDlg.FileName;
MPlayer.Open;
MPlayer.Display:= ScreenPanel;
MPlayer.DisplayRect:= Rect(0, 0, ScreenPanel.Width, ScreenPanel.Height);
MPlayer.Play;
LifeImage.Visible:= not (ExtractFileExt(MPlayer.FileName) = '.avi');
LifeForm.Visible:= LifeImg.Visible;

LifeForm.EditSpBtn.Down:= false;

LifeTimer.Enabled:= true;
ControlForm.PosTimer.Enabled:= true;
ControlForm.PosTrkBar.Max:= MPlayer.Length;
ControlForm.PosTrkBar.Enabled:= true;
ControlForm.PlaySpBtn.Enabled:= true;
ControlForm.PauseSpBtn.Enabled:= true;
ControlForm.StopSpBtn.Enabled:= true;
ControlForm.Caption:= MediaOpenDlg.Filename;
end;
end;

 

На новой форме LifeForm располагаются кнопки LifeOpenBtn, LifeSaveBtn, FillBtn, ClearBtn, SetColorBtn, EditSpBtn, SpeedTrkBar. Настройте компоненты новой формы:

LifeForm: TLifeForm

BorderStyle = bsToolWindow

Caption = ‘Визуализация’

ClientWidth = 402

ClientHeight = 56

EditSpBtn: TSpeedButton

AllowAllUp = true

Caption = ‘редактировать’

GroupIndex = 1

SpeedTrkBar:TTrackBar

Frequency = 50

Max = 1000

Min = 1

Position = 100

ThumbLength = 15

TickMarks = tmTopLeft

 

В обработчике загрузки медиафайла необходимо добавить следующие строки.

LifeForm.Visible:= LifeImg.Visible;

Если LifeImg видимый, т.е. нужна визуализация для звукового файла, то форма управления визуализацией тоже выводится, если же LifeImg спрятан (воспроизводится видеофайл), то и присутствие формы управления визуализацией излишне.

LifeForm.EditSpBtn.Down:= false;

Кнопка EditSpBtn будет отвечать за редактирование клеток (если она нажата, включен режим редактирования). Во время редактирования таймер LifeTimer должен быть отключен. Поскольку здесь, при открытии, мы включаем этот таймер, то режим редактирования должен быть отключен и кнопка отпущена.

MPlayer.Play;
LifeImg.Visible:= not (ExtractFileExt(MPlayer.FileName) = '.avi');
LifeForm.Visible:= LifeImage.Visible;
LifeForm.EditSpBtn.Down:= false;LifeTimer.Enabled:= true;
ControlForm.PosTimer.Enabled:= true;

….

 

15. Необходимо описать обработчики событий для новых компонентов. Определим при создании формы ее местоположение.

 

В модуле LifeUnit:

var LifeForm: TLifeForm;







Дата добавления: 2015-09-04; просмотров: 390. Нарушение авторских прав; Мы поможем в написании вашей работы!



Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Эндоскопическая диагностика язвенной болезни желудка, гастрита, опухоли Хронический гастрит - понятие клинико-анатомическое, характеризующееся определенными патоморфологическими изменениями слизистой оболочки желудка - неспецифическим воспалительным процессом...

Признаки классификации безопасности Можно выделить следующие признаки классификации безопасности. 1. По признаку масштабности принято различать следующие относительно самостоятельные геополитические уровни и виды безопасности. 1.1. Международная безопасность (глобальная и...

Прием и регистрация больных Пути госпитализации больных в стационар могут быть различны. В цен­тральное приемное отделение больные могут быть доставлены: 1) машиной скорой медицинской помощи в случае возникновения остро­го или обострения хронического заболевания...

В эволюции растений и животных. Цель: выявить ароморфозы и идиоадаптации у растений Цель: выявить ароморфозы и идиоадаптации у растений. Оборудование: гербарные растения, чучела хордовых (рыб, земноводных, птиц, пресмыкающихся, млекопитающих), коллекции насекомых, влажные препараты паразитических червей, мох, хвощ, папоротник...

Типовые примеры и методы их решения. Пример 2.5.1. На вклад начисляются сложные проценты: а) ежегодно; б) ежеквартально; в) ежемесячно Пример 2.5.1. На вклад начисляются сложные проценты: а) ежегодно; б) ежеквартально; в) ежемесячно. Какова должна быть годовая номинальная процентная ставка...

Выработка навыка зеркального письма (динамический стереотип) Цель работы: Проследить особенности образования любого навыка (динамического стереотипа) на примере выработки навыка зеркального письма...

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия