Добавил:
ikot.chulakov@gmail.com Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по Delphi с готовыми программами / Лабораторная работа №17 TMemo, TListBox.pdf
Скачиваний:
21
Добавлен:
12.07.2020
Размер:
471.36 Кб
Скачать
Канва для программной прорисовки пунктов списка
Определяет количество колонок пунктов в списке
Если ExtendedSelect=True и MultiSelect=True, то выбор пункта без одновременного нажатия клавиши <Ctrl> или <Alt> отменяет предыдущий выбор
Если IntegralHeight=True и Style = lbOwnerDrawVariable, в списке отображаете целое количество пунктов
Определяет высоту элемента в пикселах для
Style=lbOwnerDrawFixed

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

Лабораторная работа № 17

Стандартные компоненты. TMemo. TListBox. TComboBox.

Введение

В лабораторной работе рассмотрены компоненты TListBox, TComboBox, TMemo. Приведены примеры программ использующие эти компоненты. Также рассмотрена функция MessageBox для вывода стандартных окон сообщений.

Компонент TListBox

Компонент TListBox находится на вкладке Standart палитры компонентов (рисунок 1).

Рисунок 1 – Расположение компонента TListBox в палитре компонентов

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

Таблица 1 – Свойства компонента TListBox

Свойство

Описание

property AutoComplete: Boolean; Если содержит значение True, выбранный элемент в списке заменяется на тот, начальные 6уквы которого вводит пользователь

type TBorderStyle = bsNone .. bsSingle; Определяет стиль рамки: bsNone – нет рамки; property BorderStyle: TBorderStyle; bsSingle – рамка толщиной 1 пиксел

property Canvas: TCanvas;

property Columns: LongInt;

property ExtendedSelect: Boolean;

property IntegralHeight: Boolean;

property ItemHeight: Integer;

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

Свойство

Описание

 

 

property ItemIndex: Integer;

Содержит индекс элемента, имеющего фокус

 

ввода. Если MultiSelect=False, совпадает индексом

 

выделенного пункта. Если не выделен ни один

 

элемент, то содержит отрицательное значение

property Items: TStrings;

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

 

компоненте

property MultiSelect: Boolean;

Разрешает/отменяет возможность выбора не

 

скольких пунктов

property SelCount: Integer;

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

property Selected[X: Integer]: Boolean;

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

 

индексом X (первый элемент имеет индекс 0)

property Sorted: Boolean;

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

 

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

type TListBoxStyle = (lbStandard,

Определяет способ прорисовки элементов:

lbOwnerDrawFixed,

lbStandard – элементы рисует Windows;

lbOwnerDrawVariable);

lbOwnerDrawFixed – рисует программа все

property Style: TListBoxStyle;

элементы имеют одинаковую высоту

 

определяемую свойством ItemHeight;

 

lbOwnerDrawVariable – рисует программа

 

элементы имеют разную высоту.

property TabWidth: Integer;

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

property TopIndex: Integer;

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

 

 

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

Обратите внимание, что свойство ItemIndex в компоненте TListBox содержит индекс элемента списка, имеющего фокус, ввода, и не меняется при изменении списка методами

Add, Append, Insert.

Рассмотрим несколько примеров использования компонента TListBox.

Добавьте на форму (frmList) компонент TListBox (lsbList), TEdit (edtStr) и два компонента TButton (btnAdd, btnRemove)1. Установите свойства компонентов согласно таблице 2.

Таблица 2 – Свойства компонентов

Свойство

frmList

btnAdd

btnRemove

 

 

 

 

Caption

Список

Добавить

Удалить

 

 

 

 

Разместите компоненты на форме как показано на рисунке 2.

1 В скобках приведены имена соответствующих компонентов.

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

Рисунок 2 – Вид формы после добавления компонентов

Создайте обработчик события для кнопки «Добавить» (см. Листинг 1).

Листинг 1

procedure TfrmList.btnAddClick(Sender: TObject); begin

//добавить строку в конец списка строк lsbList.Items.Add(edtStr.Text);

end;

В данном обработчике для добавления строки в список используется метод Add класса TStrings (см. лабораторную работу № 11). Этот метод добавляет новую строку в конец списка.

Создайте обработчик события для кнопки «Удалить » (см. Листинг 2).

Листинг 2

procedure TfrmList.btnRemoveClick(Sender: TObject); begin

//удалить выделенный элемент lsbList.DeleteSelected;

end;

Откомпилируйте и запустите программу.

Модифицируем программу приведенную выше. Разместите на форме компонент TLabel (lbInfo) как показано на рисунке 3.

Рисунок 3 – Вид формы после добавления метки

Создайте для компонента lsbList обработчик события OnClick (см. Листинг 3).

Листинг 3

procedure TfrmList.lsbListClick(Sender: TObject); begin

lbInfo.Caption:=lsbList.Items[lsbList.ItemIndex];

end;

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

Код приведенной выше подпрограммы отображает содержимое текущего выделенного элемента списка на метку lbInfo.

Добавьте обработчик события OnCreate для формы frmList. Это событие происходит сразу после создания формы, перед ее появлением на экране (см. Листинг 4).

Листинг 4

procedure TfrmList.FormCreate(Sender: TObject); begin

lbInfo.Caption:='';

edtStr.Text:='';

end;

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

Расширим функциональность программы, добавив функцию переупорядочивания элементов списка2, а именно две новых кнопки «переместить элемент на одну позицию вверх» и «переместить элемент на одну позицию вниз».

Добавьте на форму две кнопки TButton (btnUp, btnDown). Расположите компоненты на форме как показано на рисунке 4.

Рисунок 4 – Вид формы после добавления дополнительных компонентов

Создайте для кнопок обработчики событий нажатия на кнопки (см. Листинг 5). Для изменения порядка элементов списка используется метод Exchange класса TStrings, который имеет следующий синтаксис

procedure Exchange(Index1, Index2:Integer)

где Index1, Index2 – индексы меняемых местами строк в списке.

Листинг 5

procedure TfrmList.btnUpClick(Sender: TObject); begin

// если текущий элемент не первый в списке if lsbList.ItemIndex>0 then lsbList.Items.Exchange(lsbList.ItemIndex,

lsbList.ItemIndex-1);

end;

2 Подобной функциональностью обладает окно «Edit Tab Order» рассмотренное в предыдущей лабораторной работе.

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

procedure TfrmList.btnDownClick(Sender: TObject); begin

// если текущий элемент не последний в списке if lsbList.ItemIndex<>lsbList.Count-1 then lsbList.Items.Exchange(lsbList.ItemIndex,

lsbList.ItemIndex+1);

end;

Обратите внимание, что при попытке обменять местами строки с несуществующими индексами возникнет исключительная ситуация EStringListError.

Запустите программу, проверьте ее работоспособность.

Рассмотрим еще один пример работы с компонентом TListBox. Поместите на форму еще один компонент TListBox (lsbSecondList) и три кнопки TButton (btnMoveLR, btnMoveRL, btnExit).

Установите свойства компонентов согласно таблице 3.

Таблица 3 – Свойства компонентов

Свойство

btnMoveLR

btnMoveRL

btnExit

 

 

 

 

Caption

-->

-->

Выход

 

 

 

 

Расположите компоненты на форме как на рисунке 5.

Рисунок 5 – Вид формы после добавления компонентов

При нажатии кнопки выделенные элементы из расположенного слева компонента

TListBox (lsbList) будут переносится в правый (lsbSecondList). При нажатии кнопки

выделенные элементы из расположенного права компонента TListBox (lsbSecondList) будут переносится в левый (lsbList). При нажатии на кнопку «Выход» программа будет завершать свою работу.

Перенос элементов из одного списка в другой осуществляется с помощью метода MoveSelection компонента TListBox, имеющего следующий синтаксис

procedure MoveSelection(Destination: TCustomListControl);

где Destination – компонент, в который необходимо переместить выделенные элементы списка.

Ниже приведены обработчики событий OnClick для всех трех кнопок.

Листинг 6

procedure TfrmList.btnMoveLRClick(Sender: TObject);