Сохранение и восстановление макета сетки и колонок в/из реестра либо ini-файл.

В TDBGridEh есть набор методов для сохранения и восстановления макета сетки и колонок в/из реестра либо ini-файл:

RestoreColumnsLayout - Восстановление порядка следования столбцов, ширины и состояния маркеров сортировки из реестра.

RestoreColumnsLayoutIni - Восстановление порядка следования столбцов, ширины и состояния маркеров сортировки из ini-файла.

RestoreGridLayout - Восстановление порядка следования столбцов, ширины, видимости, состояния маркеров сортировке, Sortmarked index и/или высоты строк из реестра.

RestoreGridLayoutIni - Восстановление порядка следования столбцов, ширины, видимости, состояния маркеров сортировке, Sortmarked index и/или высоты строк из ini-файла.

SaveColumnsLayout - Сохранения порядка следования столбцов, ширины и состояния маркеров сортировки в реестр.

SaveColumnsLayoutIni - Сохранения порядка следования столбцов, ширины и состояния маркеров сортировки в ini-файл.

SaveGridLayout - Сохранение порядка следования столбцов, ширин, видимости, состояния маркеров сортировке, Sortmarked index и/или высоты строк в реестр.

SaveGridLayoutIni - Сохранение порядка следования столбцов, ширин, видимости, состояния маркеров сортировке, Sortmarked index и/или высоты строк в ini-файл.

Преобразование существующегокомпонентаTDBGrid в TDBGridEh.

Несмотря на то, что TDBGridEh не является потомком компонента TCustomDBGrid, у них есть много похожих свойств.

Это позволяет конвертировать существующий компонент TDBGrid в TDBGridEh с минимальными потерями.

Для конвертирования существующего компонента TDBGrid в TDBGridEh сделайте следующее:

Откройте форму с компонентом TDBGrid в Delphi IDE.

Установите view form as Text (Alt-F12)

Переименуйте все типы TDBGrid в TDBGridEh ('object DBGrid1: TDBGrid' -> 'object DBGrid1: TDBGridEh')

Установите view form обратно как Form (Alt-F12)

В published части описания класса формы переименуйте все объекты TDBGrid в TDBGridEh ('DBGrid1: TDBGrid;' -> 'DBGrid1: TDBGridEh;' )

Попробуйте перекомпилировать проект.


 

Использование TPrintDBGridEh

Компонент TPrintDBGridEh предназнчен для предварительного просмотра и печати компонента TDBGridEh. Используйте функции Print и Preview для печати грида либо просмотра перед печатью в специально окне.

Rich text перед и после grid'а

TPrintDBGridEh позволяет печатать текст перед и после grid'а. Для этого используйте свойства AfterGridText и BeforeGridText. Также используя метод SetSubstitutes, вы можете задавать подстановку текста в свойствах BeforeGridText и AfterGridText в процессе печати/предварительного просмотра.


 

Возможности, неподдерживающиесятекущей версией TPrintDBGridEh.

Эта версия TPrintDBGridEh не поддерживает следующие возможности:

TPrintDBGridEh не может производить печать/предварительный просмотр нескольких grid'ов на одной странице.

FAQ List:

Q: Как производить печать/предварительный просмотр grid'а в ландшафтной ориентации листа.

A: TPrintDBGridEh не имеет специальных свойств для установки ориентации страницы. Перед вызовом функций Print либо Preview вы можете послать установить ориентацию для виртуального принтера.

uses ......, PrViewEh, Printers...............procedure TForm1.bPreviewClick(Sender: TObject);begin PrinterPreview.Orientation := poLandscape; PrintDBGridEh1.Preview;end;

 

Использование компонента TDBSumList

Общие сведения о TDBSumList.

Вы можете использовать TDBSumList для подсчета общего количества записей в TDataSet'е с динамическим отсаживанием изменений. Установите свойство DataSet в DBSumList'е для которого вы хотите считать и напишите обработчик события SumListChanged для описания действий после того как суммы в TDBSumList'е будут изменены. TDBSumList имеет свойство SumCollection, которое представляет собой контейнер для объектов TDBSum. Каждый объект TDBSum задает свойства подсчета агрегированного значения. Свойства FieldName и GroupOperation определяют имя поля и тип агрегированного значения, SumValue содержит текущее агрегатное значение.

Специальный подтип TDBSumList'а встроен в компонент DBGridEh.

Как это работает и почему SumListиногдарассчитывает агрегатные значения некорректно.

Data-aware компоненты взаимодействуют с dataset'ом через объект TDataLink. TDataLink не имеет свойств или событий для динамического отслеживания изменений в датасете. Например, когда удаляется запись из dataset'а, у всех объектов TDataLink срабатывает событие deDataSetChange (оперделяющее что Весь датасет изменился) и мы не может определить какое именно зименение произошло в датасете, удалилось ли одна запись или изменился весь датасет. Что бы не пересчитывать все значение в датасете при небольших изменениях TDBSumList переопределяет следующие события dataset'а: OnAfterEdit, OnAfterInsert, OnAfterOpen, OnAfterPost, OnAfterScroll, OnBeforeDelete, OnAfterClose, но появляются следующие проблемы, такие как:

Назначение этих событий в runtime деактивизируйте SumList.

При некоторых условиях SumList может выдавать ошибку нарушения доступа (exception of access violation). SumList пробует вернуть события dataset'у, но dataset уже удален. Подобная ситуция случается, когда SumList (или grid) и dataset расположены на разных формах (в разных DataModul'ях). В данной ситуации попробуйте деактивировать SumList перед тем, как форма либо DataModule с dataset'ом будут удалены.

SumList не сможет отследить изменения в dataset'е, если вы используете методы SetRange или ApplyRange. Вызывайте SumList.RecalAll после использования этих методов.

SumList не сможет отслеживать изменения в dataset'е для detail-dataset в не-BDE dataset'ах. Вызывайте SumList.RecalAll после изменения активной записи в master dataset'е.

Так же в других случаях если вы видите, что при некоторых условиях SumList рассчитывает значения некорректно, вызывайте метод RecalAll.


 

Использование edit-контролов

Общие сведения об edit-контролах.

EhLib включает пять edit-контролов: TDBEditEh, TDBDateTimeEditEh, TDBComboBoxEh, TDBNumberEditEh and TDBLookupComboboxEh. EhLib не содержит не-data-aware версий этих компонентов, т.к. каждый компонент может работать в режимах как data-aware так и не-data-aware. Базовый класс, для всех edit-контролов - это TCustomDBEditEh. TCustomDBEditEh обеспечивает поведение обычных контролов для редактирования текста и, если требуется, редактирования поля базы данных и позволяет:

Базовые функции редактирования текста, такие как выделение текста, изменение выделенного текста и изменения регистра букв.

Доступ к тексту компонента, маркированного как read-only либо указание password character для скрытия настоящего значения.

Проверка правильности ввода - использование маски ввода.

Запись отредактированного текса в поле базы данных.

Отображение одной либо нескольких кнопок редактирования (с разными изображениями: выпадающий список, многоточие, up-down стрелки, знак +, знак - либо произвольная картинка) в правой части поля редактирования.

Отображение картинки из ImageList в левой части поля редактирования.

 

Приложение может использовать свойства Text (тип String) и Value (тип Variant) для получения и установки текстового либо вариантного значений контрола. Свойство Text - это текст, который вы видите в контроле. Свойство Value содержит значения вариантного типа и может содержать типы данных, зависящие от типа контрола. Оно может содержит значение Null либо:

Строкового типа для TDBEditEh и TDBComboBoxEh,

Типов TDateTime, TDate, TTime, Double для TDBDateTimeEditEh,

Все числовые типы для TDBNumberEditEh,

TDBLookupComboboxEh содержит значение, зависящее от типа lookup-поля.

 

Если контрол подключен к полю датасета, то в момент присвоения значения свойствам Text либо Value автоматически занесутся в поле.

 

Все контролы имеют свойства Flat и AlwaysShowBorder для отображения 'плоской' рамки вокруг контрола.

Работа с кнопкамиредактирования.

Каждый edit-контрол позволяет отображать одну или более кнопок в правой части зоны редактирования. Для этого вы можете использовать свойства EditButton и EditButtons.

Использование TDBDateTimeEditEh.

 

TDBDateTimeEditEh представляет собой однострочный edit-контрол для редактирования даты и/или времени, который может отображать значения даты и/или времени.

 

Свойство Kind определяет представление компонента: как редактор дат и/или редактор времени (dtkDateEh, dtkTimeEh, dtkDateTimeEh) либо произвольный (по маске) редактор даты-времени (dtkCustomEh).

Используйте свойство EditFormat для установки произвольного формата даты/времени. Вы можете использовать следующие элемены формата: 'YY', 'YYYY', 'MM', 'DD', 'HH', 'NN', 'SS'.

По умолчанию TDBDateTimeEditEh строит маску редактирования используя переменную ShortDateFormat. Маска редактирования может быть шести типов: три для 4-символьног отображения года - 'MM/DD/YYYY', 'DD/MM/YYYY', 'YYYY/MM/DD' и три для 2-символьного отображения года 'MM/DD/YY', 'DD/MM/YY', 'YY/MM/DD'.

 

Приложение может использовать свойства Text (тип String) и Value (тип Variant) для получения и установки типа значения TDBDateTimeEditEh. Если TDBDateTimeEditEh типа dtkDateEh, тогда он будет менять только часть поля, являющуюся датой. Если TDBDateTimeEditEh типа dtkTimeEh то он будет менять только часть данных, являющуюся временем.

Использование TDBNumberEditEh.

TDBNumberEditEh предствляет собой однострочный числовой edit-контрол, который может отображать числовые данные.

 

TDBNumberEditEh отображает текст формата, заданного свойством DisplayFormat независимо имеет или не имеет контрол фокус ввода.

 

Используйте свойства EditButton для настройки кнопки в правой части контрола. Когда EditButton установлен в UpDown, то контрол работает как spin-edit. Используйте свойство Increment для установки того, какое значение будет добавляться и вычитаться из значения при нажатии на spin-кнопки контрола.

Использование TDBComboBoxEh.

Компонент TDBComboBoxEh - это edit box с прокручивающимся выпадающим списком. Пользователи могут выбирать значения из списка либо вводить прямо в edit box.

 

TDBComboBoxEh позволяет отображать однстрочный либо многострочный текст. Используйте свойство WordWrap для установки TDBComboBoxEh как многострочного редактора.

 

Используйте свойство Items для доступа к списку значений (строк) части списка combo box'а.

 

Используйте свойство KeyItems для доступа к списку значений (строк) которые будут сохранены в поле когда свойство Items тоже установлено. Если Items и KeyItems заполнены то KeyList задает значения, которые сохраняются в поле, а в Items под ссотвествующими индексами задаются значения для отображения.

 

Используйте свойство Images для определения изображений, которые будут отображаться в выпадающем списке и отображаемое в левой части combobox'а. Индекс изображения будет браться из свойства ItemIndex ComboBox'а.

Использование TDBLookupComboboxEh.

TDBLookupComboBoxEh представляет собой combo box сопоставляющий набору значений полей в одном dataset'е соответствующий набор значений из другого dataset'а. Для более детального ознакомления с понятием 'lookup' смотрите справку Delphi , тема - Displaying and editing data in lookup list and combo boxes.

 

TDBLookupComboboxEh может иметь два стиля (свойство Style):

csDropDownEh - Приложение может назначать и пользователи могут вводить текст, который не содержится в списке данных.

csDropDownListEh - Приложение может назначать и пользователи могут выбирать только текст, который содержится в списке.

 

Если свойства KeyField, ListField, ListSource, DataField и DataSource не определены, то вы можете присваивать значения KeyValue и Text как невлияющие друг на друга значения.

 

Список значений берется данные из dataset'а и управляется свойством ListSource.

Список значений может:

Отображать заголовки (Берутся из свойства Field.FisplayLabel),

Отображать специальную непрокручиваемую строку в верхней части списка (Свойство SpecRow).

Изменять размеры (Свойство Sizable),

Автоматически устанавлитать ширину как сумму DisplayWidth отображаемых полей (Свойство Width = -1),

Автоматическое выпадать при нажатии пользователем буквенной влавиши (Свойство AutoDrop).

Иметь заданную ширину (Свойство Width).

Использование SpecRow встолбцахкомпонентов DBGridEh и DBLookupComboBoxEh.

Свойство SpecRow компонента TDropDownBoxEh либо свойство DropDownSpecRow компонента TColumnEh содержит объект TDropDownBoxEh. TDropDownBoxEh определяет атрибуты специальной строки в выпадающем списке (В TColumnEh SpecRow работает только для lookup полей).

TSpecRowEh содержит следующие свойства:

 

CellsText: String Определяет текст ячейки в SpecRow. Когда выпадающий список содержит более одного столбца, используйте точку с запятой для отделения текста для каждого столбца.
Color: TColor Цвет фона специальной строки в выпадающем списке.
Font: TFont Шрифт текста специальной строки.
Value: Variant Значение. Специальная строка будет выделена в списке когда это значение равно ключевому значению lookup списка.
Visible: Boolean Указывает, что спецстрока активна и видима в списке.
ShortCut: TShortCut Указывает комбинацию клавишь по которой Value будет устанавливаться в значение контрола.
ShowIfNotInKeyList: Boolean Указывает что текст SpecRow, будет отображаеться если значение контрола не содержится в lookup списке ключевых значений.

 

TSpecRowEh представляет собой специальную строку верхней части списка для lookup-полей в столбце DBGridEh, и в классе TDropDownBoxEh компонента TDBLookupComboboxEh. Эта строка будет подсвечеваться активной, когда lookup-поле либо lookup-combobox содержит значение, равное значению specrow либо значению, отсутствующему в списке LookupList значений.


 

ИспользованиеTPropStorageEhи TPropStorageManagerEh

Компоненты TPropStorageEh and TPropStorageManagerEh реализуют технологию сохранения свойств компонент в/из хранилища настроек, таких как ini-файы и реестр.

Данная версия поддерживает компоненты для сохранения/восстановления в/из ini-файлов и реестра. Базовым компонентом данной технологии является TPropStorageEh. Double-клик на компоненте в design-time открывает окно выбора свойств для сохранения. В дереве свойств вы можете выбирать нужные свойства. Список свойств это список всех published-свойств и объявленных в функции DefineProperty компонентов. Для TCollection кроме добавляется специальная ветвь свойств <ForAllItems>. Если вы выбираете подсвойство в данной ветви, компонент сохранит соответствующее подсвойство для каждого элемента коллекции.

Компонент TPropStorageEh может сохранять/восстанавливает значения свойств в поток, но для перенаправления потока в хранилище необходимо выполнить одно из следующих действий.

 

1. Поместите компонент, унаследованный от TPropStorageManagerEh на форму.

В данной версии есть два подобных компонента - это TIniPropStorageManEh и TRegPropStorageManEh.

Установите свойства этих компонентов и назначте в качестве свойства TPropStorageEh.StorageManager этот компонент.

2. Либо вы можете один раз написать код для регистрации глобального компонента - DefaultPropStorageManager. Все компоненты TPropStorageEh, у которых свойство StorageManager не назначено будут использовать менеджер DefaultPropStorageManager для перенаправления потока значений свойств в хранилище.

Код для регистрации глобального компонента может выглядеть следующим образом:

----------- MainUnit.Pas--------...... var IniPropStorageMan: TIniPropStorageManEh; initialization IniPropStorageMan := TIniPropStorageManEh.Create(nil); IniPropStorageMan.IniFileName := 'MyIniFile.Ini'; SetDefaultPropStorageManager(IniPropStorageMan);end.--------------------------------