Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основы программирования в Delphi. Учебно-методическое пособие
.pdf
Основы программирования в Delphi
procedure TForm1.N16Click(Sender: TObject);
begin
Form1.img1.Canvas.Font.Color:=clRed;
end;
procedure TForm1.N17Click(Sender: TObject);
begin
Form1.img1.Canvas.Font.Color:=clBlue;
end;
procedure TForm1.N18Click(Sender: TObject);
begin
Form1.img1.Canvas.Font.Color:=clLime;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
x1:=StrToInt(edt1.Text);
y1:=StrToInt(edt2.Text);
Form1.img1.Canvas.TextOut(x1,y1,edt5.Text);
end;
end.
12.2 Построение графиков с помощью компонента TChart
Обычно результаты каких-либо вычислений или расчетов представляются
в виде графиков функций или диаграмм. Среда разработки Delphi 7 имеет мощный пакет стандартных программ вывода на экран и редактирования графической информации, который реализуется с помощью визуально отображаемого
на форме компонента TChart. Данный компонент Delphi находится на вкладке
Additional (Дополнительные). Одним из главных свойств компонента TChart
является свойство SeriesList. При выборе данного свойства появляется специальный редактор (рис. 12.2), который позволяет выбрать вид графика, оформить
подписи и легенду и т.д. Построение графика функции или диаграммы производится после вычисления таблицы значений функции y=f(x). Полученная таблица передается в специальный двумерный массив ChartI.SeriesList[k] (k - номер графика (0,1, 2, ...)) компонента TСhart с помощью метода AddXY. Компо-
111

Основы программирования в Delphi
нент TChart осуществляет всю работу по отображению графиков, переданных в
объект ChartI.SeriesList[k]: строит и размечает оси, рисует координатную сетку,
подписывает название осей и самого графика, отображает переданную таблицу
в виде всевозможных графиков или диаграмм. При необходимости, с помощью
встроенного редактора EditingChart компоненту TСhart передаются данные о
толщине, стиле и цвете линий, параметрах шрифта подписей, шагах разметки
координатной сетки и другие настройки. В процессе работы прграммы измене-
ние параметров возможно через обращение к соответствующим свойствам ком-
понента TChart. Так, например, свойство Chart1.BottomAxis содержит значение
максимального предела нижней оси графика. Перенести график в отчет можно
с помощью буфера обмена. Для этого используется процедура
ChartI.CopyToClipboardMetafile(True).
Рис. 12.2 Редактор компонента TСhart
Пример. Построить графики функций sin(x) и sin(2x) с помощью компо-
нента chart. Текст и форма данного приложения приведены ниже.
112

Основы программирования в Delphi
Рис. 12.3 Построение графиков функций
Программный код нажатия кнопки Построить график:
procedure TForm1.Button1Click(Sender: TObject);
var k:integer;
x,y,z:extended;
begin
for k:=0 to 100 do
begin
x:=0.02*pi*k; y:=sin(x); z:=sin(2*x);
series1.AddXY(x, y,'', clRed);
series2.AddXY(x, z,'', clGreen);
end;
end;
1. Что такое канва?
КОНТРОЛЬНЫЕ ВОПРОСЫ
113

Основы программирования в Delphi
2. Перечислите основные свойства и методы канвы.
3. Каким образом можно строить графики функций в Delphi?
4. Перечислите основные свойства компонента Chart.
ВИДЕО-УРОК 7
https://youtu.be/BR3JzObtmsY
114

Основы программирования в Delphi
13. РАБОТА СО СПИСКОМ СТРОК
13.1 Компоненты для работы со списком строк
Обойтись простым текстовым полем удается не всегда. Иногда пользователь должен ввести и работать с большим объемом информации в виде списка
строк. Например, таким списком может быть список группы студентов факультета.
Для ввода и вывода данных из такого списка строк удобно использовать
один из трех компонентов:
TMemo (текстовая область);
TListBox (список);
TComboBox (раскрывающийся список).
Все эти компоненты находятся на панели компонентов Стандартные. Ес-
ли их поместить на форме, то эти элементы управления имеют вид (рис. 13.1):
Рис. 13.1 Компоненты Memo, ListBox, ComboBox
Эти три компоненты отличаются друг от друга в основном способом отоб-
ражения списка строк. В случае Текстовой области строки выводятся в виде
одного столбца. В случае Списка строки выводятся в виде нескольких столб-
цов. При этом вначале заполняется первый столбец донизу, потом второй стол-
бец и т.д. Число столбцов задается в свойстве Columns.
Компонент Раскрывающийся список отображает только выделенную стро-
ку. Раскрывая список строк с помощью кнопки разворачивания можно выбрать
новую строку. Максимальное число элементов, одновременно отображаемых
при раскрытии списка, задается в свойстве DropDownCount. Чтобы открыть
список из программы, свойству DroppedDown необходимо присвоить значение
True.
115

Основы программирования в Delphi
Многие свойства и методы этих трех типов компонент общие. Поэтому,
для работы с этими компонентами (а также с некоторыми другими) в Delphi
был определен класс TStrings. Списки строк этих компонент хранятся в свойстве, которое принадлежит классу TStrings. Методы этого класса позволяют
обращаться к любой строке списка по еѐ номеру, выполнять поиск, сортировку
и другие операции.
13.2 Определение списка строк на этапе проектирования
Список строк для компонента TMemo хранится в свойстве Lines, а для
компонент TListBox и TComboBox в свойстве Items (рис. 13.2). Эти свойства являются объектами класса TStrings.
Рис. 13.2 Редактор строк
На этапе проектирования, определяя значения этих свойств, можно создавать первоначальный список строк. Для этого, в Инспекторе объектов надо
дважды щелкнуть на свойстве Lines или Items. Тогда на экране появится специальный Редактор строк. В этом редакторе следует ввести список строк.
13.3 Обработка списка строк программным путем
Эти компоненты имеют собственные свойства и методы и свойства и ме-
тоды класса TStrings. Ниже рассмотрим их, разделяя на группы.
1. Для обращения элементам списка следует указать номер строки в масси-
ве строк Items или Lines. Отсчет элементов списка начинается с нуля. Например, для обращения к первому элементу Списка нужно указать Items[0], ко второму - Items[1]и т.д. Свойство Count типа Integer определяет число элементов в
списке. Поскольку первый элемент списка имеет нулевой номер, то номер по-
следнего элемента равен Count - 1.
116

Основы программирования в Delphi
Пример. Переопределение элементов списка ListBox1 с новыми значения-
ми может быть реализовано так:
var i: integer;
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
for i := 1 to ListBox1.Items.Count - 1 do
ListBox1.Items [i] := 'Строка номер ' + IntToStr (i);
Для компонентов ListBox и ComboBox номер выбранного пользователем
строки можно определить из свойства ItemIndex. В случае компоненты ListBox
выбранная строка выделяется на темном фоне. Например, для чтения текущей
строки можно использовать следующий код:
var Str : string;
CurIndex : integer;
. . . . . . . . . . . . . . . . . .
CurIndex := ComboBox1.ItemIndex;
Str := ComboBox1.Items [CurIndex];
Для компонента Memo номер текущей строки и позиция курсора в этой
строке, определяется свойством CaretPos. Это свойство имеет параметр класса
TPoint (координаты точки). Координата Y этого параметра определяет номер
текущей строки, а координата Х - позицию курсора в этой строке.
Пример. На форме разместим Memo-поле, два текстовых поля и кнопку
(рис. 13.3). При нажатии на кнопке в поле Edit1 должно выводиться значение
текущей строки текстовой области, а в Edit2 - позицию курсора в текущей
строке.
Рис. 13.3 Работа с Memo
Обработчик нажатия на кнопке Вывод должен иметь следующий код:
117

Основы программирования в Delphi
procedure TForm1.Button1Click(Sender: TObject);
var CurIndex, CurPos : integer;
Str : string;
begin
CurIndex := Memo1.CaretPos.Y;
Str := Memo1.Lines [CurIndex];
Edit1.Text := Str;
CurPos := Memo1.CaretPos.X ;
Edit2.Text := IntToStr (CurPos);
end;
2. Методы Add и Insert служат для добавления/вставки строк в список.
Функция
Add (const S: string): integer
добавляет заданную параметром S строку в конец списка, а в качестве результата возвращает номер нового элемента в списке. Процедура
Insert (Index: Integer; const S: string)
вставляет строку S в позицию с номером, определяемым параметром Index.
При этом элементы списка, находившиеся в указанной позиции и ниже, сме-
щаются вниз.
Пример. Добавление в список произвольного текста и вставка в Раскрывающиеся спиок текст из текстового поля Edit1:
ListBox1.Items.Add ('Я - студент НИСПТР');
ComboBox1.Items.Insert(3, Edit1.Text); //4-ая строка
3. Для удаления элементов списка используются методы Delete и Clear.
Метод
Delete (Index: Integer)
удаляет элемент с номером, заданным параметром Index. При попытке удаления
несуществующей строки сообщение об ошибке не выдается, но метод Delete не
срабатывает. Метод Clear ощищает список, удаляя все его элементы.
Пример. Удаление 3-ей строки текстовой области и удаление всех
строк списка:
Memo1.Lines.Delete(2);
ListBox1.Items.Clear;
118

Основы программирования в Delphi
4. Процедура Move (CurIndex, NewIndex: integer) перемещает элемент из
позиции с номером CurIndex в новую позицию с номером NewIndex. Если ука-
занный номер выходит за пределы списка, то возникает исключение. Для пере-
становки двух строк местами предназначен метод Exchange такими же аргументами.
Пример. Переместить строку Списка со старого места (1) на новое ме-
сто (8) и переставить две строки Текстовой области:
ListBox1.Items.Move (1, 8);
Memo1.Lines.Exchange (0, 3);
5. Поиск элемента в списке можно выполнить с помощью метода IndexOf.
Процедура IndexOf (const S: string): Integer определяет, содержится ли строка S в списке. В случае успешного поиска процедура возвращает номер позиции
найденной строки в списке, если строковой элемент не найден, то возвращается
значение -1.
Пример. Поиск строки 'Строка 5' в списке,
i : =ListBox1.Items.IndexOf („Строка 5‟);
6. Список строк имеет определенную прикладную направленность.
Например, как было указано выше, настройки Windows хранятся в файлах
win.ini и system.ini, в виде строк, вида: iCountry = 7. Список строк позволяет автоматически выделять из таких строк название (часть текста до знака равенства) и значение (часть текста после знака равенства). Для этого служат соответственно свойства:
Names [номер строки]
Values [название поля]
Для получения значения по индексу можно воспользоваться свойством
ValueFrom Index [номер строки].
7. У класса TStrings есть методы SaveToFile и LoadFromFile, позволяющие
непосредственно работать с текстовыми файлами. Эти методы предоставляют
возможность сохранения строк списка в текстовом файле и последующего чте-
ния строк из этого файла. Символы файла кодируются в системе ANSI. Эти
процедуры имеют один параметр в виде строки, который определяет имя фай-
ла.
119

Основы программирования в Delphi
Пример. Сохранение списка строк Раскрывающегося списка в файле и по-
следующая загрузка содержимого файла в компоненте Текстовое поле.
ComboBox1.Items. SaveToFile ( „Строки.txt‟ );
Memo1.Lines.LoadFromFile ( 'Строки.txt' );
При сохранении списка строк, если заданный файл отсутствует на диске,
то он создается. При загрузки из файла, если заданный файл отсутствует на
диске, то возникает исключение.
8. В конце заметим, что класс TStrings не имеет методов для создания объектов этого класса программным путем. Поэтому был введен класс TStringsList
(наследник класса TStrings), который позволяет создать объектов этого класса.
В классе TStringList добавилось несколько новых полезных методов и
свойств. Метод Sort позволяет выполнять сортировку всех строк в списке в порядке возрастания, при условии, что свойство Sorted имеет значение False (в
противном случае при добавлении новой строки она будет автоматически по-
мещаться в список в соответствии с требованиями упорядоченности).
Хранить в списке (класса TStringList) строки с одинаковыми значениями
не разрешается. Чтобы при попытке добавить новую строку не возникало ошибок, надо предварительно проверить, не присутствует ли уже такая строка в
списке. Для этого предназначен метод Find, который имеет следующий заго-
ловок:
function Find (const S: String; var Index: Integer): Boolean; Virtual;
Проверяется можно ли добавить строку S в отсортированный список. Если строка S в списке уже есть, функция возвращает значение True, а если нет –
False, а в переменную Index записывается номер позиции в списке, куда будет
добавлена строка S.
Пример. Создадим переменную SList - объект класса TStringList. Рас-
смотрим использование метода Add этого класса для добавления строк.
var SList: TStringList; // Объявление переменной
SList : = TStringList.Create; // Создание объекта класса
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
// Добавление 10-и строк
for i : = 1 to 10 do
SList.Add („Добавление в конец списка‟ + IntToStr (i-1));
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
120
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
