Читать книгу «Программирование для Android и работа с датчиками в среде Delphi 11» онлайн полностью📖 — Виталий Иванович Донцов — MyBook.

8.3. КОМПОНЕНТ СПИСОК – ListBox

Компонент ListBox представляет собой Список элементов. Свойства: Count – число элементов списка; Items – массив строк списка; ItemIndex – номер элемента в списке (-1 если ничего не выбрано); text – все содержимое компонента; Sorted – сортировка элементов.

В свойстве items нажав на три точки (…) можно открыть String List Editor и заполнить список (начинается с 0).

Добавить элемент списка можно командой:

ListBox.Items.Add («Вводимый текст»);

причем можно вставить и объект: ListBox.AddObjectsToList ();

Свойство AlternatingRowBakground позволяет окрасить через один.

Свойство columns разделит список на колонки.

Cвойство ShowCheckboxes покажет флажки.

Cвойство ListStyle – горизонтальный или вертикальный;

MultiSelectStyle – разрешает множественный выбор.

Заполнять многостраничный список строками из Memo:

ListBox1.Items:= Memo13.Lines;

Можно каждую строчку, выделив мышью или в Items Editor, форматировать отдельно: тип, размер, цвет шрифта… Или программно:

listbox1.ListItems[n].StyledSettings:= listbox1.ListItems [n].StyledSettings – [TStyledSetting. Family, TStyledSetting.Size];

listbox1.ListItems[n].Font. Family:=«Tahoma’;

listbox1.ListItems[n].Font.Size:= 14;

Главные функции работы с ListBox:

listbox1.ListItems[n].Font. Family:= «Tahoma’;//Шрифт

listbox1.ListItems[n].Font.Size:=;//Размер шрифта

istBox1.ItemHeight; // Высота строки

istBox1.Items. LoadFromFile («Имя_Файла»);//Загрузка файла

ListBox1.Items.SaveToFile («Имя_Файла»); //Сохранить файл

ListBox1.Items.Add («Новая Строка»); //Строка в конец списка

ListBox1.Items.Insert (i, «Новая_Строка»); // Добавление строки перед строкой с номером i

ListBox1.Text – все данные списка;

Индекс строки: i:= ListBox3.ItemIndex;

Получить текст выделенной строки:

str:= ListBox1.Items[ListBox1.ItemIndex];

Доступ к элементу списка:

ListItems [Index] или ItemByIndex (Index);

или with ListBox1 do s:= Items [ItemIndex];

Выделить все: SelectAll; Снять выделение: ClearSelaction;

Поменять местами элементы: Excange [Item1, Item2];

Удаление строки: ListBox1.Items.Delete (i);

Сортировка списка: ListBox1.Sorted:= True;

Поставить в соответствие строкам Списка ячейки Таблицы:

with ListBox1, StringGrid1 do Cells [i, j]:= Items [ItemIndex];

Прокрутить список (выбранная строка вверху):

ListBox1.ScrollToItem(ListBox1.ItemByIndex (n);

Рис. 21. Заполнение строчек ListBox (2 колонки).


Свойство Events: OnClick – основное для работы с компонентом, при этом на первое касание строки она выделяется (серым), на второе – выполняется запрограммированное действие.

Загрузить компонент данными можно и таким образом:

for i:= 0 to ADevices.Count-1 do

begin

Item:= TListBoxItem.Create (ListBox1);

Item.StyleLookup:= ’listboxitembottomdetail’;

Item. ItemData. Text:= ADevices[i].DeviceName;

Item. ItemData.Detail:= ADevices[i].Address;

ListBox1.AddObject (Item);

end;

Здесь также видна возможность редактирования стиля списка:

Item.StyleLookup:= ’listboxitembottomdetail’;

Позволяет загружать список из строки и уменьшенной подстроки:

Item. ItemData. Text:= ADevices[i].DeviceName;

Item. ItemData.Detail:= ADevices[i].Address;

Свойство Bitmap позволяет ассоциировать с элементом картинку.

Полная очистка списка осуществляется методом Clear, обновление:

var

ListBoxGroupHeader: TListBoxGroupHeader;

begin

ListBox1.BeginUpdate;

ListBox1.Clear;

ListBoxGroupHeader:= TListBoxGroupHeader.Create (ListBox1);

ListBoxGroupHeader. Text:=«Files for Sending.»;

ListBox1.AddObject (ListBoxGroupHeader);

ListBox1.EndUpdate;

end;


Можно индивидуально формировать строки списка, в том числе ширину и высоту строк (Общие свойства в Object Inspector – ItemWith и ItemHeight будут отображать нули).

Компонент часто используют для ввода списка, например, файлов:

var

n: Integer;

s, sd: String;

ListBoxGroupHeader: TListBoxGroupHeader;

begin

//Очищаем Memo и ListBox

Memo1.Lines.Clear;

ListBox1.BeginUpdate;

ListBox1.Clear;

ListBoxGroupHeader:= TListBoxGroupHeader.Create (ListBox1);

ListBoxGroupHeader. Text:=«Files List.»;

ListBox1.AddObject (ListBoxGroupHeader);

ListBox1.EndUpdate;

//Ищем и вносим в ListBox1 все *.txt файлы из downlowd

n:=0;

sd:= '/storage/emulated/0/Download’;

for s in TDirectory.GetFiles (sd, «*.txt’) do

begin

n:=n+1;

ListBox1.Items.Add (Copy (s, Length (sd) +2,100));

listbox1.ListItems[n].StyledSettings:= listbox1.ListItems [n]. StyledSettings – [TStyledSetting. Family, TStyledSetting.Size]; //Формат

listbox1.ListItems[n].Font. Family:=«Tahoma’;

listbox1.ListItems[n].Font.Size:= 14;

end;

if n = 0 then

ShowMessage («Нет *.txt файлов в Download!»)

else

ShowMessage («Обнаружено ‘ + IntToStr (n) + «файлов).

Использован вариант перечисления: for s in, а путь к директории объявлен прямо: '/storage/emulated/0/Download’, что возможно при объявлении разрешений на чтение файлов из внешних источников; перед открытием файлов ListBox обновляется, это нужно делать внутри методов:

ListBox1.BeginUpdate;

*****************

ListBox1.EndUpdate;

8.4. КОМПОНЕНТ ComboBox

Компонент ComboBox представляет собой комбинацию Списка и Поля редактирования, что позволяет вводить данные как с клавиатуры, так и по индексу списка, выбрать данные в списке, удалить элемент списка. Он занимает всего одну строчку, в отличие от ListBox.

Count число элементов списка; DropDownCount – количество элементов в раскрытом списке; Text – текст находящийся в поле редактирования (ввода); Items – массив строк списка; ItemIndex – номер элемента в списке (-1 если ничего не выбрано); Sorted – сортировка элементов. В свойстве items можно открыть String List Editor и запол нить список (начинается с 0).

Команда ComboBox1.Items.Add («Вводимый текст») добавит элемент списка; а команда ComboBox1.Items.Clear – очистит список. Вместо стиля текста имеется свойство Style Name.


Рис. 22. Компонент ComboBox с картинкой и указателем «V».


Аналогично, можно использовать компонент PopupBox:

PopupBox1.Items.Add («Item1»);

Компонент может загружать / сохранять данные в файл.


Компонент StatusBar обычно выровнен по нижней части формы и отображает информацию о приложении по мере его запуска: ProgressBar1.Value:= ProgressBar1.Value + n;


Компонент ToolBar предоставляет пользователю панель инструментов или набор команд, которые можно использовать для активации определенных функций в программном обеспечении. Элементы управления панелью инструментов часто используются в программах для обработки грамматики или текста и обычно предоставляют пользователю быстрый доступ к часто используемым функциям, таким как выделение текста жирным шрифтом, курсивом…

8.5. ListView

FireMonkey введен еще один компонент для просмотра списка, который можно использовать для хранения и представления различных типов элементов – ListView.

Элементы в виде списка могут иметь одну или несколько функций:

Заголовок или текст (используя элемент Item. Text);

Связанное изображение (с помощью Item.Bitmap);

Значок, с помощью Items. Appearance;

Прикрепленная графическая или текстовая кнопка, с помощью Item. ButtonText.

Можно настроить внешний вид представления списка, изменив расположение элементов списка, включая заголовок, связанное изображение, текстовые сведения или значок аксессуара.

В ListView есть режим редактирования, в котором можно выбрать один или несколько элементов.

Элементы в TListView можно добавлять либо путем привязки к источнику данных, либо с помощью кода: ListView.Items.Add для добавления в конец, или внедрить внутрь: ListView.Items.Insert.

Удалить строку: TListView.Items.Delete (i);

Изменить текст в выбранной ячейке на текст в Edit:

ListView1.Items.Item [n]:= Edit1.Text;

Число в строку: i.ToString;

Имеется уточняющее свойство: Detail;

Для заполнения, вставки, сортировки списка используют:

ListView1.BeginUpdate…..EndUpdate.

Свойство OnFilter позволяет тонко обращаться с элементами.

Свойство ItemAppearance (в Onject Inspector) позволяет определить: колонтитулы, внешний вид и поведение компонента:

подсвойство ItemAppearance – пояснительный рисунок, наличие основного и детализированного текста, наличие управляющей кнопки в режиме просмотра;

подсвойство ItemEditAppearance – поведение элемента в режиме редактирования.

В коде программы вместо этих свойств используют: ItemAppearanceName и ItemEditAppearanceName.

8.6. МНОГОСТРОЧНЫЙ ТЕКСТОВОЙ КОМПОНЕНТ Memo

За неимением компонента RichEdit его функции исполняет Memo, имеющая практически те же свойства и действия (кроме форматирования текста); по внешнему виду это простое белое поле.

Нужно установить свой стиль шрифта (в TextSettings, отменив все в StyledSettings); CheckSpelling определяет возможность проверки орфографии; обязательно укажите в настройках WordWrap = true, чтобы не вмещающийся в строчку текст автоматически переходил на строчку вниз. Прокрутка не вмещающегося на экране текста установлена в свойствах автоматически.

Для простого вывода информации нужно установить запрет редактирования: ReadOnly:= true.

Основное свойство компонента: Lines, в которое вводится текст при создании компонента или программно (что является основным):

– текст добавит команда Memo1.Lines.Add («Вводимый текст»);

– получить строчку текста по индексу: str:= memo1.Lines [n];

– скопировать весь текст:

Memo1.SelectAll; Memo1.CopyToClipboard;

Компонент Memo удобен также как база данных. Он может хранить большое количество информации, а заполнить его очень просто, скопировав в Lines в Object inspector при создании компонента строчки, созданные в обычном Word, при этом шрифт сам примет все значения, установленные для Memo.

Можно достаточно просто установить обмен информацией с компонентом Таблица, поставив его Cells [] в соответствие строкам Memo (счет начинается с 0 для обоих компонентов).

Для того, чтобы придать данным из Memо 2-мерный тип, характерный для Таблицы, можно отделить друг от друга части текста в строке, предназначенные для строк (или колонок) Таблицы, например (;), а при загрузки Таблицы использовать функции работы с текстом: копирования части текста до определенного элемента (;), позицию этого элемента, удаление предыдущей части текста для копирования следующей части текста.

Но если в Delphi 7 количество строк в Memo может составлять несколько тысяч, то в ситуации с Android число строк может быть ограничено; при этом можно сохранить и большее число строк, но при обращении Memo1.Lines [101] и более может происходить сбивка адресации и неуправляемые действия.

Для просмотра строчек вне видимости, автоматически предусмотрены установки по скроллингу.

Несомненным достоинством компонента является наличие собственого свойства сохранения и загрузки в файл (без проблем – во внутреннюю область):

Memo1.Lines.SaveToFile (GetHomePath + '/Имя файла. txt’);

Memo1.Lines. LoadFromFile (GetHomePath + '/Имя. txt’);

Другие функции работы с текстом в Memo:

Memo1.ClearSelection; // удалить выделенный текст

Memo1.CutToClipboard; // вырезать в буфер обмена

Memo1.CopyToClipboard; // скопировать в буфер обмена

Memo1.PasteFromClipboard; //вставить из буфера обмена

Memo1.SelText; //функция возвращает текстовую строку выделенного текста

Memo1.Undo; // отмена последнего изменения

Memo1.Lines.Delete (0); //удаление 0 строки

Memo1.SelStart:= 0; //начальное положение выделения

Memo1.SelLength:= 15; //Длина выделенного текста

Если необходимо всегда видеть выделенный текст, даже при переходе управления на другой элемент управления, то установите свойство HideSelection в false.

8.7. КОМПОНЕНТЫ ВЫБОРА CheckBbox и RadioButton

Компоненты CkeckBox и RadioButton используются для выбора уже известных условий.

Компоненты RadioButton обычно объединяются в группы внутри компонента-контейнера GroupBox; активна одна кнопка, для определенной группы, что достигается простым помещением группы связываемых кнопок в контейнер GroupBox, а также приданием одинакового имени (например «1») свойству GroupName.

Как сам контейнер, так и кнопки, имеют свойство Text, что может использоваться для показа условий.

Выбрать компонент можно функцией:

RadioButton1.isChecked:= true;

Работа с компонентом производится на свойства в Events: OnChange и OnClick, а также как выбор в коде:

if RadioButton1.isChecked = true then ….

Также удобно изменять текст при компоненте:

if RadioButton1.isChecked = true then RadioButton1.Text:= «Выбор сделан»

else RadioButton1.Text:= «Отказ от предложения».

Надо отметить, что компонент прихотлив, и довольно часто неизвестно что от него ждать; если он явно не виден в настоящий момент, то его состояние (isChecked) может и не считываться, в таком случае следует поставить ему в самом начале, когда компонент виден, в соответствие компонент Edit, который доступен в любом состоянии и в любом месте:

if RadioButton1.isChecked = true then Edit1.Text:= «1»; // В начале при выборе RadioButton

if Edit1.Text =– «1» then …. // в любом месте программы

Рис. 23. Элементы RadioButton в контейнере GroupBox позволяют сделать выбор.


CheckBox.

Флажок (независимый переключатель) отличается от выше описанного переключателя тем, что в группе флажков одновременно можно установить флажки в любой комбинации (в том числе могут быть установлены или сброшены все флажки).

Флажок может находиться в установленном или сброшенном состоянии. Одиночный флажок часто используется, например, для включения / выключения какого-либо режима. Флажок выглядит как прямоугольник с текстовым заголовком. Если в нем есть галочка, то обозначенная этим флажком опция включена (в этом случае также говорят, что флажок отмечен). Если прямоугольник пуст, то флажок снят, или сброшен. Дейстия с одним флажком не отражаются на состоянии других флажков, если это не было специально предусмотрено.

В Events используют свойства OnClick и OnChange, но обычно просто в программе используются состояния группы флажков и в зависимости от этого выполняются действия.