Главная » C++, C++ Builder » Компоненты и обработчики событий компонентов

0

Сердцем системы CBuilder является Visual Component Library (библиотека визуальных компонентов), или VCL, которая является как бы набором строительных блоков, включающим в себя такие компоненты, как формы (TForm), поля ввода (TEdit), списки (TListBox), управляющие элементы ActiveX, стандартные диалоги открытия и сохранения файлов. В предыдущих главах мы затронули некоторые компоненты VCL и их использование. Эта глава — головокружительное путешествие по VCL и обзор того, как VCL помогает решить каждодневные проблемы у программиста на CBuilder.

Эта глава не является руководством по VCL, так как компания Borland предоставляет вполне приличное руководство в документации к CBuilder. Вместо этого данная  глава  —  поэтапный анализ того, как с помощью VCL решать стандартные программистские проблемы. Вот неполный список того, о чем мы будем говорить в этой главе:

·                       создание компонентов во время работы приложения (runtime);

·                       перетаскивание чего-либо между компонентами;

·                       проверка правильности данных в поле ввода;

·                       работа с индикаторами прогресса задания;

·                       пользовательская прорисовка компонентов.

Большинство книг по CBuilder предоставляет вам детальнейшие примеры использования VCL, но немногие применяют VCL к реальным проблемам программирования. В этой главе мы начнем исследовать невероятно мощную модель программирования в CBuilder, а также что это дает вам, как профессиональному программисту. CBuilder отличается маленькими штрихами, теми изюминками, которых пользователь вправе ожидать от высококачественных  программ.  Теперь, когда вам предстоит работать с CBuilder, нет никаких оправданий в неиспользовании этих дополнительных возможностей в ваших программах для максимального  упрощения  работы  с ними конечного пользователя.

Краткий обзор с точки зрения программиста

С вашей точки зрения как программиста, VCL не является иерархией. Это набор независимых строительных блоков, которые вы перетаскиваете на форму, устанавливаете их свойства и используете там, где, как вам кажется, они подходят. С компонентами VCL можно обращаться индивидуально, почти или совсем не заботясь о том, как они вписываются в общую схему. Только разработчики новых компонентов действительно обязаны задавать себе вопросы как? и почему? в отношении VCL. Остальным из нас можно сидеть спокойно и наслаждаться блеском легко сделанных приложений, которые используют в себе строительные блоки VCL.

Тем не менее, есть некий смысл в системе компонентов, а знание иерархии системы может помочь вам в использовании некоторых из них. Давайте заглянем на важные уровни архитектуры компонентов перед тем, как погрузиться в толщу VCL в нашем первом примере.

Первый и самый важный класс в иерархии VCL — это TObject. TObject — предок всех классов

VCL,  он  содержит  некоторые  важнейшие  для  всех  классов  методы.  Тем  не  менее,  TObject  не

содержит никаких собственных свойств. Посмотрев на список методов класса TObject, вы найдете метод ClassName, который возвращает настоящее имя класса объекта. Если у вас есть указатель на объект базового класса, который в действительности является объектом порожденного (наследующего) класса, то вы можете использовать метод TObject::ClassName , чтобы выяснить, к какому классу он принадлежит на самом деле. Точно так же, метод ClassParent вернет вам непосредственного родителя данного класса. Используя метод ClassParent, вы можете прогуляться по дереву классов обратно до уровня TObject , начиная с любого объекта VCL в системе. С точки зрения того, как что работает, на уровне TObject самым важным является метод Dispatch . Метод Dispatch отвечает за передачу сообщений в обработчики событий, определенные для объекта. Используя Dispatch , вы можете передать объекту любое сообщение и быть уверенным, что если объект поддерживает обработку данного сообщения, то оно будет доставлено к соответствующему обработчику.

Следующим по важности после TObject является класс TControl , который является базой для всех управляющих элементов (controls) в системе VCL, например форм, полей ввода, окон диалога. TControl относится только к видимым компонентам в системе. Видимым (визуальным) компонентом является тот, который пользователь может увидеть и которым он может управлять во время работы приложения. Это значит, что компоненты TTimer  (таймер)  и  TDatabase (компонент — база данных) не являются наследниками класса TControl , а вот TOpenDialog (стандартный диалог открытия файлов), хотя он и не виден во время дизайна приложения, является его наследником. Так как TControl поддерживает визуальные компоненты, то в классе TControl вы найдете основные визуальные свойства управляющих элементов. Вы найдете здесь такие свойства, как Height (высота), Width (ширина), ClientHeight (высота клиентской области), ClientWidth (ширина клиентской области), Hint (подсказка), Cursor (тип курсора) и другие. Методами класса являются Hide (убрать), Show (показать), Update (обновить)  и  Perform (исполнять). С точки зрения «как что работает» в классе TControl есть метод WndProc, который обрабатывает специфические сообщения. Если вам нужно изменить стандартную обработку сообщений для управляющего элемента, смотрите метод WndProc .

Наконец, еще одним важным классом является TComponent, который представляет все компоненты в системе. Класс TComponent предоставляет средства для добавления компонента в палитру компонентов в интегрированной среде, возможности компонента содержать другие компоненты и управлять ими, а также возможности работы с потоками (streams) <$FНе путать с потоками — параллельными процессами (threads). — Примеч. перев.>и файлами. TComponent включает в себя все компоненты, видимые или нет во время работы приложения. Важными свойствами класса TComponent являются ComponentCount (которое показывает количество компонентов, которые содержит данный компонент), Components (содержит указатели на все компоненты, содержащиеся в данном) и ComponentState (описывает текущее состояние компонента). Свойство ComponentState важно из-за флага csDesigning, который указывает, что компонент находится в стадии дизайна.

Такова, в двух словах, основа системы VCL. Вместо того, чтобы долго и нудно говорить о том, как использовать библиотеку VCL и что вы можете сделать с ее помощью, давайте сразу прыгнем в омут и примемся писать примеры некоторых приложений для того, чтобы показать мощь VCL в действии. В нашем первом примере мы занимаемся проблемой динамического создания компонентов VCL «на ходу», то есть во время работы приложения.

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

По теме:

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