Главная

Разработчикам

ТЦУ2 -разработка (18.08.2003)

ТЦУ 2.0; разработка; примерно середина активной стадии (14.09.2003). 
TCUTextBox контрол (загрузить).

    После того, как основной набор компонентов для разработку ТЦУ2 был подобран и начата разработка (где-то март-апрель), я столкнулся с серьезной проблемой. Обычные поля (TextBox) совершенно не приспособлены для работы с базами данных. Я не говорю, что с ними нельзя работать и их нельзя программировать - можно, вот только, что из этого выходит... Например, есть событие Change (соответствует Access событию "Изменение") но нет события AfterUpdate ("После обновления"). А событие это нужно чрезвычайно, за годы работы у меня сложился довольно нагруженный стиль программирования, когда формы имеют много элементов и элементы между собой тесно и сложно взаимодействуют. Если не иметь нужных событий код программы усложняется настолько, что просто "сходит с ума", программа начинает просто разваливаться. Это первая проблема.
    Вторая проблема заключается в формате данных. Стандартный TextBox - это просто поле для хранения текста любого вида, и ему совершенно наплевать, пишем мы в это поле цифры или буквы, запятые или точки. И когда в числовое поле вы пишете недопустимые символы, проблемы вас ждут с распростертыми объятиями. Опять же, можно решить и эти проблемы, но когда скорость размножения проблем превышает скорость их уничтожения - проект разваливается.
    И наконец - третья проблема. Вы замечали, как работает поле формата "С разделителями разрядов" в Access. Когда оно не в фокусе - показывает форматированное значение, ну например 12,23 (если в свойствах формата поля количество разрядов после запятой задано 2), когда же мы становимся в это поле - она показывает истинное значение. В придуманном мной примере это 12,22687602 Можно для поля написать обработку и подставлять нужное значение при получении фокуса, но если такое поле подвязано к источнику данных? Чувствуете, какие вас ждут проблемы?

Решение ("Из этого дома у меня есть два пути...")
1. Вариант с модулем класса. Можно создать новый класс, выписать для него обработки, добавить новые свойства и методы.
2. Решить проблему радикально - выписать свой ActiveX контрол, и использовать его в дальнейшей жизни. При этом ставилась задача реализовать свойства и события стандартного поля Access, наиболее часто используемые. 
   
Что и было сделано за четыре ударных дня без сна и покоя. В данной заметке я не ставлю цель описать процесс создания ActiveX контрола. Поскольку контрол создавался, так сказать, стихийно, не отвлекаясь на такие мелочи, как еда и сон, то по прошествии месяца или двух процесс этот представляется уже слегка туманно, да и литературы по этому поводу в сети достаточно, сходите например на http://vbrussian.com , в разделе статей найдете.
    Я этой статье я расскажу о свойствах и событиях данного контрола, что он умеет, и как его запустить в работу.
Перечень свойств.
1. ValueOrDate. Тип логический. Если ложь, то поле хранит значения числового типа. Если истина, то хранит значения даты. Формат даты соответствует системному.
2. ValueFormat. Может содержать строку форматирования для отображения поля в форматированном виде. Для представления числа с двумя знаками после запятой строка форматирования будет такой "0.00". Пример работы указанного свойства: a) Фокус в поле не установлен, отображаемое значение отформатировано; б) Фокус в поле установлен, отображаемое значение соответствует истинному содержимому. 
3. Value. Используется для хранения истинного значения поля. Если поле привязано к источнику данных, то значение свойства Value соответствует значению поля источника данных.
4. Text. Используется для отображения значения поля на экране. Если задано свойство ValueFormat, содержит форматированное значение. Когда поле получает фокус, свойство Text приобретает значение свойства Value.
5. Spinner. Если задано значение "истина", то в правой части поля отображаются две кнопки для изменения значения. Если ложь, кнопки не отображаются. Может отображаться в двух вариантах a) или б) в зависимости от свойства SpinnerIn
6. SpinnerIn. Актуально, только в случае, если свойство Spinner имеет значение "истина". Если ложь, то кнопки для изменения значения отображаются справа от поля снаружи , если истина, то справа внутри поля .
7. IncrementValue. При нажатии на кнопки изменения значения (свойство Spinner  - "истина"), значение поля (свойство Value) будет изменяться на значение в IncrementValue. Например, если нужно изменять копейки, то IncrementValue задаем 0.01
События. 
Основной набор событий стандартный. Остановимся на одном дополнительном событии - АfterUpdate (после обновления) Возникает после изменения пользователем свойства Text в режиме ручного редактирования и потери фокуса полем. Программное изменение свойств Text или Value не приводит к возникновению события AfterUpdate (как и в Access).

ShadowLabel контрол.

Буквально означает "надпись с тенью". Служит для отображения надписей вдавленного, приподнятого и выпуклого оформления. Без использования данного контрола эффект такого оформления достигается путем комбинации нескольких надписей одна над другой с одинаковым текстом, но разным цветом шрифта. Не сказать, что процесс создания таких надписей сколько-нибудь сложен, но в известной мере трудоемок. 
Перечень свойств.
1. DifX и DifY отступы теневой надписи от основной на определенное число точек (не твип!), по умолчанию указанные свойства имеют значение 1, что приводит к эффекту вдавленной надписи, при условии, что мнимый источник освещения находится в верхнем левом углу экрана.
2. ForeColor - цвет основной надписи.
3. Fore2Color - цвет теневой надписи.
4. Font - определяет используемый шрифт.
5. Caption - задает текст надписи.
В работе ShadowLabel выглядит примерно так (сглаживание экранного шрифта в Windows отключено)

Calendar контрол.

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

Перечень свойств.
1. ClnDate - дата календаря. Может быть изменена пользователем вручную либо программно.
2. ShapeCell - позволяет менять начертание ячеек дней. Ячейки можно задавать прямоугольными, прямоугольными со скругленными краями (как на рисунке), круглыми.

Установка и использование.
Скачивать контролы можно отсюда.

Запустите файл tcubox.exe, в результате компонент будет установлен. Запустите Visual Basic, откройте меню Project -> Components, в списке доступных компонентов выберите TCUField.

Готов ответить на вопросы.
Андрей Кравченко admin@megakot.com.ua

Главная

Разработчикам

ТЦУ2 -разработка (18.08.2003)