Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы программирования в Delphi. Учебно-методическое пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Основы программирования в 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]