Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






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

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

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

этом занимать минимум рабочего пространства формы. В дополнение ко всему списки предоставляют удобную возможность редактировать свое содержимое во время выполнения приложения. Ключевым свойством всех списков является уже знакомое нам свойство, основанное на классе TStrings и подробно рассмотренное в главе 7:

 

property Items: TStrings;

Доступ к текстовым строкам элемента управления производится согласно

порядковому номеру (индексу) строки в списке:

function GetItemText(Index: cardinal): string;

Begin

if index < = ListBox1.Items.Count-1 do

Result: =ListBox1.Items.Strings[Index]

else Result: =’’;

end;

 

Индекс отмеченного элемента списка хранится в свойстве:

property ItemIndex: Integer;

 

При установке в true свойства Sorted текстовые строки в списке сортируются

в алфавитном порядке:

property Sorted: Boolean;

 

Для быстрого удаления всех текстовых строк списка предназначен метод:

procedure Clear;

 

Для вставки в компонент новой строки, помимо обширного перечня методов

класса TStrings, можно воспользоваться процедурой AddItem(). Особенность

метода в том, что кроме текста Item он позволяет связать с элементом внешние данные AObject.

procedure AddItem(Item: string, AObject: Object);

Списки позволяют одновременно выбрать несколько элементов. Для этого

достаточно перевести в состояние true свойство:

property MultiSelect: Boolean; //по умолчанию false

 

Если элемент с порядковым номером Index выбран, то свойство Selected возвратит значение true:

property Selected[Index: Integer]: Boolean;

 

Общее количество выбранных элементов можно выяснить из свойства:

property SelCount: Integer;

 

Для одновременного выбора всех строк списка обратимся к методу:

procedure SelectAll;

 

Полезной особенностью всех компонентов-списков является возможность

настройки способа прорисовки своего содержимого. По умолчанию компоненты отображают только текстовые строки. Но отказавшись от стандартных методов прорисовки, программист получит возможность украсить элемент управления списки графическими изображениями, изменить начертание шрифтов, цвет и т. п. В первую очередь за определение способа прорисовки компонента отвечает его стиль (Style). Различают три стиля компонентов TListBox и TCheckListBox:

property Style: TListBoxStyle;

type TListBoxStyle = (lbStandard, lbOwnerDrawFixed, lbOwnerDrawVariable);

Таблица 8.2. Стили списка TListBoxStyle

Стиль Поведение элемента управления
lbStandard Высота всех строк и режим прорисовки определяется системой.
lbOwnerDrawFixed Программный доступ к прорисовке элементов списка. Высота строк указывается в ItemHeight.
lbOwnerDrawVarible Программный доступ к прорисовке элементов списка. Высота строк задается в обработчике события OnMeasureItem.

 

Переопределив стиль списка на lbOwnerDrawFixed или lbOwnerDrawVariable

и слегка поколдовав с исходным кодом, вполне реально дополнить список

картинками. Для этого применяется обработчик события OnDrawItem():

property OnDrawItem: 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() формы, как указано в примере:

 

procedure TForm1.FormShow(Sender: TObject);

var buffer: Array [0..max_path] of char;

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():

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect:

TRect; State: TOwnerDrawState);

var Bitmap: TBitmap;

OffSet: Integer;

ItemRect: TRect;

Begin






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.