RDM/2 The Russian Electronic Developer Magazine  
RDM/2 Русский электронный журнал разработчика  
ДомойОт редактораПишите намОбратная связьRU/2

Рисуем CD плеер

Вместо предисловия

В поисках простого и в то же время функционального средства программирования под OS/2 я попробовал IBM VisualAge C++, SmallTalk, VisualRexx, Borland C++ и Sibyl. Я не профессиональный программист и программировал до этого только под DOS на С++. В мои обязанности не входит программирование, тем более под OS/2 - просто мне это интересно. Последний раз я программировал на Pascal семь лет назад, когда делал диплом (до этого был Basic и Fortran), потом я выбрал C/C++ за не многословность и лаконичность. Спор о том, что лучше - С или Паскаль, наверное, начинается с того, что С изначально создавался как язык для профессионалов, в то время как Паскаль был языком для обучения программированию. И хоть мне больше нравится Си, хочу заметить, что Паскаль очень мощный и удобный язык, а качество и полезность программы скорее зависит от программиста, чем от языка. Так как я длительное время игнорировал Sibyl только за то, что входным языком для него является Паскаль, хочу немного рассказать об этом средстве, но ни в коем случае не учить кого-либо программированию (самого бы кто научил).

Несколько слов о Sibyl

SpeedSoft Sibyl является коммерческим продуктом. Существуют версии для Windows, Linux и OS/2. Минимальные требования для OS/2 версии: OS/2 Warp3 с фикспаком 17 или OS/2 Warp4, 8Мб памяти (16 рекомендуется), видеорежиим 800х600 и 20 Мб на жестком диске. Взять демо-версию можно здесь (SpeedSoft Sibyl 2.0 Demo Version for OS/2 including Fixpack 3a, 6.8Mb). В демо-версии существует ограничение на количество форм (окон) - в одном проекте их может быть три. Для небольших приложений этого вполне достаточно. Стоит заметить, что Sibyl полностью схож с Delphi - внешне и на уровне языка (однако чтобы перегнать проект из Delphi, придется поковырятся, так как некоторые модули и функции различны). В демо-версии нет помощи. Ее можно взять здесь: tutorial.zip, 305k.

Обьектно-ориентированное программирование

Все не так уж сложно. Новичку достаточно знать, что для каждого обьекта (например "кнопки") существует Класс, описывающий этот обьект. Класс влючает в себя свойства (Properties) обьекта (размер, положение, цвет и т.д) и события (Events), которые могут произойти с этим обьектом (или на какие он может реагировать). Некоторые свойства и события доступны для внешних обьектов, другие могут быть изменены только "внутри" класса.

Итак, начнем

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

Сначала в обыкновенном редакторе значков нарисуем картинки для кнопок Play, Stop, Pause, NextTrack, PreviosTrack, Mute. Все картинки поместим в каталог нашего проекта (вообще-то Sibyl при создании проекта позволяет создать каталог, но я воспользовался клавишей F7 в FileCommander). Для всех кнопок, кроме Next / Prev (слишком быстро меняются, незаметно и потому не надо), создаем две картинки - "активно" Активно и "неактивно" Не активно.

Теперь запустим Sibyl. В меню выбираем Project->New, вводим имя нашего проекта, выбираем (создаем) каталог проекта и создаем проект. Тут я бы посоветовал, взять за правило сразу после создания менять имя обьекта - окно ObjectInspector->закладка Properties->поле Name. Итак, изменим имя пустой формы на CDFORM.

Далее я не буду останавливаться подробно на присвоении имен. Называйте, как Вам нравится.

На пустую форму из палитры обьектов перетаскиваем нужные нам обьекты: CDDevice , TProgressBar , TTrackBar , TSevenSegDisplay , а также по два обьекта TImage для кнопок Play, Stop, Pause, Mute и по одному обьекту TImage для кнопок Next и Prev .

У вас должно получится нечто следующее:

.
Теперь в некоторых обьектах изменим свойства.
Обьект Свойство Значение
CDPlayer TimeFormat tfMilliseconds
TTrackBar Orientation trVertical
TTrackBar Position 50
TTrackBar TickStyle tsNone
TForm BorderIcons по желанию
TForm BorderStyle bsDialog
Для кнопок "не активно" Play, Pause - свойство Visible - True. Для кнопок "активно" Play, Pause - свойство Visible - False. Для кнопок Stop, Mute (активных) - visible True, для неактивных - False. В общем, идея такая - каждый из bitmap должен быть виден один, например PlayON (когда играет плеер).

Теперь напишем обработчики событий. Для этого выбираем обьект, в окне ObjectInspector переходим на закладку Event, выбираем нужное событие (дважды щелкаем мышкой). Будет создана "пустая" функция, в которую надо вписать обработку события:

Я не буду приводить здесь обработчики событий: кому интересно, найдут их в исходных текстах (ниже). Окончательный вариант интерфейса Вы можете увидеть на следующей картинке
Исходные тексты проекта: cdproj.zip, 7k.
Готовый EXE: cdplay.zip, 231k.
Роман Попов.
P.S. В состав Sibyl входят классы для FTP и HTTP сервисов

---
Интересные ссылки:

---

---
Комментариев к странице: 0 | Добавить комментарий
---
Редактор: Дмитрий Бан
Оформление: Евгений Кулешов
(C) Russian Underground/2