Главная » C++, C++ Builder » Формы и события C++ Builder

0

Форма — это наиболее существенный самостоятельный компонент системы CBuilder. Это  тот объект, с которым, скорее всего, будет взаимодействовать пользователь.

В большинстве примеров программ на CBuilder форма используется как вместилище для других компонентов.    В    этой    главе    мы     рассмотрим     форму     как     собственно     компонент. Что такое форма? Конечно, это просто окно. Как и все окна, она может иметь дочерние управляющие элементы, такие как панели задач, меню и панели состояния. Формы, как и окна, имеют собственные определенные уникальные свойства, такие как заголовки, системные меню, кнопки минимизации и максимизации, закрывающие кнопки, рамку изменяемого (или не изменяемого) размера и другие  изящные штучки. Давайте прервемся  на минуту и взглянем на форму и те ее части, которые CBuilder позволит нам изменять.

На рис. 2.1 показана типичная пустая форма CBuilder, которую вы увидите сразу же, как откроете новое приложение. Давайте поближе познакомимся с ее составляющими.

Первое свойство, которое сразу же бросается в глаза, это название формы (Form1), отображаемое на панели заголовка. Это свойство называется Caption (заголовок ). Свойство Caption может быть напрямую изменено в инспекторе объектов (Object Inspector) CBuilder во время проектирования или же посредством кода во время исполнения. Изменение свойства Caption немедленно обновит заголовок формы как во время проектирования, так и во время исполнения,  за  одним исключением: вы не сможете убрать заголовок вообще, присвоив свойству Caption формы пустую строку ("").

Рис. 2.1. Стандартная пустая форма CBuilder

Вот вам первая неординарная проблема в CBuilder: как создать форму без заголовка и панели заголовка. На первый взгляд непонятно, как можно убрать заголовок и панель заголовка из формы CBuilder, но это можно сделать при помощи толики магии Windows и знания Windows API (Application Programming Interface, интерфейс программирования приложений). Поскольку форма

— это просто окно, вы можете изменить его изначальные свойства еще до его создания. Если вы измените бит состояния окна так, чтобы включить флаг WS_POPUP и удалить флаг WS_CAPTION, вы создадите-таки окно без панели заголовка. В результате у вас получится окно без системного меню, кнопок максимизации или минимизации и кнопки закрытия. По такому случаю предусмотрите какой-нибудь вариант закрытия этого окна.

Давайте немного поэкспериментируем и создадим такую форму. Вы можете найти полную версию такой программы на прилагаемом компакт-диске в каталоге Chapter1\Captionless. После того как вы вволю наиграетесь со свойством Caption, давайте обратимся к следующему  свойству  — Border (рамка), которое позволяет вам контролировать, изменяется размер окна или нет. Для свойства Border есть несколько вариантов, но вам, скорее всего, в основном придется иметь дело с двумя из них  — изменяемый размер окна (bsSizeable) и фиксированный,  как  у диалоговых, размер окна (bsDialog). Потратьте пару минут  на изменение стиля рамки с одного на другой и скомпилируйте получившиеся приложения. Вы заметите, что два эти типа рамки различаются на экране. На рис. 2.2 показана типичная форма с изменяемым размером, а на рис. 2.3 — форма с неизменяемым размером (форма диалогового типа). Теперь вам должно стать понятно, что название свойства «рамка» взято не случайно — рамка окна похожа на раму картины.

Рис. 2.2. Форма с изменяемым размером

Рис. 2.3. Форма диалогового типа с неизменяемым размером

Третье свойство, которое мы рассмотрим, это на самом деле множество свойств. Свойство BorderIcons (кнопки  панели заголовка) состоит из множества кнопок (значков), которые могут располагаться на панели  заголовка формы. Это свойство представлено множеством языка C++, содержащим параметры для кнопки минимизации, максимизации, закрытия и системного меню. Вы можете включать или исключать любую (или все) из перечисленных выше кнопок, просто устанавливая соответству ющий параметр в True (истинно) или False (ложно) в инспекторе объектов или добавляя соответствующие строки в программу.

Замечание

Изменения, которые вы будете производить над этими свойствами, не будут отражаться во время проектирования приложения . Форма, отображаемая редактором форм, уже определена в момент своего создания. Изменения, которые вы произвели, будут отражены тотчас же, как только форма впервые будет выведена на экран вашим приложением. Чтобы рассмотреть, как это происходит, измените форму так, чтобы отменить кнопки минимизации и максимизации, и вы увидите, что форма не изменилась в окне редактора форм. Скомпилируйте и запустите приложение  и убедитесь, что получившаяся форма действительно не имеет ни кнопки максимизации, ни кнопки минимизации окна.

Другое, чуть менее понятное свойство формы — это Color (цвет), которое мы рассмотрим в следующем эксперименте. Используя базовую форму, отображенную в редакторе форм CBuilder, измените ее свойство Color на что-нибудь типа clRed (красный). Благодаря этому изменению отображаемая форма должна будет иметь ярко-красный фон  после запуска программы. Теперь скомпилируйте и запустите приложения и взгляните на экран. Вот так сюрприз! Форма вовсе не красная, она своего стандартного военно-морского шарового цвета. Почему? Это, к сожалению, ошибка системы  (!).  Но,  к счастью,  эту отдельно взятую ошибку нетрудно побороть.  Добавьте обработчик события OnFormCreate и в него добавьте следующие строки:

void __fastcall TForm1::OnFormCreate()

{

Color = clRed;

}

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

Хорошая вещь — каракули!

Мы поговорили обо многих свойствах времени проектирования и времени выполнения формы, но пока явно избегали затрагивать большой кусок пространства в центре формы. Внутреннее пространство формы, доступное пользователю, целиком отражается в одном свойстве формы, называемом Canvas. Свойство Canvas отвечает за отображение любого текста или графики, относящихся непосредственно к форме. Это также тот самый элемент, который реагирует на изменение свойства Color формы, но это делается не напрямую, а через форму как объект, и в данном случае нас не касается.

Наш первый серьезный пример в этой книге касается свойства Canvas. Поскольку Windows задумывались в основном для увеличения графических возможностей, вполне логично, что наш первый пример будет о работе с графикой. В те старые добрые времена, когда Visual C++ только- только появилась, фирма Microsoft выбрала в качестве обучающей работе с системой программирования Visual C++ программу Scribble (каракули). Это была не связанная с формами программа, которая использовала мышь для перемещения по пространству окна, отрисовывая при этом линии, соединяющие между собой все точки, через которые прошла мышь.

«Каракули» стали шуткой для посвященных в программистской среде, поскольку сущность этого примера была крайне примитивной. Многие программисты отправлялись на собеседования, где требовалось наличие опыта программирования в Visual C++ и MFC (Microsoft Foundation Classes, библиотека оконных классов фирмы Microsoft), хотя, на самом деле, все, что они имели за плечами, — это знакомство с обучающей программой Scribble. Реализация программы Scribble занимала всего несколько страниц и требовала от программиста лишь умения читать и писать по- английски. Этот пример ничего не раскрывал в MFC и, соответственно, ничего не мог дать тем, кто хотел бы приложить свое знание MFC к написанию полезных программ. Как мягкий укол сообществу MFC, мы представляем CBuilder-версию программы Scribble. Если говорить чуть серьезнее, Scribble — хороший материал для простого примера, так как в нем осуществляется взаимодействие со всеми элементами  формы: свойствами, событиями  и методами. Давайте создадим простую версию Scribble для CBuilder.

Источник: Теллес М. – Borland C++ Builder. Библиотека программиста – 1998

По теме:

  • Комментарии