Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методическое пособие для самостоятельных работ.doc
Скачиваний:
22
Добавлен:
16.11.2019
Размер:
2.89 Mб
Скачать

3.1.10. TRadioButton - зависимые переключатели

Рис. 3.12. Компонент TRadioButton - зависимые переключатели

В отличие от TCheckBox компоненты TRadioButton представляют собой зависимые переключатели, предназначенные для выбора одного из нескольких взаимоисключающих решений. На форму (точнее, в компонент-контейнер) помещается по меньшей мере два таких компонента. Они могут иметь только два состояния, определяемых свойством Сhecked. Если в одном компоненте это свойство принимает значение True, во всех других компонентах, расположенных в том же контейнере, свойства Сhecked принимают значения False.

Помимо свойства checked компонент TRadioButton имеет еще одно специфичное свойство - Alignment, аналогичное такому же свойству TcheckBox, как и в TCheckBox, программист не может изменять размеры и цвет круглого окошка компонента.

3.1.11. TListBox - список выбора

Рис. 3.13. Компонент TListBox - список выбора

Компонент класса TListBox представляет собой стандартный для Windows список выбора, с помощью которого пользователь может выбрать один или несколько элементов выбора. В компоненте предусмотрена возможность программной прорисовки элементов, поэтому список может содержать не только строки, но и произвольные изображения.

Свойства компонента:

Свойство

Описание

property AutoComplete: Boolean;

Определяет, будет ли компонент автоматически получать фокус ввода при нажатии пользователем на клавиатуру

type TBorderStyle = bsNone..-bsSingle; property Border-Style: TBorderStyle;

Определяет стиль рамки: bsNone - нет рамки; bsSingle - рамка толщиной 1 пиксель

property Canvas: TCanvas;

property Columns: Longing;

Канва для программной прорисовки элементов Определяет количество колонок элементов в списке

property Count: Integer;

Содержит количество строк в компоненте

property ExtendedSelect: Boolean;

Если ExtendedSelect =True и MultiSelect==True, выбор элемента без одновременного нажатия Crtl или Alt отменяет предыдущий выбор

property IntegralHeight:Boolean;  

Если IntegralHeight=True и Style<>lb0wner-DrawVariabe, в списке показывается целое число элементов

property ItemHeight: Integer; 

Определяет высоту элемента в пикселях для Style=lbOwnerDrawFixed

property Itemlndex: Integer; 

Содержит индекс сфокусированного элемента. Если MultiSelect=False, совпадает с индексом выделенного элемента

property Items: TStrings; 

Содержит набор строк, показываемых в компоненте

property MultiSelect: Boolean;

Разрешает/отменяет выбор нескольких элементов 

property SelCount: Integer;

Содержит количество выбранных элементов

property Selected[X: Integer] : Boolean;

Содержит признак выбора для элемента с индексом Х (первый элемент имеет индекс 0)

property Sorted: Boolean; 

Разрешает/отменяет сортировку строк в алфавитном порядке

type TListBoxStyle =

(IbStandard, IbOwnerDrawFixed, IbOwnerDrawVariable) ;

property Style: TListBoxStyle; 

Определяет способ прорисовки элементов: LbStandard - элементы рисует Windows; LbOwnerDrawFixed - рисует программа, все элементы имеют одинаковую высоту, определяемую свойством ItemHeight;LbOwnerDrawVariable -рисует программа, элементы имеют разную высоту

property TabWidth: Integer;

Задает ширину табуляционного пробела

property Toplndex: Integer;

Индекс первого видимого в окне элемента

Создание элементов (опций) списка компонента реализуется с помощью методов его свойства Items - Add, Append, Insert млм LoadFromFile.

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

type

TOwnerDrawState = set of (odSelecred, odGrayed, odDisabied, odChecked, odFocused) ;

TDrawItemEvent = procedure(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState) of object;

property OnDrawItem: TDrawItemEvent;

type

TMeasureItemEvent = procedure(Control: TWinControl; Integer;

var Height: Integer) of object/property OnMeasureItem: TMeasureItemEvent;

Первое событие возникает в момент, когда программа должна нарисовать очередной элемент. Обработчик события получает ссылку на список выбора Control, индекс изображаемого элемента Index, границы элемента Rect и его состояние State. Прорисовка ведется с помощью свойства Canvas.

Поскольку программная прорисовка обычно связана с изображением рисунков, сохраняемых вместе с текстом в наборе Items; параметр Control задан как абстрактный объект TWinGontrol, поэтому в обработчике должно проводиться необходимое преобразование типов.

В следующем примере в каждом элементе рисуется растровое изображение и текст.

procedure Tform1.ListBox1DrawItem(Control: TWinControl;

Index: Integer; Rect: TRect; State: TOwnerDrawState);

var

Bitmap: TBitmap;// Временная переменная для растра

Offset: Integer;

// Расстояние от растра до текста

begin

{Свойство Canvas имеет не только список ListBox, но и форма, на которую он помещен! Поэтому нужно явно указать канву. Преобразуем тип и указываем канву:}

with Control as TListBox, Canvas do

begin

FillRect(Rect);

// Очищаем прямоугольник

// Получаем из списка растр:

Bitmap := TBitmap(Items.Objects[Index]);

if Bitmap <> nil then

begin

// Вычерчиваем растр:

BrushCopy(Bounds(Rect.Left + 2, Rect.Top, Bitmap.Width, Bitmap.Height), Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height), cIRed);

// Вычисляем смещение текста (4 пикселя от растра):

Offset := Bitmap.width + 6;

end

else Offset := 2;

// Если нет растра, 2 пикселя слева

// Выводим текст:

TextOut(Rect.Left + Offset, Rect.Top, Items[Index]);

end;

end;

Обратите внимание: обработчик не учитывает состояния элемента. Окантовка сфокусированного элемента пунктиром, установка нужного цвета кисти и шрифта для выбранного элемента осуществляются автоматически. Если вас не устраивают стандартные цвета, следует проверять параметр State. Например, если перед

PillRect(Rect); // Очищаем прямоугольник в предыдущем примере вставить

if odSelected in State then

begin

Brush.Color := clYellow;

Font.Color := clBlack;

Font.Style := [fsBold];

end;

выбранные элементы будут подсвечены желтым фоном, а текст в них будет выведен черным утолщенным шрифтом.

Событие OnMeasureItem возникает только для Style=lbOwnerDrawVariabie. Оно предшествует событию onDrawItem, и в ходе его обработки программа должна установить нужную высоту очередного элемента. Обработчику передается индекс элемента Index и переменная Height, в которой он должен вернуть высоту элемента. Например:

procedure Tform1.ListBox1MeasureItem(Control: TWinControl;

Index: Integer;

var Height: Integer);

var

Bitmap: TBitmap;

begin

Bitmap := TBitmap((Control as TListBox).Items.Objects[Index]) ;

if Bitmap <> nil then

Height := Bitmap.Height

else

Height := abs(ListBoxl.Font.Height) end;