Компонент TFastListView |
Наследник TListView (на самом деле, является наследником промежуточного класса TColorListView, но этот промежуточный класс не предназначен для самостоятельного использования, и инкапсулирует в основном возможности по рисованию ячеек и заголовка различным цветом и шрифтами). Основное отличие от предка TListView - этот список предназначен для отображения больших наборов данных, обычно загруженных из базы данных, поэтому базовый компонент TListView используется сразу как виртуальный. Причем, отображение всегда подразумевает вид таблицы (lvReport), и другие варианты просто никогда не тестировались.
Имеется довольно значительное число внешних и функциональных улучшений, такие как сортировка и фильтрация значений по колонкам, в том числе сортировка по нескольким колонкам, упрощение сортировки по определенным правилам, запоминание ширины и порядка колонок в реестре, программный доступ к ячейкам по именам полей, сопоставленных колонкам, редактирование ячеек, возможность сохранения содержимого в Excel или текстовой файл, улучшения в отображении заголовка таблицы и многое другое.
Подробное описание
Так как это наследник стандартного TListView, то описывать все унаследованные свойства особого смысла нет. Следует оговорить следующее: при установке на форму следует сразу компоненту задать свойство ViewStyle = vsReport, так как этот визуальный компонент предназначен для работы именно в "детальном", т.е. табличном, режиме.
Важный момент: один и тот же модуль не может использовать и стандартный TListView, и TFastListView. Дело в том, что в интерфейсной части модуля FastListView классы TListView, TListItem и другие переопределяются так, чтобы имя типа TListView означало ссылку на TFastListView (и, соответственно TListItem ссылалось на TFastListItem). Сделано это в целях совместимости (хотя это может это показаться странным), а именно - с целью обеспечения возможности быстрого перехода к использованию TFastListView в программе от TListView. Для чего имеется специальная процедура импортирования свойств. Достаточно положить на форму (в режиме дизайнера) компонент TFastListView, правой кнопкой мыши по нему вызвать контекстное меню, и выбрав пункт "Импорт TListView", выбрать из списка нужный контрол. После чего старый компонент автоматически удаляется, а новый становится на его место.
Данный компонент изначально написан для Delphi5, но может работать и с более новыми версиями компилятора. При установке на палитру компонентов обратите внимание на то, чтобы в опциях пакета присутствовал символ условной компиляции RUSSIAN_LANGUAGE. Этот же символ желательно добавить в свойства каждого использующего приложения. Этот условный символ определяет то, какой набор текстовых ресурсов (русский или английский) используется для формирования текстовых сообщений и текста всплывающего на заголовке меню.
Можете отметить себе выгодную особенность TFastListView по сравнению со стандартным TListView при работе в Delphi5: он нормально работает при подключенном манифесте: нормальность проявляется в том, что не возникает постоянно исключительная ситуация где-то в дебрях программного кода в обработчике сообщения WM_NOTIFY (при наведении курсора мыши на заголовок), что просто не позволяет отлаживать программу (приходится либо отключать манифест, либо переходить к другой версии Delphi).
Обратите внимание на то, что для того, чтобы возможно было использовать методы Assign для присваивания значения из TNewQuery , в свойствах проекта должен быть определён символ условной компиляции USE_NEWQUERY. Если этот символ не определён, то метод Assign может напрямую брать данные только из стандартного TQuery и TADOQuery.
Внимание (проблема!): При использовании TFastListView, может возникать неприятная ситуация, связанная с неправильным помещением первого видимого элемента в неправильную (не первую) позицию после изменения количества элементов в списке. Это поведение полностью "обеспечивается" стандартным list-view контролом, и полностью устранить его вообще для всех случаев не удается. Существуют некоторые способы устранить эту неприятность, в тех случаях, когда она доставляет неудобства. Один из вариантов - перед изменением числа элементов в сторону уменьшения перевести свойство ViewStyle в, например, lvsIcon, а после изменения - вернуть в lvsReport. Но это не всегда помогает. Более правильно обеспечить нулевое положение линейки вертикальной прокрутки до начала изменения количества элементов в списке. Например, выделить первый элемент, сделать его видимым (метод MakeVisible), после чего выполнить необходимые изменения, и восстановить выделение. Поскольку постоянное добавление таких действий может привести к замедлению работы с большими списками, данное "улучшение" не реализовано, и предлагается этот или другой метод устранения сбоев использовать "по месту" - в коде конечной программы.
TFastListView | TListColumn | TFastListItems | TFastListItem |
Свойства, события и методы класса TFastListView, доступные в Инспекторе объектов и во время исполнения.
Публикуемые свойства (свойства, которые могут быть изменены Инспектором объектов в режиме дизайна формы).
Имя свойства | Тип | Начальное значение |
Описание | |
AllowColumnDrag | Boolean | TRUE | Разрешает перетаскивать колонки
пользователю (нажимая левой клавишей мыши на заголовке колонке и
перетаскивая ее влево или вправо). Данное свойство работает (перетаскивание включено), только если не установлено свойство многострочной шапки таблицы (см. MultiHeader). |
|
AllowColumnHide | Boolean | TRUE |
Разрешает пользователю скрывать колонки используя контекстное меню, вызываемое на заголовке колонки. Скрытые колонки могут быть из того же меню вновь отображены. Не следует путать временно скрытые пользователем колонки с перманентно невидимыми колонками, которые может иметь TFastListView. |
|
AutoAllocateColumns | Boolean | FALSE |
Разрешает в программе использовать перманентно невидимые колонки, добавляемые автоматически при первом обращении (для записи данных) к колонкам по именам, которые на момент вызова в таблице отсутствуют. В случае, если значение свойства = FALSE, обращение к колонкам, отсутствующим в списке колонок, приводит к программному исключению. |
|
AutoExpandColumn | Integer | -2 |
Позволяет автоматически расширять одну из колонок
таблицы при изменении размеров таблицы (например, в результате изменения
размера формы или при движении сплиттера) или при изменении размеров
некоторой колонки пользователем. Специальное значение |
|
BoldIfFocused | Boolean | TRUE | Элемент в фокусе ввода отображается с утолщенным шрифтом, когда это свойство = TRUE. | |
CheckBoxes | Boolean | FALSE |
В стандартном TListView позволяет быстро добавить переключаемые пользователем флажки (check box) в 0-й колонке (соответствующей свойству отдельного элемента Caption). В TFastListView свойство не работает и не используется. Для добавления аналогичного поведения следует назначить свойство SmallImages, добавить туда пиктограммы, соответствующие отмеченному и снятому флажку, и обрабатывать событие OnClick (например), получая координаты курсора мыши, находя строку, в которой был клик и проверяя, что они лежат в пределах пиктограммы (TFastListItem.DisplayRect( drIcon )), затем меняя свойство TFastListItem.ImageIndex. Наверное, можно было сделать что-то в этом направлении, но как-то не было особой необходимости. |
|
HdrFont | TFont |
Данное свойство позволяет задать отдельный шрифт для заголовка. Масштабирование шрифтов имеет лучший эффект в том случае, если используется шрифт True Type (например, Tahoma). |
||
HdrFontSame | Boolean | TRUE |
Данное свойство позволяет быстро установить в качестве шрифта для заголовка тот же шрифт, что и для всего списка. |
|
HdrFontScale | Boolean | TRUE |
Данное свойство управляет тем, будет ли заголовок отображаться с переносом по словам и с масштабированием размера шрифта вниз, когда весь текст в заголовок не вмещается. По умолчанию данное свойство включено. Рекомендуется в случае больших названий и достаточно узких колонок использовать свойство HdrHeight для того, чтобы увеличивать высоту заголовка, чтобы в него входило большее число строк. |
|
HdrHeight | Integer | 0 |
Данное свойство позволяет установить высоту заголовка в режиме ViewStyle = lvsDetail в пикселях. Высота устанавливается как максимум от HdrHeight и текущей вычисленной высоты (в случае MultiHeader). Так как высоту заголовка нельзя изменить после создания и первого отображения окна, для большей гибкости в вычислении высоты заголовка предоставляется событие OnGetHdrHeight, которое вызывается в тот момент, когда этот параметр требуется в первый (и последний) раз. В обработчике события вычисленное значение следует присвоить свойствк HdrHeight. Значение 0 в этом свойстве означает, что высота заголовка определяется без учета данного свойства. Обратите внимание на то, что в режиме дизайнера установка свойства HdrHeight не влияет на изображение заголовка: результат можно будет увидеть только после запуска приложения. |
|
HdrWrapping | THdrWrapping | hwSyllabels |
Данное свойство позволяет управлять способом переноса на другую строку в процессе отображения текста заголовка. Варианты: hwWords - по словам, |
|
Items | TFastListItems | ... |
В стандартном TListView есть возможность отредактировать значения элементов списка в режиме дизайнера. В TFastListView такой возможности не предусмотрено, так как он предназначен для динамического заполнения программным кодом во время исполнения. Во время исполнения свойство Items доступно, и является необходимым для доступа к элементам списка (строкам таблицы), использование в этом случае аналогично свойству Items в TListView. |
|
ItemAlign | TAlignment | taLeftJustify | Быстрое выравнивание 0-й колонки. Вообще, у каждой колонки в режиме дизайнера может быть настроено свое собственное выравнивание. | |
MultiHeader | String |
Позволяет задать многоуровневый заголовок таблицы, если присвоена непустая строка, например, одиночный символ '|' (вертикальная черта). В этом случае строка используется как разделитель, анализируемый в заголовках колонок особым образом. В заголовках колонок, строка до этого разделителя рассматривается как заголовок нижнего уровня. Для того, чтобы указать, что колонка имеет, кроме нижнего заголовка, вышестоящий, после основного заголовка строки вписывается разделитель, вслед за которым записывается заголовок вышележащего уровня. Если требуется задать еще один вышележащий уровень, записывается еще один разделитель, за которым записывается заголовок третьего уровня. Например, в вышеприведённом скриншоте три колонки заданы с заголовками 'aaa|111', 'bbb' и 'ccc|222' (Multiheader='|'). Обратите внимание, что при использовании доступа к ячейкам по именам колонок колонки 'aaa' и 'ccc' уже не будут доступны по этим именам (их можно сделать доступными, изменив свойство FieldName, снова задав 'aaa' и 'ccc').
Внимание:
|
||
PswColor | TColor | Цвет фона по умолчанию для строк, которые не являются выделенными (для выделенных строк см. SelColor). | ||
RegistrySaveRestore | Boolean | TRUE |
Позволяет автоматически сохранять значения ширины колонок, порядка колонок, видимости колонок в реестре. Для того, чтобы это свойство работало, необходимо указать в глобальной переменной RegistrySaveRestore : String путь, по которому в реестре будет храниться список значений для всех TFastListView на всех формах приложения. Например, 'Software \ MyCompany \ MyCoolApp \ ListViewSettings \' (без пробелов). Такое присваивание достаточно выполнить однократно при старте приложения. Создаваемые ключи сохраняются в итоге по пути HKCU \ Software \ MyCompany \ MyCoolApp \ ListViewSettings \ WWWWxHHH \ (где WWWW и HHH - размеры экрана), имеют имя ParentFormName.FastListViewControlName, и далее по этому ключу сохраняются значения. |
|
SelColor | TColor | clHighlight | Настройка цвета фона выделенного элемента (когда контрол в фокусе). | |
SelColorNoFocus | TColor | clBtnFace | Настройка цвета фона выделенного элемента для случая, когда контрол не находится в фокусе ввода. | |
SelColorText | TColor | clHighlightText | Настройка цвета текста выделенного элемента (контрол в фокусе ввода). | |
SetColorTextNoFocus | TColor | $3E3B24 | Настройка цвета текста выделенного элемента (контрол не в фокусе ввода). | |
SortByCase | Boolean | FALSE | Сортировка с учетом регистра (все дополнительные свойства сортировки действуют только при включении типа сортировки SortType <> stNone). | Обратите внимание, что каждая колонка может иметь собственные настройки сортировки, перекрывающие общие свойства SortByXXXX. Эти настройки задаются в режиме дизайнера формы, и могут быть изменены соответствующими свойствами самого контрола TFastListView во время исполнения (см. ColumnSortAttrs) |
SortByDate | Boolean | TRUE | Сортировка дат в формате ДД.ММ.ГГГГ. | |
SortByIcons | Boolean | FALSE | Сортировка по пиктограммам, точнее, по индексам ImageIndex, присвоенных элементам (строкам) таблицы. Включение этого свойства приводит к добавлению визуального элемента в заголовке первой колонки, по которому можно кликнуть мышью, чтобы получить данную сортировку. | |
SortByNumber | Boolean | TRUE | Сортировка колонки по числам. Любая последовательность цифр в сравниваемых строках преобразуется в числа, и дальнейшее сравнение выполняется по значению числа, после чего сравнение строк продолжается в том же порядке при совпадении чисел. Например, A1B < A10B, S9X < S105. | |
SortType (стандартное свойство, используется для управления новыми свойствами сортировки) |
TSortType | stNone | Включает возможность сортировки таблицы по значениям колонок. Если значение этого свойства остается равным stNone, то сортировка не используется и недоступна пользователю. При включенной сортировке, пользователь может задать сортировку по заданным колонкам (клик по заголовку колонки), в нужном ему порядке просмотра колонок (клик по заголовку колонки с зажатой клавишей Ctrl), с заданием нужного ему направления сортировки (повторный клик по заголовку, порядок просмотра колонок отображается цифрой в заголовке колонки, участвующей в сортировке). | |
VirtualTotally | Boolean | FALSE |
Установка этого свойства в TRUE превращает контрол в полностью виртуальный. В этом случае данные не хранятся в самом контроле, а запрашиваются контролом в обработчиках событий OnDataCell, OnDataCellImage, OnDataCellNamed. Кроме того, для правильной работы сортировки в этом режиме необходимо назначить обработчик события OnSwapItems, который обменивал бы данные, соответствующие указанным строкам (элементам) в том хранилище, где приложение хранит данные для полностью виртуального FastListView. Обратите внимание, что в режиме полностью виртуального списка нельзя присваивать значения ячейкам (TFastListItem.Caption, TFastListItem.SubItems[ ], или с помощью свойств для работы с ячейками). А так же на то, что в этом режиме программа должна присваивать значение свойству Items.Count для того, чтобы отображалось указанное количество строк. Для отображения очень большого числа данных вTFastListView, лучше всего использовать этот режим, а для хранения при этом выделить объект класса TFastTable, который позволяет эффективно хранить тождественные данные. |
Публикуемые события класса TFastListView (назначаемые в режиме дизайнера форм, так же перечисляются только события, новые по сравнению со стандартным TListView):
Имя события | Параметры | Описание |
OnAfterSort | (Sender: TObject) |
Вызывается после завершения сортировки. Может использоваться в пользовательском коде для восстановления (или сброса) выделенных элементов. Внимание: самостоятельно контрол изменение выделения после сортировки не обеспечивает, и в качестве выделенного считает те элементы, индексы которых совпадают с ранее выделенными элементами. |
OnBeforeFilter | ( Sender: TObject; var Cancel: Boolean ) | Вызывается перед выполнением фильтрации. Программа может отменить фильтрацию, если в данный момент по какой-то причине фильтрацию нельзя допускать. |
OnBeforeSort | (Sender: TObject) | Вызывается перед сортировкой. Может использоваться, например, для того, чтобы запомнить список выделенных строк перед выполнением сортировки, чтобы затем в OnAfterSort восстановить корректное выделение. |
OnBeginEditCell | ( Sender: TFastListView; Item: TFastListItem; SubItem: Integer; var CanBeginEdit: Boolean; var EditKind: TEditKind ) |
Действие данного события существенно расширено по сравнению со
стандартным OnEditing. Оно потребовалось
потому, что стало возможно редактировать не только 0-ю колонку (т.е.
TFastListItem.Caption), но любую указанную колонку
(TFastListColumn.CanEdit). Обработчик получает
укзатель элемента списка (Item), индекс
колонки (SubItem, от |
OnCreateEditCell | ( Sender: TFastListView; Item:
TFastListItem; SubItem: Integer; UniEdit: TControl ) |
Обработчик вызывается после создания контрола, который будет использоваться для редактирования ячейки. |
OnEndEditCell | ( Sender: TFastListView; Item:
TFastListItem; SubItem: Integer; UniEdit: TControl; var S: String ) |
Требуется по той же причине, что и OnBeginEditCell - в связи с добавлением возможности редактирования значения в любой колонке. Обработчик получает в качестве значения редактирующий контрол (типа TUniEdit), и может изменить значение, присваиваемое ячейке в результате редактирования на то, которое считает более правильным (например, откорректировав ввод пользователя или фактически отменив редактирование путём присваивания предыдущего значения). |
OnGetHdrHeight | (Sender: TObject) | Позволяет установить значение свойства HdrHeight (обработчик вызывается единственный раз при создании окна для контрола). |
OnHdrDividerDblClk | (Sender: TObject; columnIdx: Integer) |
Позволяет обеспечить программируемое поведение в ответ на двойной клик по разделителю колонок. Для небольшого числа элементов обычно принято в этом случае выполнять автоподбор ширины колонки таки образом, чтобы все строки в этой колонке вмещались визуально в ширину своей колонки. В случае очень больших массивов данных, рекомендуется ограничиваться автоподбором ширины колонки в пределах одной страницы. |
OnHdrPaint | ( Sender: TObject; Canvas: TCanvas; R: TRect; ColIdx: Integer ) |
Позволяет обеспечить произвольное рисование заголовка (шапки) таблицы, которое вызывается после того, как отработала основная процедура рисования заголовка (т.е., пользовательский обработчик может рисовать в режиме до- или подрисовки, в том числе пропустить рисование для тех колонок, которые нет нужды перерисовывать). |
OnHdrTrack | (Sender: TObject) | Позволяет отслеживать наведение мыши на заголовок TFastListView. |
OnKillFocus | (Sender: TObject) | Позволяет отследить событие потери фокуса контролом. |
OnLineToExcel | function( Sender: TFastListView; Item: TFastListItem; WB, WS: Variant; xLeft, xRight: Integer; Progress: TFLV_fmProgress = nil ): String |
Позволяет изменить строку, сохраняемую в книгу Excel при вызове метода SaveToExcel. Обычно такое изменение следует делать в том случае, когда компонент TFastListView используется как полностью виртуальный, или требуется полностью переопределить процедуру формирования Excel-выхода для некоторых строк. Для полного переопределения форматирования лучше вместо использования метода SaveToExcel выписать свой код для формирования Excel-книги. |
OnMessage | function( Sender: TObject; var Msg: TMessage ): Boolean | Позволяет обработать в пользовательском коде произвольное событие (оконное или пользовательское). Обработчик возвращает TRUE в случае, если сообщение обработано, и дальнейшая его обработка не требуется. В противном случае вызываются все прочие процедуры диспетчеризации, вплоть до обработки сообщения стандартными средствами. |
OnSelecting | function( Sender: TObject; Item: TFastListItem ): Boolean | Позволяет предотвратить выделение некоторых строк в списке (если обработчик возвращает FALSE). |
OnSelectItem | procedure(Sender: TObject;
Item: TListItem; Selected: Boolean) |
Позволяет обработать событие выделения или снятия выделения с
отдельного элемента. Данное событие срабатывает только для первого
элемента среди выделенных, когда MultiSelect = TRUE
и назначен обработчик события OnSelectRange. Внимание: следует учитывать, что при снятии выделения сначала следует обращение к обработчику с элементом Item = NIL ! |
OnSelectRange | procedure( Sender: TObject; IdxFrom,
IdxTo: Integer; Selected: Boolean ) |
Позволяет обработать событие выделения или снятия выделения с группы элементов (например, в результате нажатия на элемент мышью с зажатой клавишей SHIFT). В случае, если этот обработчик назначен, событие OnSelectItem срабатывает только для первого выделенного (или выделяемого элемента) списка. |
OnSwapItems | ( Sender: TFastListview; e1, e2: Integer ) |
Данное событие вызывается при сортировке полностью виртуального (TotallyVirtual = TRUE) компонента. Оно предназначено для того, чтобы код приложения мог поменять элементы в том хранилище, в котором на самом деле хранятся данные для отображения. |
OnVScroll | (Sender: TObject; Show: boolean) |
Обработчик вызывается при показе и скрытии линейки вертикальной прокрутки. Очевидно, что при этом меняется размер клиентской части окна, и в обработчике может быть выполнен, например, программная настройка ширины строк (если по какой-то причине не устраивает автоподбор). |
Свойства времени исполнения (секция PUBLIC), доступные из программы.
Методы класса TFastListView, доступные во время исполнения (секция PUBLIC)
Имя метода | Параметры | Описание |
RestoreSettingsFromRegistry |
Восстанавливает настройки из реестра. Данный метод один раз автоматически вызывается при создании объекта (но можно его дополнительно вызвать программно). Для правильной работы необходимо настроить глобальную переменную RegistryKeyPath (лучше это делать в программе один раз, константой или в блоке initialization какого-либо модуля, желательно главного, или создающегося автоматически при запуске программы - по меньшей мере). |См. так же свойство RegistrySaveRestore. |
|
SaveSettingsInRegistry |
Сохраняет настройки в реестре, в качестве базового пути используется глобальная переменная RegistryKeyPath, см. выше. Данный метод автоматически вызывается при разрушении объекта TFastListView, но его можно так же вызывать программно (желательно не делать этого слишком часто). Сохраняются порядок, видимость, размеры колонок. См. так же свойство RegistrySaveRestore. |
|
Clear | Очищает список, удаляя из него все элементы. Эквивалентно Items.Clear; | |
GetItemAt | ( X, Y: Integer ): TFastListItem | Возвращает элемент, находящийся по заданным клиентским координатам окна контрола, или NIL, если по этим координатам нет элемента. |
AlphaSort | : Boolean | Сортировка строк в соответствии с заданными критериями и событиями сортировки (для колонок, которые не имеют специальных настроек, при отсутствии обработчика события используются атрибуты сортировки по умолчанию). Возвращается FALSE, если сортировка не выполнена (была отменена). |
Sort | : Boolean | Повторяет сортировку для колонок, заданных ранее. |
SortColumns | ( const ColumnsArray: array of
Integer; OrderByFollowsColumns: Boolean = TRUE ) |
Позволяет отсортировать строки по заданному набору колонок. Дополнительный параметр позволяет указать, следует ли учитывать прочие колонки, если сравнение по указанным колонкам не дало различия между строками (если нет, для дальнейшего определения порядка элементов используется оригинальный индекс элемента). Для сортировки по колонке в обратном порядке к индексу в массиве следует добавить флажок $80000000 (установить логической операцией OR). |
CompareItems | ( Item1, Item2: TFastListItem ): Integer | Выполняет сравнение двух элементов по тем правилам, которые применяются при сортировке, возвращает соответствующий результат. |
SetSortColumnAttributes | ( const ColumnIndeces: array of
Integer; Attrs: TColumnSortAttrs ) |
Аналогично свойству ColumnSortAttrs, используется для установки одинаковых атрибутов сортировки сразу для нескольких колонок, индексы которых перечислены в массиве ColumnIndeces. |
IndexOfColumn | ( const ColName: String ): Integer | Поиск колонки по ее заголовку или по имени поля, ассоциированному с колонкой. |
FilterColumns | ( ColumnsList: array of Integer ) |
Позволяет программно указать колонки, доступные
для фильтрации из контекстного меню пользователя. В режиме разработки
проекта данный атрибут может быть задан для каждой колонки
отдельно или для группы колонок при
редактировании колонок компонента. Если
колонки создаются в программе динамически, следует использовать
данный метод. |
FilterItems |
Данный метод может вызываться для фильтрации в соответствии с текущим выбором пользователем колонок для фильтрации и позволяет обновить состояние объекта после изменения значений его ячеек (выполненное программно или пользователем). |
|
ClearFilters | Сброс (отмена) всех установленных пользователем фильтров. Список колонок для фильтрации не изменяется. | |
FindData | (StartIndex: Integer; Value: Pointer; Inclusive, Wrap: Boolean): TListItem |
Поиск элемента (строки таблицы) по значению Item.Data. |
GetNextItem | (StartItem: TListItem; Direction: TSearchDirection; States: TItemStates): TListItem |
Поиск следующей (в заданном направлении) строки с указанными атрибутами TItemStates. Если такая строка (элемент) не найден, возвращается nil. Для поиска следующей выделенной строки полезно так же свойство NextSelected, которое обычно требуется чаще прочих. |
NextSelected | ( LI: TFastListItem ): TFastListItem | Позволяет быстро перечислить выделенные элементы списка. Например:var LV:
TFastListView;
работаем с элементом
(строкой) LI |
SelectAll | Метод для быстрого (практически мгновенного) выделения всех элементов списка (без учета отфильтрованных, разумеется, в выделенные всегда попадают только видимые элементы). | |
InvertSelection | Быстрое инвертирование выделения. Отфильтрованные (не попавшие в список видимых) строки не участвуют в выделении в любом случае. | |
DeleteSelection | Быстрое удаление выделенных элементов (строк). | |
DeleteHiddenItems | Быстрое удаление скрытых (отфильтрованных) элементов. | |
HasEmptyCaptions | : Boolean | Возвращает TRUE, если есть хотя бы одна строка (элемент) с пустым заголовком (Caption='') |
SaveToExcel | ( const Filename: String; const ImageNames: String =
''; const StateImageNames: String = ''; FromIdx: Integer = 0; ToIdx: Integer = MaxInt; SelectedOnly: Boolean = FALSE ) |
Сохранение содержимого в файл типа "книга Excel". Параметры ImageNames и StateImageNames позволяют задать имена пиктограмм, которые отображаются вместо самих пиктограмм (используется отдельная колонка). Если передана пустая строка, пиктограммы при сохранении игнорируются. В непустой строке имена пиктограмм должны быть перечислены через запятую. Если объявленная в модуле FastListView глобальная переменная SaveToExcelViaClipboard установлена (по умолчанию это так), то используется максимально быстрый способ, позволяющий практически мгновенно выполнить операцию даже для очень большого списка. Этот способ заключается в помещении текста в буфер обмена, и затем вставке содержимого буфера обмена в книгу Excel. Недостаток такого метода - прежнее содержимое буфера обмена портится. |
SaveToWorksheet | (Excel, WB, WS: Variant; TopLine:
Integer = 1; const ImageNames: String = ''; const StateImageNames: String = ''; FromIdx: Integer = 0; ToIdx: Integer = MaxInt; SelectedOnly: Boolean = FALSE; Progress: TFLV_fmProgress = nil) |
Сохранение содержимого в файл типа "книга Excel". То же, что и выше, но с указанием уже открытого экземпляра Excel, книги (WB) и листа книги (WS) в нем. Дополнительно может быть указан уже созданный экземпляр формы прогресса. |
ContentAsText | ( const ColumnSeparator: String = ''#9; const LineSeparator: String = ''#13#10 ): String |
Получение содержимого в виде текстовой строки (после чего ее, например, можно записать в текстовой файл, или скопировать в буфер обмена). ColumnSeparator задаёт разделитель колонок (по умолчанию символ табуляции), LineSeparator задаёт разделитель строк (по умолчанию стандартные символы конца строки). |
ColumnIndexByName | ( const S: String ): Integer | Возвращает 0..Columns.Count-1 по заголовку колонки или имени поля, сопоставленного колонке. Используется внутренним образом при доступе к ячейкам строки по имени поля (или заголовку колонки, если имя поля для колонки не задано), см. TFastListItem.SItems. См. так же ColumnFieldNames. |
CanEditByCells | : Boolean | Возвращает TRUE, если хотя бы одна колонка может быть отредактирована. |
EditingCell | : Boolean | Возвращает TRUE, если в настоящий момент идет редактирование ячейки. |
EndEditCell | Прекращает редактирование редактируемой в настоящий момент ячейки. | |
Методы класса предка TColorListView: |
||
InvalidateHeader | Обновить заголовок | |
GetHeaderCtlWindow | HWnd | Возвращает дескриптор окна заголовка (очень низкоуровневое программирование) |
Свойства, события и методы класса TListColumn, доступные в Инспекторе объектов.
Для компонента TFastListView не создаётся свой собственный класс для колонки, и продолжает использоваться тот же класс колонки TListColumn, что и для родительского TListView. Поэтому во время исполнения никаких дополнительных свойств и методов у колонки класса TListСolumn не появляется. Тем не менее, некоторое число новых атрибутов у колонки имеется, но они доступны через свойства и методы времени исполнения самого контрола.
Для целей настройки колонок в режиме дизайнера форм, тем не менее, создан особый редактор свойств колонки времени разработки. Поэтому ниже приведённые свойства доступны для колонок из Инспектора объектов. Для вызова редактора колонок, как и для стандартного TListView, используйте двойной клик по контролу во время разработки формы, после чего возможно добавление, изменение и удаление колонок.
Обратите внимание, что
может иметься некоторая "как-бы" проблема с порядком отображения колонок во
время разработки, добавленных позже, но не последними (или в случаях, когда
менялся порядок колонок в списке). Дело тут в запоминании порядка
отображения колонок, которое обеспечивается корректно для этапа времени
исполнения, но не гарантируется для этапа разработки. Проблема легко
решается перемещением одной из колонок в списке сначала вверх, а затем вниз
на одну позицию (например, в таком порядке).
Имя свойства | Тип | Начальное значение |
Описание |
CanEdit | Boolean | FALSE |
Разрешает редактировать отдельные ячейки таблицы в данной колонке. Значение FALSE для 0-й колонки (соответствующей свойству Caption элемента) не означает, что эту колонку нельзя редактировать вообще: если все колонки имеют значение FALSE, то возможностью редактирования заголовка элемента управляет, как обычно, свойство ReadOnly самого TFastListView. В случае задания возможности редактирования по ячейкам, в фокус ввода попадает не строка, а отдельная ячейка таблицы, причем перемещение возможно только по тем ячейкам, которые могут быть отредактированы. |
ComboItems | TStrings | Список элементов выпадающего списка, используемого для редактирования ячейки в данной колонке (свойство EditKind должно иметь значение ekCombo). | |
EditKind | TEditKind | ekEdit | Тип редактирования ячейки. Так как для редактирования всегда используется компонент TUniEdit, то для изменения способа редактирования достаточно указать тип используемого контрола. Прочие свойства редактирующего контрола, если требуется, следует указывать при его создании в начале редактирования ячейки (см. события OnCreateEditCell, OnBeginEditCell). |
FieldName | String | Имя поля, сопоставленное колонке. Это имя используется при получении данных из запроса к базе данных (TQuery), а так же при доступе к ячейкам строки свойством по умолчанию Item['имя']. При отсутствии имени поля используется заголовок колонки. | |
Filtered | Boolean | FALSE |
Назначение данному свойству значения TRUE приводит к тому, что во время выполнения пользователь имеет возможность выполнять фильтрацию по данной колонке, нажимая на визуально отображаемый треугольник в заголовке колонки. При этом выводится в маленьком всплывающем окошке список всех значений, хранящихся в данной колонке, часть из которых (или одно из которых) может быть отмечено для отображения - строки, содержащие в данной колонке другие значения, скрываются. Кроме того, в окошке отображается число строк, содержащих указанное значение. Строки, скрытые в результате фильтрации, остаются программно доступны через свойства HiddenItems[ ] и HiddenItemsCount. |
Order | Integer | X | Порядок отображения колонки, X - от 0 и выше. |
SortAttrs | TColumnSortAttrs |
Атрибуты сортировки колонки. Если атрибуты не заданы, то используются атрибуты сортировки, заданные свойствами SortByXXXX самого контрола. При задании собственных атрибутов сортировки для колонки, они полностью перекрывают общие свойства сортировки контрола. Для просмотра описания возможных атрибутов, см. их список, приведенный ранее (вместе со свойством ColumnSortAttrs). |
Свойства, события и методы класса
TFastListItems, доступные во время
исполнения.
В принципе, все эти свойства аналогичны свойствам и методам класса
TListItems, использующегося для хранения элементов
стандартного TListView. Но это другой класс, он
даже не наследуется от TListItems или какого-либо
общего предка.
Имя свойства / метода | Тип | Начальное значение |
Описание |
Items[ Idx: Integer ] | TFastListItem | Список элементов (строк таблицы) | |
Clear | Процедура очистки списка (таблицы) | ||
Add | TFastListItem | Добавление элемента в конец списка | |
Insert( Index: Integer ) | TFastListItem | Вставка элемента перед произвольным элементов с индексом Index | |
BeginUpdate | Следует вызывать перед началом некоторого числа изменений в списке, для уменьшения числа обновлений изображения на экране в процессе изменений. | ||
EndUpdate | Должно соответствовать своему BeginUpdate.
Наиболее корректно размещать в части finally
конструкции try: LV.Items.BeginUpdate; try // do something finally LV.Items.EndUpdate; end; |
||
Count | Integer | Свойство доступно на запись для полностью виртуальных списков (TFastListView.TotallyVirtual = true) | |
Delete(Index: Integer) | Удаление элемента (строки таблицы) |
Свойства, события и методы класса TFastListItem, доступные во время исполнения.
Обратите внимание, что в модуле FastListView класс TListItem переопределяется как эквивалентный новому классу TFastListItem. Это означает, что в коде можно объявлять переменные типа TFastListItem как переменные типа TListItem, что немного укорачивает запись и позволяет при необходимости возвратиться к использованию стандартного TListView (если не использовано слишком большое количество новых возможностей).
Для доступа к методам и свойствам прежнего класса TListItem следует использовать ссылочное имя TOldListItem, либо использовать префикс модуля, в котором прежний TListView был определен: comctrls.TListItem;
Имя свойства / метода | Тип | Начальное значение |
Описание |
MirrorItem | TOldListItem | Возвращает элемент-предок для элемента. Обычно используется для внутренних целей. | |
GetRect | ( SubItemIndex: Integer = -1 ): TRect | Возвращает прямоугольник (в клиентских координатах), занимаемый
элементом или ячейкой таблицы. Значение -1 параметра запрашивает весь
прямоугольник, занимаемый элементом, значения от 0 и выше запрашивают
прямоугольник, занимаемый одной ячейкой. Значение 0 соответствует
колонке заголовка. Прежнее свойство DisplayRect так же действует, но оно не годится для определения прямоугольника, занимаемого отдельной ячейкой. |
|
BackColor | TColor | clNone | Цвет фона (невыделенного элемента). Изменение цвета фона для строки в TFastListView выполняется элементарно с помощью этого свойства. При необходимости изменить цвет фона отдельной ячейки следует использовать события рисования ячейки (OnAdvancedCustomDrawSubItem, например). Начальное значение clNone соответствует отсутствию своего собственного цвета фона, в этом случае используется цвет фона контрола. |
BackColorSelected | TColor | clNone | Цвет фона выделенного элемента (строки таблицы). |
FontColor | TColor | clNone | Цвет шрифта (невыделенного элемента). |
FontColorSelected | TColor | clNone | Цвет шрифта выделенного элемента. |
Visible | Boolean | Видимость элемента. С помощью этого свойства программно возможно делать элементы невидимыми по своим собственным критерием (действие аналогично работе фильтрации). | |
ListView | TFastListView | Возвращает родительский контрол. | |
EditCaption | : Boolean | Данная функция инициирует начало редактирования заголовка (так же, как и для стандартного TListItem). | |
EditCell( Idx: Integer ) | : Boolean | Переводит в режим редактирования заданную ячейку таблицы. Колонка должна быть редактируемой (ColumnCanEdit). Здесь значение -1 используется для ссылки на заголовок, т.е. на колонку 0, соответственно значения 0 и выше относятся к колонкам 1 и выше, т.е. SubItems[Idx-1]. | |
EndEditCell( Cancel: Boolean = FALSE ) | Данная процедура форсирует завершение редактирования. Если параметр Cancel = TRUE, то редактирование отменяется, и ячейка сохраняет то значение, которое она имела до входа в режим редактирования. | ||
FontStyle | TFontStyles | Стили шрифта, которым отображается текст в строке. После первого же изменения этого свойства данное свойство перекрывает значение, используемое по умолчанию для контрола. Для того, чтобы возвратить стили шрифта по умолчанию, следует присвоить значение FALSE свойству CustomFontStyle. | |
CustomFontStyle | Boolean | FALSE | Если FALSE, то для отображения используется общий стиль шрифта контрола. Иначе - используется свойство FontStyle. |
SItems[ IdxOrName: Variant ] | String | Строковое значение заголовка или под-элемента в колонке, заголовок
которой или имя поля равен IdxOrName, когда
IdxOrName - строка, либо в колонке с заданным
индексом, когда IdxOrName - целое число. Это
свойство является свойством по умолчанию, что означает, что для доступа
к нему достаточно использовать форму с квадратными скобками, без
указания имени свойства, например: LI['Номер'] := '001'; Примечание: работа с ячейками таблицы через SubItems[n] продолжает присутствовать, но использование нового свойства SItems[name], причём именно с именем поля/заголовком колонки в качестве параметра, даёт существенно большую гибкость в плане поддержки кода в процессе всего жизненного цикла программного обеспечения. При изменении состава колонок, их порядка нет никакой необходимости изменять весь код, заменяя числовые индексы и рискуя получить множественные ошибки. Кроме того, код становится значительно более понятным и само- документируемым. Несколько страдать может скорость доступа к ячейкам, но в критичных ситуациях достаточно сделать список полностью виртуальным, хранить данные в таблице TFastTable, и так же обращаться к ячейкам по именам колонок, но используя более скорострельные свойства (SS, II, FF), позволяющие использовать механизм динамического кэширования вычисленных при первом обращении индексов колонок. Код при этом становится несколько более громоздким, но по-прежнему само- документируемым. |
|
Values[ IdxOrName: Variant ] | Variant | Доступ к значениям (ячейкам) строки (в отличие от строковых представлений этих значений в SItems[]) по имени поля или по индексу. Данные значения получаются автоматически при присваивании строки из текущей записи TQuery или TADOQuery, см. методы Assign ниже. |
|
Assign | (FromItem: TFastListItem; const AlterAssignments: String='') | Присваивание целой строки от одного FastListView к другому. Параметр AlterAssignments позволяет указать, какие столбцы исходной строки каким столбцам результирующей строки должны присваиваться, в формате Имя_выходной_колонки1=Имя_исходной_колонки1;... Те поля, для которых присваивание не задано, присваиваются как есть. Если для выходного list view не задано AutoAllocateColumns, то при добавлении колонок, отсутствующих в данном контроле, возможно возникновение исключения. |
|
Assign | (FromQuery:TQuery; const AlterAssignments: String='') | Присваивание целой строки значениям текущей записи
заданного объекта TQuery. Для полей, имена которых не заданы в списке AlterAssignments, используются те же имена колонок, что и имена исходных полей (возможно исключение, если такой колонки нет, и для list view свойство AutoAllocateColumns=FALSE). Формат строки AlterAssignments такой же, как в Assign для источника - строки list view - выше. Примечание: В качестве класса TQuery может выступать TNewQuery из модуля AdoSQLUnit (данной библиотеки компонентов), если опции текущего проекта включен символ условной компиляции USE_NEWQUERY . Который, в свою очередь, может быть
унаследован от TADOQuery, TODBCQuery или
TQuery.Пример типичного цикла загрузки
записей из базы данных (обычно требуется так же предварительно стереть
содержимое списка вызовом LV.Clear или
LV.Items.Clear): |
|
Assign | (FromADOQuery: TADOQuery; const AlterAssignments: String='') | Аналогично Assign для исходного TQuery (выше), но для TADOQuery. Данный метод добавлен на тот случай, когда необходима работа с двумя типами соединений с БД одновременно - через TADOQuery и TQuery. |
Советы по оптимизации быстродействия
Хотя TFastListView - сам по себе быстрее обычного TListView, тем не менее, игнорирование общих правил работы с визуальными компонентами способно замедлить его даже более, чем оригинальный компонент. Поэтому следует придерживаться следующих правил:
var LV: TFastListView;
LI: TFastListItem;
......
LV.Items.BeginUpdate;
try
//
работаем,
изменяем данные, добавляем/удаляем элементы и т.д.
finally
LV.Items.EndUpdate;
end;
(C) by Vladimir Kladov, 2000-2010