Читать книгу: «Программирование для Android и работа с датчиками в среде Delphi 11», страница 3
8.2. Компоненты ввода текста и чисел: Edit, ComboEdit, NumberBox
Edit
Компонент Edit, наверно, наиболее используемый в работе (наряду с Кнопкой – Button, которая и задает действия с ним).
Если в обычном Delphi 7 это обычное белое окошко, то в Delphi 11 это фактически не видимый элемент, с едва заметным подчеркиванием, которое приходится доводить до видимости компонентом из вкладки Effects – InnerGlowEffect.
Если учитывать, что компонент используется для ввода и приходится буквально тыкать в него пальцем на экране, то это становится критичным.

Рис. 19. 3 вида компонента Edit в различном оформлении.
Основным свойством компонента, Edit, передающим введённую информацию, является свойство Text типа String. Вводимый Text можно ввести при создании компонента или затем программно. Не помещающийся текст остается доступен программно, но не виден на экране. Для работы с числами можно перевести текст в число: целое: X:= StrToInt (Edit1.Text); дробное: = StrToFloat (Edit1.Text);
Так как при вводе в компонент используются как текстовые данные цифры, то часто важно установить тип вызываемой при обращении к компоненту клавиатура: KeyboardType – изначальный Default общей клавиатуры заменить на ввод цифр – DecimalNumberPad.
Также можно ограничить максимальное вводимое число знаков (MaxLength) и задать фильтры для ввода символов.
Для ограничения ввода отслеживаются вводимые символы:
Реакция Edit на клавиши: KeyPress:
if key = #13 // клавиша <Enter> then…;
case Key of
«0».. «9», #8:; // цифры и BackSpace
#13: Edit3.SetFocus; // переместить на Enter
«-’: if Length (Edit2.Text) <> 0 then Key:= #0; //ничего не отображать за выходом из рамок окна
else Key:= #0; // остальные символы не отображать.
end;
Можно также:
procedure TForm1.Edit1KeyDown (Sender: TObject; var Key: Word);
var
KeyChar: Char; Shift: TShiftState);
begin
if ((KeyChar <«0») or (KeyChar> «9») or (Length (Edit1.Text)> =11))
and (KEY <> 8) and (KEY <> 46) then //8 и 46 код клавиш Backspace и Del
begin
KeyChar:= #0;
if (Length (Edit1.Text)> =11) = false then
ShowMessage («Допускаются только цифры!»)
else
ShowMessage («Длина текста превысила 11 знаков!»)
end; end;
Или:
procedure TForm1.Edit1KeyPress (Sender: TObject; var Key: Char);
begin
case Key of
«0».. «9», #8:; // цифры и <Backspace>
// Замена точки или запятую десятичной дроби на правильный разделитель – DecimalSeparator
«.»,»,»
begin
Key:= FormatSettings.DecimalSeparator;
//проверка правильности разделителя
if pos (Key, Edit1.Text) <> 0
then Key:= #0;
end;
#13: Edit2.SetFocus; // <Enter> переместиться в поле Edit
else Key:= #0; // Остальные символы запрещены
end;
Проще, однако, установить фильтр ввода данных:
Edit1.FilterChar:= «0123456789»;
Или: keyPress: if key = VK_Eskape (Enter) then…
Или на Edit1KeyPress: if Key=»,» then Key:=».»;//Замена на лету
Ограничить ввод можно свойством ReadOnly, а также свой ствами Enabled и CanFocus; CheckSpelling – контроль правописания.
Задействовав свойство Password (true), можно заменить входящий текст видимыми точками, сделав компонент для ввода пароля.
Выделить часть текста можно:
Edit1.SetFocus; Edit1.SelStart:= 1; Edit1.SelLength:= 1;
С компонентом можно также связать Кнопки, щелкнув по нему правой кнопкой мыши и выбрав в Item Editor, например, кнопку очистки.
ComboEdit представляет собой строку редактирования, комбинированную с кнопкой, аналогично тому, как объединен редактор текста и кнопка выпадающего списка в стандартном элементе ComboBox.
NumberBox.
Для ввода непосредственно чисел не нужно использовать преобразования IntToStr (n), существуют специальные компоненты для ввода чисел (тип Single): NumberBox и SpinBox со свойством Value, при этом для отображения в качестве текста имеется свое свойство:
Label1.Text:= NumberBox1.Text;
Label1.Text:= SpinBox1.Text;
Также следует определить ValueType (Integer/Float) в Object Inspector (однако, при выборе Integer преобразование IntToStr все равно не действует без дополнительного Round). DecimalDigits отображает число десятичных знаков. Свойства HorzIncrement и VertIncrement: шаг приращения. Свойство Value компонента относится к Single, но даже выставив X как Integer в Object Insoector придется изменять тип: y:= round (x).

Рис. 20. Добавление в компонент Edit других компонентов.
SpinBox
SpinBox – окно редактирования, может отображать только число, с кнопками для увеличения и уменшения отображаемого значения.
ComboTrackBar
У ComboTrackBar – cвойства те же, и отображение каретки для ComboTrackBar (свойства Visible и CanShow) и режим выпадающего списка.
ComboEdit
Строка редактирования, комбирированная с кнопкой выпадающего списка (DropDownCount), с возможностью ввода строк текста (свойство Items). ComboEdit1.Items.Add (String) добавляет строчку; можно добавить строчку и цифру: ComboEdit1.Items.AddPair (String: String, Value: String).
TdateEdit, TtimeEdit, TCalendar
Позволяют в вид диалога выбрать дату, время. Строка ввода при получении фокуса отображает диалог выбора, результат передается в свойство DateTime (вместе или раздельно).
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, но обычно просто в программе используются состояния группы флажков и в зависимости от этого выполняются действия.
9. КОМПОНЕНТЫ ДЛЯ РАБОТЫ С ДАННЫМИ – Таблицы и Базы
Собственно, все компоненты текстового ввода/вывода рабо тают с данными, но традиционно именно Таблица предназначена для их накопления и отображения. Создать таблицу можно поместив ее на Форму и назначив число колонок через Items Editor, при этом могут быть назначены разные виды колонок для ввода разного типа данных (на практике ограничиваются обычной строковой колонкой и при необходимости преобразовани ем типов вводимых данных).

Рис. 24. Назначение колонок компоненту StringGrid через Item Editor.
В Delphi 10.3, 11, имеется как старая текстовая таблица StringGrid, так и новый введенный компонент Grid. Если работа с StringGrid такая же, как и ранее, то компонент Grid фактически представлен набором колонок, каждая из которых отображается и программируется отдельно. Чтобы добавить колонку программно теперь придется приводить новую конструкцию создания новой колонки с указанием ее ширины:
StringGrid1.AddObject(TStringColumn.Create (nil));
StringGrid1.Columns [i].Width:= 35;
Соответственно, удалить колонку можно оператором Release (после чего придется перенумеровывать колонки):
StringGrid1.Columns[i].Release;
Основные свойства таблицы остались прежние и отображены в Инспекторе объектов в свойствах Option.
Если с таблицей не предполагается работать визуально (изменять размеры строк, колонок и пр.) достаточно оставить отображение линий колонок.
Также можно убрать нововведенный элемент Заголовок – Header, который представляет собой отдельный элемент и программируется отдельно, а фактически выполняет роль окрашиваемых серым нулевых колонку и строку, предназначенных для их нумерации в более ранних версиях таблицы.
Так как нулевые колонки никуда не делись, а важность нумерации строк остается, лучше убрать этот только мешающий элемент и оставить за нулевыми колонкой и строкой функции их нумерации или обозначения; при этом становится более понятным нумерация данных, не приходится помнить, что данные 1 находятся в строке 0 и при обращении к таблице постоянно изменять: n:= n-1.
Основным способом работы с таблицей остается работа с клетками [Cells] с указанием координат – колонки Columns (с) и строки Row (r): StringGrid1.Cells [c,r], с операторами присвоения:
StringGrid1.Cells [c,r]:= «текст» или переменной str: String;
str:= StringGrid1.Cells [c,r];
Так как часто содержание Таблицы – числа, то обычным является применение изменения типов данных: StrToInt (), IntToStr (), StrToFloat (), часто с одновременным форматированием: FloatToStrF (n, ffFixed, count всего цифр, count цифр после запятой).
Данным в таблице можно поставить в соответствие данные Memo (нумерация начинается также с 0 и также первую 0-строчку можно для ясности пропустить). Так же, как и в Memo число строк в таблице может быть ограничено, что прямо указывается в Инспекторе объектов в свойстве RowCount; однако, в таблице присутствуют еще и колонки, чего нет в Memo. Поэтому при обращении к Memo и обратно приходится переходить от 1-мерности Memo к 2-мерности таблиц, записывая в Memo все подряд, а при заполнении таблицы разбивая сплошной текст на участки соответствующие строкам и колонкам.
В Memo строки могут быть большой длины (автоматический перевод на другую видимую строку WardWrap:= true не отражается на нумерации строк).
Поэтому все строки таблицы в пределах одной колонки можно совместить, вводя разделитель (например «;») и записать длинную строку.
Обратный переход потребует несколько большего кода, включающего работы со строками для выделения фрагментов строки Memo между «;» соответствующего строке таблицы.
Большие таблицы можно визуально отражать с определенной строки – TopRow и колонки – LeftRow. Часто таблица предназначено только для чтения – ReadOnly или вообще для промежуточных действий и невидима – Visible:= false.
Новый тип таблиц – Grid позволяет вводить различный типы колонок, например, с цифровым вводом, избавляясь таким образом от необходимости переопределять тип вводимых данных. При этом основным элементов таблицы является колонка, а сама таблица представляет собой по существу, набор колонок разного типа. Ширину колонок можно изменять программно или визуально мышью, а также выделив колонку определить ее ширину в Инспекторе объектов или прямо двигая границу колонки мышью. Ширину строки определяет свойство в Инспекторе объектов.
В соответствии с основной идеей Firemonkey, согласно которой каждый компонент – это также и контейнер для других элементов, TGrid представляет собой контейнер в котором можно разместить FMX-объекты как коллекции строк:
TColumn: столбец таблицы с неопределенным содержимым. Можно использовать для создания своих столбцов (с ComboBox и другими элементами);
TStringColumn: столбец содержит только строки;
TCheckColumn: в столбце будут размещаться чекбоксы;
TProgressColumn: для отображения прогресса операции;
TPopupColumn: столбец со списком выбора;
TGlyphColumn: столбец с картинками;
TDate.. и Ttime.. – специально для даты и времени;
Tinteger… Currency… Float – для различных типов чисел.
Для смешанной таблицы работают обычные для StringGrid процедуры, так, для строки «3» четырех разнотипных колонок:
StringGrid1.Cells [0,3]:= «Это строка 3»; //Колонка для строк
StringGrid1.Cells [1,3]:= ’true’; //Колонка для CkeckBox
StringGrid1.Cells [2,3]:= ’21:20»; //Колонка для ввода времени
StringGrid1.Cells [3,3]:= «123»; //Колонка для чисел
StringGrid1.Cells [4,3]:= «2»; // Колонка № Glyph из ImageList
Базы данных – одно из востребованных возможностей для программ на персональных компьютерах, на приложениях для Android используются реже, однако, разработана специальная группа компонентов Fire, также часто используется база SQLite, встроенной в приложение (группа FireDoc).
Компонент FDConnection обеспечивает соединение с базой данных, компонент FDTable – доступ к таблицам, компонент FDQuery – связь с базой данных посредством SQL запросов. Отображение данных обычно идет для ключевых элементов в Списках, а основная информация – в Таблицах.
Компоненты для Баз данных занимают большую часть палитры Palette, хотя многие не доступны для платформы Android; работа с ними часто идет вместе с компонентами для работы с Интернет и гораздо лучше проводить их на персональном компьютере.
Также, для баз данных и WEB-приложения гораздо лучше подходит язык Phyton с библиотеками.

Рис. 25. Смешанная таблица StringGrid.
Начислим
+9
Покупайте книги и получайте бонусы в Литрес, Читай-городе и Буквоеде.
Участвовать в бонусной программе