Реферат: Разработка игровой программы "Морской бой"
«ИГРА — вид непродуктивной деятельности, мотив которой заключается нев ее результатах, а в самом процессе. В истории человеческого обществапереплеталась с магией, культовым поведением и др.… Свойственна также высшимживотным».
Советскийэнциклопедический словарь
ВВЕДЕНИЕВсе, кто имеет дело с компьютером,так или иначе сталкивались с компьютерными играми, и подавляющее большинство может сходу назватьнесколько игр, которые им особенно понравились. Те, кто уже совсем наигрался,почти наигрался или еше не наигрался, но в процессе общения с компьютером уже начал совмещать игры с чем-нибудь более полезным, возможно,хотели бы придумать какие-нибудь свои, не похожие ни на какие другие игры (1).
<span Times New Roman",«serif»;color:windowtext;mso-ansi-language:RU">Многоезахватывает в таком творчестве. И не сам процесс игры, а разработка игровойвселенной, ее проектирование и реализация. Когда можно слить воедино сценарий,графику, музыку, искусно задуманный и умело запрограммированный алгоритм —создать единый фантастический мир, живущий по законам, которые ты же для него ипридумал.
В данной курсовой работе речь пойдето создании несложной игровой программы «Морской бой», которая и будет являтьсяобъектом исследования.
В первой главе данной курсовой работырассматриваются аспекты программирования игр с использованием визуальныхкомпонентов, в пункте 1.1. приводится аналитический обзор игрового программногообеспечения, классификация игр. В пункте 1.2. приводится описание компонентов,используемых при реализации практической части курсовой работы. В пункте 1.3.показываются возможности использования визуальных компонентов.
Во второй главе приведены этапыразработки программы, такие как постановка задачи, алгоритм реализации иописание пользовательского интерфейса.
В заключении приведенывыводы по курсовой работе, достоинства и недостатки визуальных методовпрограммирования.
Список использованныхисточников содержит полный перечень технической литературы, использованной длянаписания данной курсовой работы.
Приложения содержатблок-схемы всех процедур программы, и текст самой программы.
1. ПРОГРАММИРОВАНИЕ ИГРС ИСПОЛЬЗОВАНИЕМ ВИЗУАЛЬНЫХ КОМПОНЕНТОВ
1.1.<span Times New Roman"">
Аналитический обзорВ последнее время продажипрограммного обеспечения увеличиваются незначительно, в то время как продажиигровых программ возрастают экспоненциально. Игры для платформы Windowsсоставляют подавляющее большинство.Игровое программное обеспечение – это третья по размерам доходов отрасльиндустрии программного обеспечения после текстовых процессоров и электронныхтаблиц (1).
До недавнего времени среда Windowsиспользовалась в основном как платформа для создания игр, первоначальноразработанных для Macintosh. Это осуществлялось набазе пакета QuickTime фирмы Apple. Примерами такихигр могут быть Mysl (Broderbund/Cyan),Wrath of the Gods (Maxis/Luminaria) и некоторыедругие. В ряде случаев использовался пакет Video for Windows, позволяющийотображать оцифрованное видео. Затем появились библиотеки WinG и WinToon, на базекоторых фирма Sierra создала игру King's QuestVII. Это были первые попытки использовать Windows как платформу длясоздания игровых программ. Преимущества такого подхода достаточно очевидны— единый интерфейс, наличие стандартныхдрайверов для большинства мультимедийных устройстви возможность управления ими стандартными способами. Затем появилась новаяверсия— Windows95, в состав которой была включена библиотекаWinG (как подсистема GDI), и передразработчиками открылись более широкие возможности.
Указать точное число компьютерных игрочень трудно. Можно только примерно оценить число различных наименований игр,находящихся на рынке в любое время (2).
Классификация компьютерных игр можетбыть следующая:
1. Приключенческие игры.Игрымогут быть великолепнымсредством рассказа истории. Эти игры представляют собой мультиплицированный рассказ, в котором можно видеть иконтролировать основной персонаж (а иногда и болееодного) в очень детальном повествовании. Это-компьютерные версии обычных повествований, начиная от душещипательных рассказов до технотриллеров,научно-фантастических приключений, фантазий и рассказов, до предела набитыхразными обманами и мошенничествами. Приключенческие игры развиваются вокругразличных загадок и препятствий, которые нужно преодолеть по мере развитиярассказа.
2. Фантастические игры, вкоторых требуется играть некоторую роль (ролевые игры).Их лучше всего определить каккомпьютеризованную версию рассказа Dungeons andDragons («Подземелья и драконы»), но действие не всегдапроисходит в населенном варварами средневековом мире. Часто оно происходит воткрытом космосе или в каких-либо областях будущего. В этих играх обычно нужноуправлять группой персонажей, которые становятся по мере развития игры сильнееи умнее, и делать некоторые другие вещи. Так же изменяются и враги. Самирассказы в играх этого типа обычно менее детальны, чем в приключенческих играх,с большим упором на задачу побить чудовгщ, чемрешить загадки.
3. Имитаторы воздушных икосмических сражений.Это не военные игры, в которых может оказаться неограниченное число вооруженийи врагов, эти игры пытаются быть точнымиимитаторами полетов и сражений на реальных боевыхсамолетах. Эти игры предназначены для тех, ктохочет летать на больших и очень мощных машинах. Кабины пилотов выглядят какнастоящие, инструменты работают как в настоящем бою, оружие является имитацией реальносуществующего, а полетные характеристики самолета (и самолета врага)соответствуют действительным. Имитаторы космических сражений выдуманы, однакоони разработаны с целью точно повторить реальные маневры в космосе.
4. Имитаторы наземных иморских сражений.Игры разработаны для военного оборудования и военныхмашин. Эта категория игр включает в себя симуляторынастоящих подводных лодок, кораблей и танков, и позволяет игрокам испытатьреальные сценарии сражений, и выжить для того, чтобы понять, как использовать правильную тактику вследующей игре.
5. Самолеты, поезда иавтомобили.Вотличие от этих имитаторов, все прочие являются имитаторамивоенного типа или имеют очень сильный упор насражение. Эти же игры не относятся к таким имитаторам. Конечно, можно проехать наавтомобиле по береговой дороге в Калифорнии со скоростью, вдвое превышающей разрешенную, и потанцевать на всех четырех колесах. Нотакже можно использовать эти игры, чтобы научиться безопасно летать среди облаков,и получать удовольствие от свободы полета. Дажеможно делать такие вещи, как постройка и управление собственной железнойдорогой.
6. Спортивные имитаторы. Здесьнеобходимо обучать профессионалов и управлять ими. Эти игры- нечто большее, чем простое изображениебейсбольных игр в картинках, в некоторых из них можно даже контролироватьреальное действие. Спортивные имитаторы дают возможность вести рискованную игрув нужное время, доказать, что можно выиграть с помощью быстроты, иметь в командеГенри Аарона и Теда Вильямса,или переиграть Томми Лазорду.
7. Аркадныеигры/игры действия.Это классические «игры действия»- все зависит от того, насколько быстро рукимогут дергать джойстик. Обычно о них говорят как о бессмысленных, так часто ибывает. С другой стороны, бывают времена, когда появится потребность датьотдохнуть мозгам. Во многие из этих игр можно играть с помощьюклавиатуры или мыши, и джойстики не всегда необходимы. В чем естьнеобходимость, так это в быстрых рефлексах.
8. Настольные игры, солитер и салонные игры.Многие старые любимые игры появились в компьютерномварианте. Больше не нужно заниматься поисками партнера, чтобы поиграть вшахматы, бэкграммон и риск. Некоторые из этих игр даже научат мошенничать наедине смонитором, и при этом не придется возвращатьсядомой с пустым карманом после неудачной ночи.
9. Имитаторы реальности («игрыв бога»).Это игры, которые позволяют создавать реальный мир из ничего. Это игры,которые позволят создать компьютерный мир из набросков, управлять городом,страной или даже миром.
10. Игры, в которых делаются деньги.Они копируют игровую деятельность иучат высшим формам азартных предприятий: фондовая биржа, торговлянедвижимостью. Они также позволят попробовать управлять корпорацией. В этиигры можно играть для удовольствия, или использовать их для того, чтобы научиться карабкаться вверхпо лестнице карьеры.
11. Стратегические и военные имитаторы.Здесь можно принимать участие в великихисторических событиях, взять на себя командование немецкой армией у Ленинградаили армией Наполеона у Ватерлоо. Это военные стратегиипрошлого, настоящего или будущего.
12. Игры для детей.Если есть домашний компьютер, и чтобыдети научились его использовать, то эти игры достойнывнимания. Реальность нашей культуры такова, что, как только малыши стануткоординированы настолько, чтобы правильно пользоваться клавиатурой или мышью,они хотят сразу приняться за такие игры, как WingCommander, Populous или Eye of the Beholder.Однако же вокруг существует множество игр, в которые дети могут играть просточтобы получить удовольствие, или же научиться чему-либо.
13. Игры «On-line».Было быошибкой считать, что все компьютерные игры для IBMPC приходят к нам на дискетах или CD-дисках, плотноупакованных в красивые пакеты. Фактически, весь обширный мир компьютерныхигр доступен и по телефону. Эта категория игр известнакак «он-лайн» и включает в себя разнообразные игры, которые имеются в больших коммерческих «он-лайн» сетях и во многих локальных сетях типа«доска объявлений» (bulletin board system—BBS). Для игр«он-лайн», кроме личного компьютера,необходимы модем и кредитная карточка.
14. Игры Shareware.Будет ошибкой предположить, что все компьютерные игрыприходят в красивых упаковках. Многие хорошие игры приходят вовсе без упаковок, истоят от10 до30 долларов. Обычно можно их опробовать заочень низкую плату или вовсебесплатно в течение нескольких дней и, если захочется получить легальную копию, следует послать по почте чек компании или лицу, которые создали игру.
15. Классические игры.МирPC-игр во многом похож на мир популярноймузыки и фильмов: создается много игр различныхнаименований, некоторые становятся хитами и держатпопулярность в течение некоторого времени, другие пропадают. Постепенно этихиты становится трудно отыскать, и мало-помалу онизаменяются другими лучшими играми. Очень малоPC-игр живут более2-3 лет. Изтех, что действительно остаются, многие настолько хороши, что становятся вечными, и они заслуживают того, чтобы в нихиграли. Некоторые, как Flight Simulator или King's Quest, обновляются время отвремени, так что их можно рассматривать как практически новые игры. Остальныеостаются неизменными, и уровень продаж у них таков,что они остаются в обращении, но уже не рекламируются активно ихпроизводителями. Это игры, которые не бросаются в глаза, «золотые» игры— классическиеPC-игры.
Компьютерныеигры— отнюдь не новое изобретение. Ихистория началась не с конца1970 годов.Начало лежит гораздораньше, тогда, когда Джон Кеннеди уже пробыл президентомСоединенных Штатов всего несколько месяцев (2).
На самомделе все началось с модели железной дороги. Студенты Технологическогоинститута в Массачусетсе были немало удивлены количеством способов, с помощью которых можно было разместить органы управления миниатюрной железной дорогой. Позднее, когда они наконец получиливозможность работать на больших компьютерах института, их работа в бинарныхвычислениях— ведь именно такиевычисления имитируются выключателями железнойдороги— позволили им пройти хорошуюподготовку в компьютерном деле.
Стив Рассел был одним из членовКлуба Моделей Железных дорог Высокой Технологии вТехнологическом институте. Будучи хорошим программистом, он летом1961 года работал в Статистическойлаборатории, когда у него и его друзей появиласьидея перенести «мыльные» научно-фантастические рассказыЕ.Е.Смита на компьютеры. В1962 году Стив разработал программу для PDP-1. Эта самая машинатеперь выставлена в компьютерном музее Бостона в Массачусетском Технологическом институте.
В «Космической Войне», как называласьэта программа, два синтезированных компьютеромракетных космических корабля (один похожий на толстую сигару, а другой надлинную обтекаемую трубу) могли летать по экрану, на котором помещалосьизображение космоса. Игроки могли нажимать на кнопки, чтобы заставить ракетыменять направление движения почти так же, как позднее в игре Asteroidsвладельцы игровых машин Atari управляли своими кораблями. Каждая ракета неслана себе31 торпеду,и, в то время как они летели по экрану, игрок мог выстрелить точечку из носа своей ракеты в направлении другой. Если точкадействительно пересекала очертания другого корабля, программа определяла, что торпеда успешно поразиладругой корабль и другой корабль «взрывался». Взорванный корабль пропадал сэкрана и заменялся нагромождением точек, которыеизображали его остатки.
Конечно, общество программистов ивзломщиков программ не может удовлетвориться качеством любой программы, независимо от того, насколько она легка или интересна.Изменения были неизбежны. Один из друзей программиста, будучи недовольным случайнымобразом построенной картой звездного неба, которую Рассел первоначальнопоместил в игру, взял звездный атлас и ухитрился запрограммироватьнашу собственную галактику, вплоть до звезд пятой величины. Другой добавил гравитацию вигру, а третий ввел возможность побега в гиперпространство, при этом, чтобы показать место, где корабль покинул звездную систему, на экране оставался след ускорения.
Даже Рассел сделалнекоторые изменения. Зная, что у настоящих торпедвероятность поражения цели не100%, аменьше, он решил придать звездным торпедам возможностьошибки, и добавить случайный элемент в траекторииракет и время взрыва. Его друзья терпеть не моглиновую версию, поскольку они хотели бы иметь в игре ту же степень уверенности,которая существовала в программировании.
Рассел вернул программу к прежнейверсии и, не успели оглянуться, как «Космические войны» оккупироваликомпьютеры колледжей по всей стране.
«Космические войны» стали настолькопопулярны к середине шестидесятых, что Нолан Бушнелл, создатель Atari, очень привязался к игре вовремя учебы в университете штата Юты. К1970годуБушнелл построил свою собственную машину,использовав185 встроенныхцепей для подсоединения к телевизоруи для выполнения одной-единственной функции. Этафункция была игрой «Компьютерный Космос», вариант«Космических Войн», в котором ракета сражалась с летающими тарелками вместодругого корабля.
«Космические Войны» были не единственным предшественником коммерческих компьютерных игр, появившихся набольших компьютерах в колледжах. Какой-то неизвестный автор начал играть в игруStar Trek («Звездный путь») в шестидесятых годах.Никто не знает, кто первым создал такую игру — он или она, вероятно, подали бысудебный иск, если бы автор игры был точно определен— но эта игра также появилась на колледжскихкомпьютерах по всей стране к 1969 году.
Игра «Звездный путь» сама по себебыла не очень изощренной. В игре были линиинаподобие решеток, которые позволяли звездным кораблям путешествовать от однойточки к другой, игра использовала символы дляидентификации кораблей, предоставляла численнуюинформацию в процентах, и позволяла летать быстрее, чем скорость света. Ксередине 70-х годов почти на каждой домашней компьютернойсистеме была доступна та или иная форма этой игры. Существовала версия этой жеигры для IBM под названием Star Fleet («ЗвездныйФлот»).
Наконец, стоит упомянуть пожалуйнаиболее важную игру, Adventure («Приключения»). Вигре использовались двухсловные команды, имя ее разработчика Вилл Краудер. Это была первая приключенческая компьютернаяигра.
Кроме того, в конце 70-х была создана игра по имени Zork,которая стала доступна для пользователей домашних компьютеров в 1981 году. Эту игру до сих пор можно купить.Игра Zork основывается на игре Adventure (2).
1.2.<span Times New Roman"">
Описание компонентов, используемыхпри реализации практической части курсовой работыВ практической части данной курсовойработы используются следующие визуальные и невизуальные компоненты (3, 4, 5)среды программирования BorlandDelphi6.0.
1.2.1. Компонент TMainMenu
<img src="/cache/referats/11659/image002.jpg" align=«left» hspace=«12» v:shapes="_x0000_s1026">TMainMenu позволяет поместить главное меню в программу.При помещении TMainMenu на форму это выглядит, как просто иконка. Иконкиданного типа называют невидимым (невизуальным) компонентом, поскольку ониневидимы во время выполнения программы. Создание меню включает три шага:
1) помещение TMainMenu на форму,
2) вызов Дизайнера Меню черезсвойство Items в Инспекторе Объектов,
3) определение пунктов меню в Дизайнере Меню.
Этот компонент доступениз модуля MENUS, и находится на странице Палитры компонентов Standard
Этот компонентпредставляет главное меню формы и наследует все методы и свойства TMenu. Особенность его в том, что в немреализован сложный механизм объединения меню. Это необходимо по следующимпричинам:
1.<span Times New Roman"">
Если в приложении имеется несколькоформ со своими меню, то для упрощения работы целесообразно соединить их в однои управлять меню из главной формы.2.<span Times New Roman"">
Объединение меню нужно при работе синтерфейсом MDIи его подокнами.3.<span Times New Roman"">
Механизм объединения менюиспользуется серверами OLE, запускаемыми по месту нахождения объекта OLE. Загружаясь, сервер дописывает осуществляемыеим операции к меню другого приложения.Для того чтобыреализовать объединение меню, у тех форм, меню которых будут присоединены кглавному, необходимо установить в Trueсвойство: (Рb) propertyAutoMerge: Boolean.
При этом у главного менюоно должно оставаться равным False, иначе главное меню будет вообще невидимым.Объединение будет происходить автоматически при активизации новых форм илисерверов OLE. Кроме автоматического режима, объединение меню можно выполнить привызове метода: procedureMerge(Menu: TMainMenu).
Присоединяемое меню принеобходимости может быть легко отсоединено вызовом метода: procedureUnmerge(Menu: TMainMenu).
При установленном в Trueсвойстве AutoMerge ссылка наприсоединенное меню будет сохраняться в специальном поле компонента иотсоединяться в нужных случаях автоматически (например, при закрытии формы,которой оно принадлежит).
Объединение менюпроисходит по специальным правилам, в основе которых лежит использованиегруппового индекса (свойства GroupIndex) каждого объекта TMenuItem.
У пунктов меню одногоуровня, в частности всех подменю верхнего уровня в главном меню, свойство GroupIndexявляется неубывающим, т. е. у последующегопункта групповой индекс больше либо равен индексу предыдущего. Это требованиеотслеживается как на этапе разработки, так и на этапе исполнения. Например,пусть пункты меню имеют индексы 0, 3, 4, 5, 6. Если включить пункт меню синдексом 5 между пунктами с индексами 0 и 3, то 3 и 4 будут изменены на 5. Авот изменить большее значение Х на меньшее Y, если впереди есть пункты синдексом, большим Y, невозможно. Если в этом примере попытаться изменить индекс 6 на 4, тоэто приведет к возникновению исключительной ситуации EMenuError.
Для обычных формобъединение происходит только на верхнем уровне в главном меню во время ихактивизации. В объединенном меню все подменю будут располагаться по возрастаниюномера группового индекса, при этом:
1.<span Times New Roman"">
если в присоединяемом меню естьпункты с таким же групповым индексом, что и в исходном, то все их множествозаменяет все множество таких пунктов в исходном меню;2.<span Times New Roman"">
все пункты присоединяемого меню,групповой индекс которых не встречается в исходном, добавляются к нему ивставляются на соответствующие их индексу места.К окнам интерфейса MDIвсе сказанное относится только призапуске приложения. Если в формах приложения со стилем fsMDIChildесть свои главные меню, то в этотмомент они автоматически сольются с главным меню формы fsMDIFormнезависимо от состояния AutoMerge.
На уровне работы ссерверами OLEпредусмотрены дополнительные возможности по объединению меню. Если вкомпонент TOLEContainerзагружен объект OLE, то в конец подменю Editобычно добавляется подменю, изкоторого можно вызвать функции открытия и редактирования этого объекта. Послеактивизации сервера он может не только вставлять свои подменю в главное, но идобавлять новые пункты к уже существующим подменю.
Три метода TMainMenuиспользуются для работы с меню OLE:
1.<span Times New Roman"">
procedurePopulateOle2Menu(SharedMenu: HMenu; Groups: array of Integer; var Widths: arrayof Longint);2.<span Times New Roman"">
procedure GetOle2AcceleratorTable(varhAccel: THandle; var numAccels: Word; Groups: array of Integer) ;3.<span Times New Roman"">
procedureSet01e2MenuHandle(Handle: HMENU);1.2.2. КомпонентTLabel
<img src="/cache/referats/11659/image004.jpg" align=«left» hspace=«12» v:shapes="_x0000_s1027">TLabel служит для отображения текста наэкране. Можно изменить шрифт и цвет метки, если дважды щелкнуть на свойствоFont в Инспекторе Объектов. Видно, что это легко сделать и во время выполненияпрограммы, написав всего одну строчку кода.
Этот компонент доступениз модуля STDCTRLS, и находится на странице Палитры компонентов Standard.
Компонент представляетсобой статический текст. С помощью этого компонента на рабочей поверхностиформы можно отобразить информацию, сделать пояснения и показать названия другихкомпонентов. Но он имеет и другую важную функцию — если в составе текста TLabelесть символы-акселераторы,информация об их нажатии может передаваться от TLabelдругому элементу управления.
Свойства компонента приведены втабл.1:
Таблица 1
Свойства компонента TLabel
Свойство
Описание
(Pb) property Caption: TCaption; TCaption = string[255];
Содержит строку с выводимым текстом.
(Pb) property Alignment: TAlignment;
Устанавливает правило выравнивания текста — по правому, левому краю или по центру клиентской области.
(Pb) property AutoSize: Boolean;
В случае Trueпроисходит автоматическое приведение размеров компонента к размерам текста и высоте шрифта.
Продолжение табл.1
(Pb) property ShowAccelChar: Boolean;
Показывает, отображается ли в TLabelакселератор (символ, перед которым стоит знак амперсанда — '&'). Если оно равно False, амперсанд никак не интерпретируется. В случае Trueакселератор выделяется в строке подчеркиванием и нажатие клавиш <Аlt>+<символ> приводит к передаче фокуса окну FocusControl(т.к. TLabelсам не является оконным компонентом).
(Pb) property FocusControl: TWinControl;
Определяет оконный компонент, которому посылаются сообщения о вводе акселератора.
(Pb) property Transparent: Boolean;
Прозрачность фона компонента. Если свойство установлено в True, то при перерисовке элемента управления не происходит закрашивание клиентской области. В противном случае — происходит закрашивание кистью bsSolidи цветом Color.
(Pb) property WordMrap: Boolean;
Определяет возможность разрыва слов в случае, если длина выводимого текста превышает ширину компонента.
1.2.3. КомпонентTPanel
TPanel — управляющий элемент, похожий наTGroupBox, используется в декоративных целях. Чтобы использовать TPanel, простопоместите его на форму и затем положите другие компоненты на него. Теперь приперемещении TPanel будут передвигаться и эти компоненты. TPanel используетсятакже для создания панели инструментов и окна статуса.
Этот компонент доступен из модуля EXTCTRLS, и находится на странице Палитрыкомпонентов Standard.
Этот компонент — являетсянесущей конструкцией для размещения других элементов управления. В отличие отпростой рамки (TBevel) панель сама является оконным элементом управления иродителем для всех размещенных на ней компонентов. Часто ее используют длясоздания панелей инструментов, строк состояния и т. п.
За внешнее оформление панели отвечаютсвойства:
(Pb)property Bevel Inner: TPanelBevel;
(Рb) propertyBevelOuter: TPanelBevel;
TPanelBevel= (bvNone, bvLowered, bvRaised) ;
(Pb)property BevelWidth: TBevelWidth;
TBevelWidth= 1..Maxint;
(Pb)property BorderWidth: TBorderWidth;
TBorderWidth= 0..Maxint ;
На границах панелиразмещаются две специальные окаймляющие рамки (bevels): Bevellnnerи BevelOuter. При помощи комбинации белого исерого цветов они имитируют трехмерность — приподнятость (bvRaised) илиутоп-ленность (bvLowered). Обе рамки имеют ширину BevelWidth. Наружная — BevelOuter— расположена прямо по периметру панели,вторая — Bevellnner— внутри на расстоянии BorderWidthот нее. Обе могут быть невидимыми (bvNone), приподнятыми или утопленными.
Комбинируя сочетания bvLowered/bvRaised, можно создать вокруг панели«ров» или «вал».
Иллюзию трехмерностиможет подчеркнуть также стиль обрамления компонента:
(Pb)property BorderStyle: TBorderStyle;
TBorderStyle= bsNone… bsSingle;
Значение bsSingleозначает, что панель будет окаймленачерной линией единичной толщины (по периметру, снаружи от обеих рамок).
Выравнивание текстазаголовка панели определяется при помощи свойства:
(Pb) property Alignment: TAlignment;
Свойство (Pb) propertyLocked: boolean; предназначено для определенияспособа взаимодействия панели с размещенными на ней объектами OLE. Если оно равно True, последние при активизации сервера OLE«по месту'» не могутзаместить панель.
В обработчике события: (Pb) propertyOnResize: TNotifyEvent; может быть предусмотрена реакцияпользователя на изменение размеров панели.
1.2.4. КомпонентTBitBtn
<img src="/cache/referats/11659/image006.jpg" align=«left» hspace=«12» v:shapes="_x0000_s1029">TBitBtn — кнопка вроде TButton, однако на нейможно разместить картинку (glyph). TBitBtn имеет несколько предопределенныхтипов (bkClose, bkOK и др), при выборе которых кнопка принимает соответствующийвид. Кроме того, нажатие кнопки на модальном окне (Form2.ShowModal) приводит кзакрытию окна с соответствующим модальным результатом (Form2.ModalResult).
Этот компонент доступен из модуля BUTTONS, и находится на странице Палитрыкомпонентов Additional.
Эта кнопка, будучи потомком TButton, может нести на себе пиктограмму и имеетрад дополнительных удобств в использовании. В Delphiуже определены стандартные видыкнопок:
(Pb) propertyKind: TBitBtnKind;
TBitBtnKind= (bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo, bkClose, bkAbort, bkRetry,bklgnore, bkAll);
Для каждой из нихопределены: передаваемый форме результат (ModalResult):
BitBtnModalResults:array[TBitBtnKind] of TModalResult =
(0,mrOk, mrCancel, 0, mrYes, mrNo, 0, mrAbort, mrRetry, mrlgnore, inrAll);
а также название и картинки дляразных состояний. Достаточно установить значение свойства Kind, и кнопка сразу приобретет нужныйвид. Более того, некоторые из видов кнопок при нажатии сразу совершают определенныедействия. Так, bkHelp осуществляет инициализацию системы помощи со своим (илиближайшим ненулевым родительским) контекстом. Кнопка вида bkCloseзакрывает форму, которой онапринадлежит, вызывая ее метод Close.
Кнопка будет отнесена к видуbkCustom, если она:
1.<span Times New Roman"">
назначена Default, но при этом не принадлежитмножеству [bkOk, bkYes];2.<span Times New Roman"">
назначена Cancel, но не принадлежит множеству [bkCancel, bkNo];3.<span Times New Roman"">
у нее изменена пиктограмма;4.<span Times New Roman"">
модальный результат не соответствуетопределенному для этого вида кнопок.За внешний вид этойкнопки отвечают свойства, рассмотренные ниже. Стиль изображения кнопок взависимости от операционной системы задается свойством:
(Pb)property Style: TButtonStyle;
TButtonStyle= (bsAutoDetect, bsWin31, bsNew);
Стиль bsNewсоответствует Windows95. В любом случае корректным будетприменение стиля bsAutoDetect, который сам распознает версию системы. Пиктограммакнопки, которая вместе с текстом видна на ее поверхности, определяетсясвойством:
(Pb) propertyGlyph: TBitmap;
Для создания эффектанажатия картинка должна немного изменяться в зависимости от состояния; крометого, отдельная картинка нужна для неактивного состояния (когда нажатие невоспринимается). В свойстве Glyphдолжна быть одна битовая карта, но она можетсодержать картинки сразу для нескольких состояний кнопки (максимум четыре). Ониинтерпретируются как соответствующие нормальному (отжатому), запрещенному(неактивному), нажатому и утопленному состояниям (последнее применяется толькодля кнопок TSpeedButton). Для этого картинки должны быть расположены подряд вплотнуюпо горизонтали. Например, при размере картинок 16х16 нужна объединенная битоваякарта 64х16. Если каждая из картинок квадратная и ширина общей картинки нацелоделится на высоту, то при присвоении ее свойству Glyphсистема сможет распознать их искорректировать количество, определяемое свойством:
(Pb)property NumGlyphs: TNumGlyphs ;
TNumGlyphs= 1..4;
При отрисовке взависимости от состояния из большой битовой карты будет использована нужнаячасть.<