На закладке "standard" есть два компонента, это ListBox и ComboBox .
Оба этих компонента позволяют создавать списки, содержащие строки Items. Компонент ListBox - список строк. Строки можно загружать из файла, сохранять в файле, программно добавлять или удалять отдельные строки. Компонент ComboBox, аналогичен компоненту ListBox, но список "вываливается" при щелчке на кнопку, а выделенная строка отображается в редакторе.
Для изучения свойств этих компонентов, разработаем специальный текстовый редактор. Известно, что профессиональные WEB дизайнеры пишут HTML код в обычном блокноте. Облегчим жизнь дизайнерам и создадим блокнот, в котором будет список тэгов, которые можно будет по мере надобности вставлять в текст HTML страницы. Для изготовления программы установим компоненты так, как показано на рисунке.
Компонент Panel1 (панель) должен иметь свойство Align = alRight.
Компонент ComboBox1 будем использовать для изменения размера шрифта в редакторе. У компонента ComboBox1 в поле свойств text следует ввести 10. В поле Items следует нажать маленькую кнопку и в появившемся текстовом редакторе ввести строки:
Для создания списка тэгов HTML следует в блокноте создать файл примерно такого содержания:
Файл следует сохранить в папке с проектом, с именем, например tag.txt.
Компоненту Memo1 следует присвоить значение Align = alClient.
Создадим событие для формы onCreate и загрузим в ListBox1 файл со списком тегов:
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.clear;
ListBox1.Items.LoadFromFile('tag.txt');
end;
Если всё сделано правильно, то при запуске проекта мы увидим такую картинку:
Для вставки тэгов в блокнот Memo1 создадим событие onDblClick для компонента ListBox1:
procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
Memo1.Lines.Add(ListBox1.Items[ListBox1.ItemIndex]);
end; Здесь, запись Memo1.Lines.Add означает - добавить строку в блокнот Memo1.
ListBox1.Items - строка из списка с номером [ListBox1.ItemIndex]. ItemIndex - номер выделенной строки в списке. Так как ListBox1.Items является массивом строк, то обращение к строке осуществляется как к элементу массива, по его номеру.
Запустим проект на исполнение и попробуем написать HTML страничку, вставляя тэги двойным щелчком в ListBox1.
Следующим компонентом для исследования будет ComboBox1. На закладке Events инспектора объектов следует создать (двойным щелчком) событие onChange (изменение содержимого редактора ComboBox1), и напишем следующие строки:
procedure TForm1.ComboBox1Change(Sender: TObject);
var
n: integer; // число - размер шрифта пользователя.
begin
if ComboBox1.Text = '' then exit; // Если в редакторе нет данных то выход
try // Включаем режим отслеживания ошибок преобразования строки в число
n:= StrToInt(ComboBox1.Text); //Преобразуем строку в числовое значение
except // Если возникла ошибка преобразования, то выдаём сообщение
on Exception : EConvertError do
ShowMessage(Exception.Message);
end;
memo1.Font.Size:= n; // Присваиваем шрифту Memo1 новое значение
end;
Запускаем программу и убеждаемся, что всё работает нормально.
Как открывать или сохранять тексты в редакторе Memo1, мы изучили на прошлом уроке. Добавив соответствующие кнопки, получим полноценный HTML редактор.
Манипуляции со строками объектов ComboBox и ListBox.
Для доступа к содержимому списков существует несколько функций, которые можно использовать во время выполнения программы:
ItemIndex - возвращает номер выделенной строки в списке (счёт строк начинается с 0);
Count - возвращает число строк в списке;
Items[n] - возвращает или записывает строку с номером n;
Items.add(строка) - добавляет строку в конец списка;
Items.delete(n) - удаляет строку с номером n из списка;
Items.Insert(i, 'Новая cтрока') - вставляет новую строку перед строкой с номером i.
Для проверки перечисленных действий добавим в нашу программу текстовый редактор Edit1 и четыре кнопки, которые будут добавлять, заменять, удалять и вставлять текст в список тэгов:
Кнопка Добавить - button1;
Кнопка Заменить - button2;
Кнопка Удалить - button3;
Кнопка Вставить - button4;
procedure TForm1.Button1Click(Sender: TObject);
begin
if MessageDlg('Добавить запись?', mtInformation, [mbOk,mbCancel],0) = mrOK
then
begin
ListBox1.Items.Add(edit1.text);
ListBox1.Items.SaveToFile('tag.txt');
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if MessageDlg('Заменить запись?', mtInformation, [mbOk,mbCancel],0) = mrOK
then
begin
ListBox1.Items[ListBox1.ItemIndex]:= edit1.Text;
ListBox1.Items.SaveToFile('tag.txt');
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if MessageDlg('Удалить запись?', mtInformation, [mbOk,mbCancel],0) = mrOK
then
begin
ListBox1.Items.delete(ListBox1.ItemIndex);
ListBox1.Items.SaveToFile('tag.txt');
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
if MessageDlg('Вставить запись?', mtInformation, [mbOk,mbCancel],0) = mrOK
then
begin
ListBox1.Items.Insert(ListBox1.ItemIndex, Edit1.text);
ListBox1.Items.SaveToFile('tag.txt');
end;
end;
Таблица строк
На закладке Additional находится компонент StringGrid - таблица, в ячейках которой можно отображать строковые данные. Число строк и столбцов в таблице можно задавать свойствами RowCount и ColCount соответственно.
FixedCols и FixedRows задают число фиксированных ячеек предназначенных для отображения заголовков колонок и строк. Доступ к содержимому ячеек осуществляется функцией Cells[ACol, ARow: Integer]: string, где ACol и ARow - номер колонки и номер строки соответственно.
Для включения возможности изменения размеров ячеек в процессе работы программы свойства Options\goRowSizing и Options\goColSizing следует установить в true.
Создадим таблицу 6x6 ячеек с заголовками, как это принято в Microsoft Excel.
Метка Label1 будет показывать координаты ячейки выбранной пользователем.
Создание заголовков ячеек поместим в событие создания формы OnCreate:
procedure TForm1.FormCreate(Sender: TObject);
var n: integer;
begin
for n:= 1 to 6 do StringGrid1.Cells[0,n]:= IntToStr(n);
for n:= 1 to 6 do StringGrid1.Cells[n,0]:= chr(n+64);
label1.Caption :='';
end;
Фиксированные ячейки имеют индекс [0,0].
Ввод данных в ячейки можно осуществлять например, из строчного редактора Edit. Рассмотрим, как это можно осуществить. Поставим на форму редактор Edit1 и кнопку ввода (Button1).
Создадим событие onClick для кнопки Button1:
procedure TForm1.Button1Click(Sender: TObject);
begin
StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row]:= edit1.Text;
end;
Для ввода данных следует выделить ячейку, ввести данные в Edit1 и нажать кнопку Ввод.
В таблицах StringGrid удобно исследовать числовые матрицы. Для ввода числовых данных в строковые ячейки будем пользоваться функциями преобразования:
FloatToStr(x: real) - преобразует число в строку.
StrToFloat(s: string) - преобразует строку в число.
Используя генератор случайных чисел, создадим матрицу, например 3 х 3 элемента и подсчитаем сумму главной диагонали матрицы. Результат поместим в правый нижний угол матрицы (ячейка 4,4).
Матрицу будем загружать при нажатии кнопки "New" (Button2). Создадим событие onClick на кнопку Button2:
procedure TForm1.Button2Click(Sender: TObject);
var
x,y: integer;
z: real;
begin
randomize;
for x:= 1 to 3 do
begin
for y:= 1 to 3 do
begin
StringGrid1.Cells[x,y]:= FloatToStr(random(200)*0.1);
end;
end;
z:= 0;
for x:= 1 to 3 do z:= z + StrToFloat(StringGrid1.Cells[x,x]);
StringGrid1.Cells[4,4]:= 'Сумма = ' + FloatToStr(z);
end;
При каждом нажатии на кнопку New, матрица будет заполняться произвольными числами и сумма главной диагонали матрицы выводиться в ячейку 4,4.
|