Элементы управления – списки

Списки предназначены для хранения набора текстовых строк и обеспечения

выбора одной или нескольких из них пользователем. В отличие от других элементов управления, специализирующихся на организации выбора (группа

переключателей), списки способны хранить сотни текстовых элементов и при

этом занимать минимум рабочего пространства формы. В дополнение ко всему списки предоставляют удобную возможность редактировать свое содержимое во время выполнения приложения. Ключевым свойством всех списков является уже знакомое нам свойство, основанное на классе 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; просмотров: 536;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.011 сек.