На этом шаге мы рассмотрим компонент TValueListEditor.
Компонент TValueListEditor введен в версии 6 и предназначен для редактирования списков строк вида имя=значение. Такие списки широко используются в реестре Windows и файлах инициализации. Начиная с версии 5 Delphi, по умолчанию, в таком формате хранит файлы описания форм .dfm.
Непосредственным предком компонента является класс TCustomDrawGrid, поэтому многие его свойства, методы и события совпадают со свойствами, методами и событиями компонента TStringGrid.
Специфичные свойства компонента:
Свойство | Описание |
---|---|
Property Cells[ACol, ARow: Integer]: String; | Открывает доступ к содержимому ячейки, лежащей на пересечении столбца ACol со строкой ARow (нумерация столбцов и строк начинается с нуля). |
Property ColCount: Integer; | Содержит количество столбцов. |
type TDisplayOption = (doColumnTitles, doAutoColResize, doKeyColFixed); TDisplayOptions = set of TDisplayOption; Property DisplayOptions: TDisplayOptions; |
Свойство может включать следующие значения:
|
Property DropDownRows: Integer; | Указывает максимальное количество строк в списке возможных значении, показ которых не сопровождается появлением полосы прокрутки |
Property ItemProps[const KeyOrIndex: Variant]: TItemProp; | Сложное свойство, управляющее различными аспектами отображения значений (см. табл.2.) |
type TKeyOption = (keyEdit, keyAdd, keyDelete, keyUnique); TKeyOptions = set of TDisplayOption; Property KeyOptions: TKeyOptions; |
Управляет возможным изменением списка:
|
Property Keys[Index: Integer]:String; | Открывает доступ к названиям значений по их индексам. |
Property RowCount: Integer; | Содержит количество строк. |
Property Strings: TStrings; | Содержит строки списка. |
Property TitleCaptions: TStrings; | Содержит заголовки столбцов. |
Property Values[const Key: String]: String; | Открывает доступ к значениям по их индексам. |
Свойство ItemProps класса TItemProps имеет собственные свойства:
Свойство | Описание |
---|---|
Property EditMask: String; | Содержит маску для формирования значения. |
type TEditStyle = (esSimple, esEllipsis, esPickList); Property EditStyle: TEditStyle; |
Определяет правила редактирования значения:
|
Property MaxLength: Integer; | Определяет максимальную длину (в символах) значения. Если 0, нет ограничений на длину. |
Property PickList: TStrings; | Содержит выпадающий список возможных значений. |
Property ReadOnly: Boolean; | Разрешает/запрещает редактирование значения. |
Заметим, что свойство PickList не предназначено для программного доступа. Чтобы создать выпадающий список возможных значений, нужно свойству ItemProps.EditStyle присвоить значение esPickList и написать обработчик события onGetpickList. Пусть, например, первая отображаемая в компоненте строка должна иметь раскрывающийся список. Тогда необходим такой код:
procedure TFormI.FormActivate(Sender: TObject); begin ValueListEditorl.ItemProps[1].EditStyle := esPickList; end; procedure TFormI.ValueListEditorlGetPickList(Sender: TObject; const KeyName: String; Values: TStrings); begin {Содержимое списка доступно через параметр Values} Values.Add('1') ; Values.Add('2') ; Values.Add ('3') ; Values.Add('4') ; end;
Методы компонента TValueListEditor:
Метод | Описание |
---|---|
Procedure DeleteRow (ARow: integer); override | Удаляет из списка строку с индексом ARow. Свойство KeyOptions должно содержать флаг keyDelete |
Function FindRow (const KeyName: string; var Row: integer): Boolean; | Ищет в списке строку с именем KeyName и возвращает в параметре Row индекс найденой строки. Возвращает значение True в случае успеха поиска. |
Function InsertRow (const KeyName, Value: string; var Append: Boolean): Integer; | Вставляет в список строку вида KeyName=Value. Если текущая строка пуста, вставляемая строка занимает ее место, в противном случае она занимает место перед текущей (если Append=False) или за ней (если Append=True). Возвращает индекс вставленной строки. Свойство KeyOptions должно содержать флаг keyAdd. |
Procedure Refresh; | Перерисовывает компонент. |
Function RestoreCurrentRow: Boolean; | Отменяет все изменения текущей строки и возвращает значение True в случае успеха. |
Методы CellRect, MouseToCell и MouseCoord аналогичны одноименным методам компонента TStringGrid.
События компонента TValueListEditor:
Событие | Описание |
---|---|
Property OnEditButtonClick: TNotifyEvent; | Возникает при щелчке по кнопке раскрытия диалогового окна редактирования значения. Свойство ItemProps .EditStyle должно содержать значение esEllipse. |
type TGetPickListEvent = procedure (Sender: TObject; const KeyName: String;
Values: TStrings)of object; Property OnGetPickList: TGetPickListEvent; |
Возникает при щелчке по кнопке раскрытия списка возможных значений. Параметр KeyName содержит имя строки, в которой произведен щелчок. Обработчик должен заполнить возможными значениями список Values. Свойство ItemProps. EditStyle должно содержать значение esPickList. |
Property OnStringsChange: TNotifyEvent; | Возникает сразу после изменения имени или значения текущей строки. |
Property OnStringsChanging: TNotifyEvent; | Возникает непосредственно перед изменением имени или значения текущей строки. |
type TOnValidateEvent = procedure (Sender: TObjectACol, ARow: Longint;
const KeyName, KeyValue:String) of object; Property OnValidate: TOnValidateEvent; |
Возникает перед тем как фокус ввода покинет ячейку ACol, ARow. Обработчик может проверить новые значения KeyName и KeyValue и возбудить исключение, если исправления в строке были ошибочными. |
События OnDrawCell, OnGetEditMask, OnGetEditText, OnRowMoved, OnSelectCell, OnSetEditText, OnTopLeftChanged аналогичны одноименным событиям компонента TStringGrid.
Выполним задание: создадим приложение, которое будет открывать выбранный файл в компонент TValueListEditor (рис.2.).
Разместим на форме компоненты: TValueListEditor, TOpenDialog, TButton и TBitBtn (рис.1.).
Рис.1.Windows-окно примера при проектировании
Обработчик щелчка на кнопке имеет следующий вид:
procedure TForm1.Button1Click(Sender: TObject); begin If OpenDialog1.Execute then ValueListEditor1.Strings.LoadFromFile(OpenDialog1.FileName); end;
Рис.2.Демонстрация компонента TValueListEditor
На следующем шаге мы рассмотрим компонент TLabeledEditor.