Элементы управления – списки
Списки предназначены для хранения набора текстовых строк и обеспечения
выбора одной или нескольких из них пользователем. В отличие от других элементов управления, специализирующихся на организации выбора (группа
переключателей), списки способны хранить сотни текстовых элементов и при
этом занимать минимум рабочего пространства формы. В дополнение ко всему списки предоставляют удобную возможность редактировать свое содержимое во время выполнения приложения. Ключевым свойством всех списков является уже знакомое нам свойство, основанное на классе TStrings и подробно рассмотренное в главе 7:
propertyItems: TStrings;
Доступ к текстовым строкам элемента управления производится согласно
порядковому номеру (индексу) строки в списке:
functionGetItemText(Index : cardinal) : string;
Begin
ifindex <= ListBox1.Items.Count-1 do
Result:=ListBox1.Items.Strings[Index]
elseResult:=’’;
end;
Индекс отмеченного элемента списка хранится в свойстве:
propertyItemIndex : Integer;
При установке в true свойства Sorted текстовые строки в списке сортируются
в алфавитном порядке:
propertySorted : Boolean;
Для быстрого удаления всех текстовых строк списка предназначен метод:
procedureClear;
Для вставки в компонент новой строки, помимо обширного перечня методов
класса TStrings, можно воспользоваться процедурой AddItem(). Особенность
метода в том, что кроме текста Item он позволяет связать с элементом внешние данные AObject.
procedureAddItem(Item: string, AObject: Object);
Списки позволяют одновременно выбрать несколько элементов. Для этого
достаточно перевести в состояние true свойство:
propertyMultiSelect: Boolean; //по умолчанию false
Если элемент с порядковым номером Index выбран, то свойство Selected возвратит значение true:
propertySelected[Index: Integer]: Boolean;
Общее количество выбранных элементов можно выяснить из свойства:
propertySelCount: Integer;
Для одновременного выбора всех строк списка обратимся к методу:
procedureSelectAll;
Полезной особенностью всех компонентов-списков является возможность
настройки способа прорисовки своего содержимого. По умолчанию компоненты отображают только текстовые строки. Но отказавшись от стандартных методов прорисовки, программист получит возможность украсить элемент управления списки графическими изображениями, изменить начертание шрифтов, цвет и т. п. В первую очередь за определение способа прорисовки компонента отвечает его стиль (Style). Различают три стиля компонентов TListBox и TCheckListBox:
propertyStyle: TListBoxStyle;
typeTListBoxStyle = (lbStandard, lbOwnerDrawFixed, lbOwnerDrawVariable);
Таблица 8.2. Стили списка TListBoxStyle
Стиль | Поведение элемента управления |
lbStandard | Высота всех строк и режим прорисовки определяется системой. |
lbOwnerDrawFixed | Программный доступ к прорисовке элементов списка. Высота строк указывается в ItemHeight. |
lbOwnerDrawVarible | Программный доступ к прорисовке элементов списка. Высота строк задается в обработчике события OnMeasureItem. |
Переопределив стиль списка на lbOwnerDrawFixed или lbOwnerDrawVariable
и слегка поколдовав с исходным кодом, вполне реально дополнить список
картинками. Для этого применяется обработчик события OnDrawItem():
propertyOnDrawItem: TDrawItemEvent;
TDrawItemEvent = procedure(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState) of object;
TOwnerDrawState = set of(odSelected, odGrayed, odDisabled, odChecked, odFocused);
Это событие вызывается каждый раз, когда списку необходимо перерисовать свой элемент.
Таблица 8.3. Параметры события TDrawItenEvent
Параметр | Назначение параметра |
Control : TWinControl | Элемент управления, содержащий элемент Item. |
Index : Integer | Порядковый номер элемента Item в наборе Items списка. |
Rect : TRect | Прямоугольник, отведенный элементу Item. |
State : TOwnerDrowState | Состояние элемента списка: odSelected-выбран, odDisabled-заблокирован, odFocused- в фокусе |
Разместите на форме компонент ListBox1 и установите его свойство Style:=
lbOwnerDrawFixed. В секции private раздела interface исходного модуля объявите переменную WinDir : string, в которой будет храниться путь к каталогу Windows компьютера. Опишите метод OnShow() формы, как указано в примере:
procedureTForm1.FormShow(Sender: TObject);
varbuffer:Array[0..max_path] ofchar;
BmpPath:string;
Begin
GetWindowsDirectory(buffer,max_path); //узнаем каталог Windows
WinDir:=StrPas(buffer); //передаем путь к каталогу в переменную
BmpPath:=WinDir+'\*.bmp'#0; //создаем маску для сбора рисунков *.bmp
ListBox1.Perform(LB_DIR, DDL_READWRITE, INTEGER(@BmpPath[1]));
end;
Задачей процедуры является выяснение местонахождения каталога установки Windows и сбор путей ко всем файлам формата *.bmp в TListBox.
Для определения пути к каталогам Windows всегда применяйте функцию Win32 API GetWindowsDirectory(). Это правило сделает программный продукт более адаптивным к компьютерам ваших клиентов. Дело в том, что не всегда инсталляция Windows проведена с параметрами по умолчанию: C:\Windows. Например, у пользователя, работающего под Windows 2000, этот адрес соответствует строке: C:\WINNT.
Вторым этапом напишите код в обработчике события OnDrawItem():
procedureTForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect:
TRect; State: TOwnerDrawState);
varBitmap : TBitmap;
OffSet : Integer;
ItemRect : TRect;
Begin
Дата добавления: 2016-03-15; просмотров: 526;