Управление компонентом TClientDataSet осуществляется при помощи множе ства разнообразных параметров. В данном разделе будут рассмотрено применение компонента TClientDataSet, упрощающего код в сложных приложениях.
Двухуровневые приложения
Главная » Статьи для тега "компонента"
Управление компонентом TClientDataSet осуществляется при помощи множе ства разнообразных параметров. В данном разделе будут рассмотрено применение компонента TClientDataSet, упрощающего код в сложных приложениях.
Двухуровневые приложения
Теперь, ознакомившись со множеством параметров, доступных при разработке приложений с использованием технологии DataSnap, попробуем применить их на практике для разработки реального приложения.
Установка сервера
Сначала познакомимся с механизмом построения серверного приложения, а затем обсудим, как создается клиентская часть приложения.
Обеспечить прозрачность можно разными способами; для некоторых форма тов (например, PNG) альфа канал поддерживается изначально. В WPF альфа компонента является составной частью любого цвета, а каждый визуальный эле мент имеет свойства Opacity и OpacityMask. Эти четыре механизма можно даже комбинировать, так что получается впечатляющее разнообразие путей созданий эффектов, связанных с прозрачностью.
Все действия по переносу компонента TddgSpinner из VCL в CLX были достаточ но очевидны и просты. Незначительные сложности возникали лишь при использова нии свойства InputKeys.
Тем не менее, при добавлении компонентам CLX новых функций, различия между
Итак, библиотека VisualCLX состоит из классов Object Pascal, по сути являющихся оболочками классов библиотеки Qt. Это очень похоже на то, как классы библиотеки VCL инкапсулируют стандартные интерфейсы API и элементы управления Windows. Одной из главных целей создания CLX было максимальное упрощение переноса су ществующих приложений VCL в архитектуру CLX. В результате иерархия классов CLX имеет общие черты с иерархией классов VCL (рис. 13.1 и 13.2). Темно серые прямоугольники на рис. 13.1 соответствуют основным базовым классам VCL.
Теперь, когда уже определен компонент TddgLaunchPad, класс коллекции TRun- Buttons и класс коллекции TRunBtnItem, необходимо обеспечить пользователя спо собом добавления компонентов TddgRunButton в коллекцию TRunButtons. Лучше всего для этого подходит редактор свойств списка, обслуживаемого коллекцией TRunButtons.
Конструктор TRunBtnItem.Create() создает экземпляр компонента TddgRun- Button. Каждый элемент TRunBtnItem в коллекции обслуживает собственный эк земпляр TddgRunButton. Следующие две строки конструктора требуют пояснения:
FRunButton := TddgRunBut- ton.Create(TRunButtons(Collection).FLaunchPad); FRunButton.Parent := TRunButtons(Collection).FLaunchPad;
Вначале необходимо определить элементы, которые будут содержаться в списке. Для TddgLaunchPad это — компоненты типа TddgRunButton. Таким образом, каж дый экземпляр компонента TRunBtnItem должен быть связан с компонентом TddgRunButton. Ниже приводится фрагмент определения класса TRunBtnItem:
Довольно часто компоненты содержат или владеют списками нескольких элемен тов —данных, записей, объектов и даже других компонентов. В некоторых случаях удобно инкапсулировать такой список в специальный объект и сделать этот объект свойством владельца компонента. Примером подобного подхода служит свойство Lines компонента TMemo. Данное свойство имеет тип TStrings, инкапсулирующий список строк. При этом объект TStrings отвечает за механизм работы с потоками, используемый для записи строк в файл формы при сохранении этой формы.
Как уже было сказано, категория свойства представляется в программном коде как класс, который является потомком класса TPropertyCategory. Возникает вопрос: трудно ли создать свои собственные категории свойств? Оказывается, это не так уж и сложно. В большинстве случаев для этого достаточно переопределить виртуальные функции Name() и Description() класса TPropertyCategory и тогда можно полу чать информацию, относящуюся к данной категории.
Как уже отмечалось в главе 1, “Программирование в Delphi”, новинкой Delphi 5 яв лялись категории свойств (property categories). Теперь свойства компонентов библио теки VCL можно отнести к той или иной категории, а инспектор объектов получает возможность рассортировать свойства по категориям. Принадлежность свойства к определенной категории можно зарегистрировать с помощью функций Register- PropertyInCategory() и RegisterPropertiesInCategory(), объявленных в моду ле DesignIntf. Первая из названных функций позволяет отнести к заданной катего рии одно свойство, а вторая — сразу несколько.
Как уже говорилось, функцию DefineBinaryProperty() лучше всего использо вать для сохранения вместе с компонентом графической или звуковой информации. Фактически в библиотеке VCL эта методика используется для сохранения изображе ний, связанных с компонентом, например значка (Glyph) компонента TBitBtn или пиктограммы (Icon) компонента TForm. В этом разделе изложено, как использовать подобную методику для сохранения звуковых данных, связанных с компонентом TddgWaveFile.
В главе 11, “Разработка компонентов VCL”, отмечалось, что интегрированная сре да разработки Delphi автоматически записывает и считывает публикуемые (published) свойства компонента из файла DFM. Что же делать, если в файле DFM не обходимо сохранять и непубликуемые данные? К счастью, компоненты Delphi содер жат механизм, позволяющий записывать и считывать определенные программистом данные из файла DFM.
модифицируют поведение компонентов во время разра ботки, позволяя добавлять элементы в контекстное меню, связанное с конкретным компонентом, а также изменять стандартные действия, выполняемые по двойному щелчку мышью на компоненте в конструкторе форм. Вполне возможно, что вы уже использовали редакторы полей компонентов TTable, TQuery и TStoredProc и, сле довательно, сами того не ведая, работали с редакторами компонентов.
Хотя компонент уже практически написан и находится на стадии тестирования, охладите свой пыл и пока не устанавливайте его в палитру компонентов. Сначала его следует отладить. Необходимо выполнить полную предварительную проверку компо нента, разработав специальный проект, создающий и использующий динамический экземпляр нового компонента. В листинге 12.3 содержится код главного модуля про екта TestMarq, предназначенного для проверки компонента TddgMarquee. Этот простой проект состоит из формы с двумя кнопками.