ListBox — для работы с простым списком в Delphi
Список представляет собой упорядоченную совокупность взаимосвязанных элементов, являющихся текстовыми строками. Списки широко применяются в MS Office, например, для отображения информации о перечне шрифтов или способах их начертания.
Элементы списка могут быть отсортированы в алфавитном порядке или размещены в порядке их добавления в список. Как и другие объекты, представляющие собой совокупность данных, списки позволяют добавлять, удалять и выбирать отдельные их элементы (строки).
Сейчас мы рассмотрим простой список (ListBox)
Простой список представляет собой прямоугольную область, в которой располагаются его строковые элементы. Для работы с простым списком в Delphi предназначен компонент ListBox.
Cвойство Columns
Если количество строк больше, чем их может поместиться в видимой области списка, то у области отображения появляется полоса прокрутки. Ориентация полосы прокрутки, а также число столбцов, которые одновременно видны в области списка, зависят от свойства Columns типа Integer. По умолчанию свойство имеет значение 0. Это означает, что все элементы списка расположены в одном столбце, и при необходимости автоматически появляется или исчезает вертикальная полоса прокрутки.
Если свойство Сolumns имеет значение, большее или равное 1, то в области списка всегда присутствует горизонтальная полоса прокрутки, а элементы разбиваются на такое число столбцов, чтобы можно было, прокручивая список по горизонтали, просмотреть все его элементы. При этом в видимой области списка отображается число столбцов, равное значению свойства Сolumns.
Так, на скриншоте приведены два списка, содержащие по 10 слов. Для левого списка значение свойства Сolumns равно 2, и в списке одновременно видны 2 столбца, для правого списка свойство Сolumns имеет значение 3, поэтому отображены все 3 столбца.
Иногда требуется, чтобы в списке одновременно отображались и вертикальная, и горизонтальная полосы прокрутки. В этом случае нужно задать свойству Сolumns нулевое значение, тогда вертикальная полоса прокрутки будет появляться по мере надобности. Для отображения горизонтальной полосы прокрутки следует послать списку сообщение LB_setHorizontalExtent. Третьим параметром сообщения является максимальное значение полосы прокрутки в пикселах. Если задать это значение заведомо большим, чем размер списка ListBox, то горизонтальная полоса прокрутки будет отображаться всегда. Четвертый параметр сообщения в этом случае равен нулю.
Если горизонтальная полоса прокрутки не нужна, то можно послать еще одно сообщение, указав в качестве максимального размера значение, равное нулю.
Приведем пример списка ListBox1 с двумя полосами прокрутки:
- procedure TForm1.FormCreate(Sender: ТОbject);
- begin ListBox1.Columns := 0;
- SendMessage(ListBox1.Handle, LB_SetHorizontalExtent, 1000, 0);
- end;
Cвойство TopIndex
При работе со списком программист может управлять номером элемента, который в видимой области списка отображается верхним. Эта возможность обеспечивается свойством TopIndex типа integer, доступным на этапе выполнения приложения. Так, в приведенной далее процедуре в списке ListBox1 верхним отображается элемент, номер которого задает реверсивный счетчик upDown1:
- procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
- begin
- ListBox1.TopIndex := UpDown1.Position;
- end;
Cвойство Style
Стиль простого списка определяет свойство Style типа TListBoxStyle, принимающее следующие значения:
- lbStandard (стандартный стиль) — по умолчанию;
- lbOwnerDrawFixed (список с элементами фиксированной высоты, устанавливаемой свойством ItemHeight);
- lbOwnerDrawVariable (список с элементами, которые могут иметь разную высоту).
Если стиль списка отличен от значения lbStandard, то за прорисовку элементов списка отвечает программист. Для этих целей используются графические возможности Delphi.
Cвойство BorderStyle
Список может иметь обычную рамку или не иметь рамки вообще. Наличие рамки определяет свойство BorderStyle типа TBorderStyle, принимающее два возможных значения:
- bsNone (рамки нет);
- bsSingle (рамка есть) — по умолчанию.