Программирование в Delphi
Borland Delphi – среда быстрой разработки, строго типизированный объектно-ориентированный язык, базирующийся на Object Pascal. Процедуры обработки событий OnClick и OnKeyPress. Создание исполняемого exe-файла из файлов проекта при помощи компилятора.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курс лекций |
Язык | русский |
Дата добавления | 17.02.2013 |
Размер файла | 2,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
{ строки Memo пронумерованы с нуля }
a[i]:=StrToFloat(Memo1.Lines[i-1]);
if a[i]>=b then
begin
b:=a[i];
j:=i;
end;
end;
s:='Максимальное число'+#13+FloatToStr(b)+#13+'имеет номер '+IntToStr(j);
label1.Caption:=s;
end;
5.2 Многомерные массивы
Часто приходится иметь дело с информацией, которая представлена в табличной форме. Колонки и (или) строки, как правило, состоят из однородной информации. Поэтому в программе, обрабатывающей табличные данные, имеет смысл использовать массивы для хранения и обработки таблиц. Если вся таблица содержит однородную информацию, например, только целые числа, то такая таблица может быть представлена как двумерный массив. В общем виде инструкция объявления двумерного массива выглядит так:
Имя: array[Нижняя_граница 1..Верхняя_граница 1,
Нижняя_граница 2.. Верхняя_граница 2] of Тип
где:
- Имя - имя массива;
- array - слово, указывающее, что объявленный элемент является массивом;
- Нижняя_граница 1, Верхняя_граница 1, Нижняя_граница 2, Верхняя_граница 2 - целые константы, определяющие диапазон изменения индексов;
- Тип - тип элементов массива.
Например, двумерный массив целых чисел с количеством строк 12 и количеством столбцов 6 может быть объявлен так: A: array [1..12, 1..6] of integer. Для того чтобы использовать элемент массива, нужно указать имя массива и индексы элемента.
В качестве примера рассмотрим программу, которая обрабатывает результаты спортивных соревнований летней олимпиады в Сиднее 2000 г. исходные данные представлены в табл. 7.
Таблица 7
Страна |
Золотых |
Серебряных |
Бронзовых |
|
Австралия Беларусь Великобритания Германия Италия Китай Корея Куба Нидерланды Россия Румыния США Франция Япония |
16 3 11 14 13 28 8 11 12 32 11 39 13 5 |
25 3 10 17 8 16 9 11 9 28 6 25 14 8 |
17 11 7 26 13 15 11 7 4 28 9 33 11 5 |
Программа должна вычислить общее количество медалей, завоеванных каждой страной, и соответствующее количество очков (баллов), которое вычисляется по следующему алгоритму: за каждую золотую медаль команда получает семь очков, за серебряную - шесть очков, за бронзовую - пять очков.
Вид диалогового окна приведен на рис. 26.
Для ввода исходных данных и отображения результатов используется компонент StringGrid1, некоторые свойства которого приведены в табл. 8.
Таблица 8
Свойство |
Значение |
|
ColCount RowCount FixedCols FixedRows Options.goEditing |
6 14 1 1 TRUE |
Ячейки зафиксированных строки и столбца используются как заголовки. Они заполняются в процедуре обработке события OnActivate (ее текст приведен в листинге 15), которое происходит во время активизации формы приложения.
procedure TForm1.FormActivate(Sender: TObject); Листинг 15
begin
StringGrid1.Cells[0,0]:='Страна';
StringGrid1.Cells[1,0]:='Золотых';
StringGrid1.Cells[2,0]:='Серебрянных';
StringGrid1.Cells[3,0]:='Бронзовых';
StringGrid1.Cells[4,0]:='Всего';
StringGrid1.Cells[5,0]:='Баллов';
StringGrid1.Cells[0,1]:='Австралия';
StringGrid1.Cells[0,2]:='Белоруссия';
StringGrid1.Cells[0,3]:='Великобритания';
StringGrid1.Cells[0,4]:='Германия';
StringGrid1.Cells[0,5]:='Италия';
StringGrid1.Cells[0,6]:='Китай';
StringGrid1.Cells[0,7]:='Корея';
StringGrid1.Cells[0,8]:='Куба';
StringGrid1.Cells[0,9]:='Нидерланды';
StringGrid1.Cells[0,10]:='Россия';
StringGrid1.Cells[0,11]:='Румыния';
StringGrid1.Cells[0,12]:='США';
StringGrid1.Cells[0,13]:='Франция';
StringGrid1.Cells[0,14]:='Япония';
end;
На рис. 27 приведено диалоговое окно программы после завершения работы процедуры TForm1.FormActivate.
Программа обработки исходной таблицы (листинг 16) запускается щелчком мыши на командной кнопке Итоги.
Сначала для каждой страны программа вычисляет общее количество медалей и соответствующее количество очков. Затем, используя метод простого выбора, программа выполняет сортировку таблицы по убыванию количества набранных очков. Во время сортировки для обмена строк таблицы используется строковый массив buf, индекс которого, меняется от нуля до пяти.
procedure TForm1.Button1Click(Sender: TObject); Листинг 16
var
i,j,k:integer;
s:integer; // всего медалей у команды
p:integer; // очков у команды
m:integer; // номер строки с максимальным количеством очков
buf:array[0..5] of string;
begin
for i:=1 to StringGrid1.RowCount do
begin
s:=0;
// вычиляем общее кол-во медалей
for j:=1 to 3 do
if StringGrid1.Cells[j,i]<>''
then s:=s+StrToInt(StringGrid1.Cells[j,i])
else StringGrid1.Cells[j,i]:='0';
// вычисляем кол-во очков
p:=7*StrToInt(StringGrid1.Cells[1,i])+
6*StrToInt(StringGrid1.Cells[2,i])+
5*StrToInt(StringGrid1.Cells[3,i]);
// вывод результата
StringGrid1.Cells[4,i]:=IntToStr(s);
StringGrid1.Cells[5,i]:=IntToStr(p);
end;
{сортировка таблицы по баллам (по содержимому 5-го столбца)}
for i:=1 to StringGrid1.RowCount do
begin
m:=i;
for k:=i to StringGrid1.RowCount-1 do
if StrToInt(StringGrid1.Cells[5,k])>StrToInt(StringGrid1.Cells[5,m])
then m:=k;
if i<>m then
begin // обменяем i-ю и m-ю строки таблицы
for j:=0 to 5 do
begin
buf[j]:=StringGrid1.Cells[j,i];
StringGrid1.Cells[j,i]:=StringGrid1.Cells[j,m];
StringGrid1.Cells[j,m]:=buf[j];
end;
end;
end;
end;
5.3 Контрольные вопросы к лекции 5
1. Где должны быть описаны массивы?
2. Можно ли присвоить начальные значения элементам массива одновременно с его описанием?
3. Какой компонент позволяет вводить массив, состоящий из большого количества строк?
4. Массивы какой размерности используются для хранения и обработки таблиц?
5. Позволяет ли Delphi использовать многомерные массивы?
Лекция 6. Процедуры и функции
Подпрограмма - это небольшая программа, которая решает часть общей задачи. В языке Delphi есть два вида подпрограмм - процедура и функция. У каждой подпрограммы есть имя, которое используется в программе для вызова подпрограммы. Отличие функции от процедуры состоит в том, что с именем функции связано значение, поэтому функцию можно использовать в качестве операнда выражения. Как правило, подпрограмма имеет параметры. Параметры, которые указываются в объявлении функции, называются формальными. Параметры, которые указываются в инструкции вызова подпрограммы, называются фактическими. В качестве фактического параметра можно использовать выражение, тип которого должен совпадать с типом соответствующего формального параметра.
6.1 Функция
Функция - это подпрограмма, т.е. последовательность инструкций, имеющая имя.
Объявление функции в общем виде выглядит так:
Function Имя [параметр 1: тип 1, …, параметрК: типК]: Тип;
var
{ здесь объявления локальных переменных }
begin
{ здесь инструкции функции }
:
:
Имя:= Выражение;
end;
где параметр - это переменная, значение которой используется для вычисления значений функции. Параметр объявляется не в разделе объявления переменных, который начинается словом var, а в заголовке функции. Конкретное значение параметр получает во время работы программы при обращении к функции.
Объявление функции следует поместить перед подпрограммой, которая применяет эту функцию. Текст функции набирается программистом целиком и полностью.
Функция step, вычисляющая ха, набирается программистом целиком и полностью.
В качестве примера приведена программа, вычисляющая силу резания по формуле
Программа содержит функцию вычисления степени
и обращается к ней 3 раза с разными фактическими параметрами.
Диалоговое окно показано на рис. 28.
В окне формы вы видите новый компонент - Image1, значок которого находится на вкладке Additional (Рис. 29). Этот компонент предназначен для вывода иллюстраций, которые находятся в файлах с расширением bmp, jpg или ico.
В данном примере текст формулы набран в текстовом редакторе Word, затем скопирован через буфер обмена в графический редактор Peint, сохранен в файле с именем Формула.bmp. Во время разработки формы этот теперь уже рисунок задается установкой значения свойства Picture (Рис.30а) путем выбора файла в стандартном диалоговом окне, которое появляется в результате щелчка на кнопке Load окна Picture Editor (Рис. 30б).
Фрагмент программы приведен в листинге 17.
// Функция, вычисляющая ха Листинг 17
function step(x,a:real):real;
begin
step:=exp(a*ln(x));
end;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
S,t,V,a,b,g,P:real;
begin
S:=StrToFloat(Edit1.Text); t:=StrToFloat(Edit2.Text);
V:=StrToFloat(Edit3.Text); a:=StrToFloat(Edit4.Text);
b:=StrToFloat(Edit5.Text); g:=StrToFloat(Edit6.Text);
P:=1.6E6*step(S,a)*step(t,b)*step(V,g);
label9.Caption:='Сила резания = '+FloatToStr(P)+' Кг';
end;
6.2 Процедура
Подпрограмма реализуется как процедура обычно в двух случаях:
- когда подпрограмма не имеет выходных параметров, например, вычерчивание графика в диалоговым окне;
- когда выходных параметров больше, чем один. Например, подпрограмма, которая решает квадратное уравнение, имеет два выходных параметра - корни уравнения.
В общем виде объявление процедуры выглядит так:
Procedure Имя(параметр 1: тип 1; …параметрК: типК; var параметрК+1: типК+1; … var параметрN: типN);
var
{ здесь объявление локальных переменных }
begin
{ здесь инструкции процедуры }
end;
где
- параметр 1,…, параметрК - входные параметры процедуры;
- параметрК+1, …, параметрN - выходные параметры процедуры.
При обращении к процедуре на месте входных параметров ставят константу, переменную или выражение, соответствующие по типу формальным переменным. На месте выходных параметров должны стоять только переменные, соответствующие типу формальных параметров. Формальные выходные параметры в описании процедуры должны сопровождаться словом var.
Попробуйте самостоятельно написать процедуру решения квадратного уравнения
ax2 + bx + c = 0
В процедуре - 6 параметров: первые три (входные) - коэффициенты уравнения; параметры х 1 и х 2 (выходные) - корни уравнения; параметр ok (выходной) - для передачи информации, что решение не существует. В процедуре, обрабатывающей щелчок на кнопке Выполнить, должно быть обращение к вашей процедуре. Параметр ok служит ключом для вывода сообщения, что корней нет, если дискриминант
d = b2 - 4ac < 0.
Если возникнут трудности, загляните в листинг 18.
Окно программы представлено на рис. 31.
// Процедура решения квадратного уравнения Листинг 18
Procedure Korni(a,b,c:real;var x1,x2:real; var ok:boolean);
{ a,b,c - коэффициенты уравнения, х 1,х 2 - корни уравнения,
ok=True, если решение есть, OK=False, если решения нет }
var d:real; // дискриминант
begin
d:=sqr(b)-4*a*c;
if d<0 then ok:=false
else
begin
ok:=true;
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
end;
end;
// нажатие кнопки Выполнить
procedure TForm1.Button1Click(Sender: TObject);
var
k1,k2:real; // корни уравнения
rez:boolean;
mes:string; // сообщение
begin
Korni(StrToFloat(Edit1.Text),StrToFloat(Edit2.Text),
StrToFloat(Edit3.Text),k1,k2,rez);
if rez then mes:='Корни уравнения: '+#13+
'x1='+FloatToStrF(k1,ffFixed,6,3)+#13+
'x2='+FloatToStrF(k2,ffFixed,6,3)
else mes:='Действительных корней нет';
label4.Caption:=mes;
end;
// нажатие кнопки Завершить
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Close;
end;
6.3 Контрольные вопросы к лекции 6
1. Каково основное отличие функции от процедуры?
2. Можно ли функцию использовать в качестве операнда выражения?
3. Можно ли процедуру использовать в качестве операнда выражения?
4. Как называются параметры, которые указываются в объявлении функции?
5. Как называются параметры, которые указываются в инструкции вызова подпрограммы?
6. Где следует поместить объявление функции?
7. Как реализуется подпрограмма, если она не имеет выходных параметров?
8. Как реализуется подпрограмма, если она имеет один выходной параметр?
9. Как реализуется подпрограмма, если выходных параметров два и больше?
10. Каким словом должны сопровождаться формальные выходные параметры в описании процедуры?
Лекция 7. Создание модуля. Файлы
Delphi позволяет программисту поместить свои функции и процедуры в отдельный модуль, а затем использовать процедуры и функции модуля в своих программах, указав имя модуля в списке модулей (инструкция uses).
Чтобы приступить к созданию модуля, нужно сначала закрыть окно формы и окно модуля формы (в ответ на вопрос о необходимости сохранения модуля следует выбрать No, т.е. модуль, соответствующий закрытой форме, сохранять не надо). Затем из меню File нужно выбрать команду New\Unit.
В результате открывается окно редактора кода, в котором находится сформированный Delphi шаблон модуля. Его текст приведен в листинге 19.
unit Unit1; Листинг 19
interface
implementation
end.
Начинается модуль заголовком - инструкцией unit, в которой указано имя модуля. Во время сохранения модуля это имя будет автоматически заменено на имя, указанное программистом.
В раздел interface программист должен поместить объявления находящихся в модуле процедур и функций, которые могут быть вызваны из других модулей, использующих данный.
В раздел implementation (реализация) нужно поместить процедуры и функции, объявленные в разделе interface.
Сохраняется модуль обычным образом, т.е. выбором из меню File команды Save.
Для того чтобы в программе могли применяться функции и процедуры модуля, программист должен добавить этот модуль к проекту и указать имя модуля в списке используемых модулей (инструкция Uses). После добавления имени модуля в список модулей, используемых приложением, сам модуль нужно добавить в проект. Для этого из меню Project надо выбрать команду Add to Project и в открывшемся окне - имя файла модуля. В результате добавления модуля к проекту в окне редактора появится вкладка с текстом добавленного к проекту модуля.
Увидеть структуру проекта можно в окне Project Manager, которое появляется в результате выбора соответствующей команды из меню View.
После добавления модуля к проекту и включения его имени в список используемых модулей можно выполнить компиляцию программы (Ctrl+F9).
В качестве примера в листинге 20 приведен модуль, содержащий процедуру Korni, вычисляющую корни квадратного уравнения.
В листинге 21 приведена программа, использующая этот модуль. Программа приведена полностью для того, чтобы вы увидели, куда надо вписать имя используемого модуля.
На рис. 32 показана форма программы, почти не отличающаяся от формы, показанной на рис. 31.
unit Primer20; Листинг 20
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,
Modul20; // модуль программиста
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Label1: TLabel;
Button2: TButton;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// нажатие кнопки ОК
procedure TForm1.Button1Click(Sender: TObject);
var
k1,k2:real; // корни уравнения
rez:boolean;
mes:string; // сообщение
begin
Korni(StrToFloat(Edit1.Text),StrToFloat(Edit2.Text),StrToFloat(Edit3.Text),k1,k2,rez);
if rez then mes:='Корни уравнения:
'+#13+'x1='+FloatToStrF(k1,ffFixed,6,3)+#13+
'x2='+FloatToStrF(k2,ffFixed,6,3)
else mes:='Действительных корней нет';
label1.Caption:=mes;
end;
// нажатие кнопки Exit
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Close;
end;
end.
unit Modul20; // Решение квадратного уравнения Листинг 21
interface
procedure Korni(a,b,c:real;var x1,x2:real; var ok:boolean);
implementation
Procedure Korni(a,b,c:real;var x1,x2:real; var ok:boolean);
{ a,b,c - коэффициенты уравнения, х 1,х 2 - корни уравнения,
ok - True, если решение есть, False - решения нет }
var d:real; // дискриминант
begin
d:=sqr(b)-4*a*c;
if d<0 then ok:=false
else
begin
ok:=true;
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
end;
end;
end.
Создайте сами модуль, содержащий функцию, вычисляющую степень х2. Используйте этот модуль для вычисления силы резания.
Попробуйте не заглядывать в листинг 22.
unit Modul36; // вычисление степени ха Листинг 22
interface
function step(x,a:real):real;
implementation
function step(x,a:real):real;
begin
step:=exp(a*ln(x));
end;
end.
7.1 Вывод в файл
Программы, рассматриваемые до сих пор, выводили результат своей работы на экран. Delphi позволяет сохранить результаты работы программы в файле, что дает возможность использовать эти данные ля дальнейшей обработки, минуя процесс их ввода с клавиатуры. Файл должен быть объявлен в разделе описания переменных. При объявлении файла указывается тип элементов файла.
В общем виде объявление файла выглядит так:
Имя: file of ТипЭлементов;
Например:
res: file of char; // файл символов
koef: file of real; // файл вещественных чисел
f: file of integer; // файл целых чисел
Файл, компонентами которого являются данные символьного типа, называются текстовыми. Описание текстового файла в общем виде выглядит так:
Имя: TextFile;
Для того чтобы программа могла выводить данные в файл или считывать данные из файла, необходимо указать конкретный файл, т.е. связать файловую переменную с конкретным файлом. Для этого предназначена процедура AssignFile. Формат процедуры AssignFile выглядит следующим образом:
AssignFile(var f, ИмяФайла: string);
Имя файла может быть полным, т.е. содержать путь к нему.
Ниже приведены примеры вызова процедуры AssignFile:
AssignFile(f, `a:\result.txt');
AssignFile(f, `students\ivanov\korni.txt);
fname:=(`otchet.txt'); AssignFile(f,fname);
Непосредственно вывод в текстовый файл осуществляется при помощи инструкции write или writeln. В общем виде эти инструкции записываются следующим образом:
Write(ФайловаяПеременная, СписокВывода);
Writeln(ФайловаяПеременная, СписокВывода);
где
- ФайловаяПеременная - переменная, идентифицирующая файл, в который выполняется вывод;
- СписокВывода - разделенные запятыми имена переменных, значения которых надо вывести в файл. Кроме имен переменных в список вывода можно включать строковые константы. Например: write(f, `Корни уравнения',x1,x2);
Различие между инструкциями write и writeln состоит в том, что инструкции writeln после вывода всех значений, указанных в списке вывода, переходит на новую строку.
Перед выводом в файл его необходимо открыть. Возможны следующие режимы открытия файла для записи в него данных:
- перезапись (запись нового файла поверх существующего или создание нового файла);
- добавление в существующий файл.
Открытие файла для перезаписи осуществляется процедурой Rewrite(f), где f - файловая переменная типа TextFile. Открытие файла для добавления осуществляется с помощью процедуры Append(f).
7.2 Ввод из файла
Программа может вводить исходные данные не только с клавиатуры, но и из текстового файла. Для этого нужно объявить файловую переменную типа TextFile, назначить ей при помощи инструкции AssignFile имя файла, из которого будут считываться данные, открыть файл для чтения и прочитать данные, используя инструкцию read или readln.
Открытие файла для чтения выполняется вызовом процедуры Reset, имеющей один параметр - файловую переменную. Перед вызовом этой процедуры файловая переменная должна быть связана с конкретным файом с помощью процедуры AssignFile. Например, следующие инструкции открывают файл для чтения:
AssignFile(f, `c:\data.txt');
Reset(f);
Чтение из файла выполняется при помощи инструкций read и readln, которые в общем виде записываются следующим образом:
read(ФайловаяПеременная, СписокПеременных);
readln(ФайловаяПеременная, СписокПеременных);
где СписокПеременных - имена переменных, разделенные запятыми.
7.3 Конец файла
Для определения конца файла можно воспользоваться функцией EOF (End Of File).
У функции EOF один параметр - файловая переменная. Значение этой функции равно False, если прочитанный элемент данных не является последним в файле, в противном случае значение функции равно True. Значение функции EOF можно проверить сразу после открытия файла. Если при этом оно окажется равным True, то это значит, что файл - пуст.
Записи можно хранить в файле. Для этого необходимо объявить файл, указав в качестве типа его компонентов тип "запись". Тип "запись" должен быть объявлен в разделе type. В общем виде объявление типа "запись" выглядит так:
Имя = record
Поле 1: Тип 1;
Поле 2: Тип 2;
………………………………………………..
Полеk: Типk;
End;
где Полеi и Типi - имя и тип i-го компонента (поля) записи (i = 1,…,k).
Например, инструкции
type
TPerson = record
f_name: string[20];
l_name: string[20];
address: string[50];
end;
var
f: file of TPerson;
объявляют файл, компонентами которого являются записи типа TPerson.
Рассмотрим программу, которая записывает в файл введенные пользователем данные о результатах соревнований, формируя, таким образом, простую базу данных, и читает из файла либо все его содержимое, либо определенную часть по требованию пользователя. Исходные данные вводятся в поля диалогового окна (рис. 33) и сохраняются в файле, компонентами которого являются записи типа TMedal.
Для ввода вида спорта и станы используются компоненты ComboBox (комбинированный список), значок которого находится на вкладке Standard (Рис. 34).
Этот компонент дает возможность ввести данные либо непосредственно в поле ввода-редактирования, либо путем выбора из списка.
Список может быть сформирован как в процессе разработки формы, так и во время работы программы. Чтобы сформировать список во время разработки формы, нужно в окне Object Inspector выбрать свойство Items, щелкнуть на кнопке с тремя точками и ввести элементы списка.
Полный текст программы приведен в листинге 23.
В представленной программе процедура TForm1.FormActivate открывает файл базы данных для добавления. Файл сначала открывается процедурой Rewrite в режиме перезаписи, а затем процедура Seek устанавливает указатель в конец файла. Параметром процедуры Seek является функция FileSize, значение которой равно размеру файла (в байтах).
Процедура TForm1.Button1Click, которая запускается нажатием кнопки Добавить, выполняет непосредственное добавление записи в файл.
Содержимое поля medal базы данных определяется выбранной кнопкой компонента RadioGroup1 (см. рис. 34).
Поскольку тип TMedal используется двумя процедурами, то его описание помещено в раздел type модуля формы. По этой же причине объявление файловой переменной f помещено раздел объявления переменных модуля формы.
При чтении записей из файла работает переключатель Все или Выбрать, определяющий, выводить список медалей, выигранных представителями всех стран или страны, название которой введено в поле Страна. Переключатель сформирован с помощью двух компонентов RadioButton, помещенных поверх компонента GroupBox1, значки которых находится на вкладке Standard (см. рис. 34).
Для вывода результата чтения из файла используется компонент Memo1. Так как этот компонент предназначен только для просмотра информации, то свойству ReadOnly (только чтение, просмотр) присвоено значение True. Свойство ScrollBars (полосы покрутки) компонента Memo позволяет задавать отображение полосы прокрутки. По умолчанию этому свойству присвоено значение ssNone, т.е. полосы прокрутки не отображаются. В рассматриваемом примере выводится вертикальная полоса, поэтому свойству ScrollBars присвоено значение ssVertical. Информация в поле Memo1 добавляется инструкцией Memo1.Lines.Add(st), которая является инструкцией применения метода Add (Добавить) к компоненту Memo1.
Для ввода названия страны используется компонент ComboBox1, что позволяет задавать имя не только прямфм вводом названия, но и выбором из списка. Список стран нужно сформировать во время создания формы путем присвоения значения свойству Items. Чтобы сразу после запуска программы список выбора стран был недоступен (т.к. выбран переключатель Все группы Показать), свойству Enabled компонентов ComboBox1 и Label7 во время создания формы нужно присвоить значение False. Список ввода-выбора названия страны становится доступным в результате вбора во время работы программы переключателя Выбрать. Процедура обработки события OnClick на переключателе RadioButton2 делает доступным поле ComboBox1.
unit Primer23; Листинг 23
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Panel1: TPanel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit1: TEdit;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
Panel2: TPanel;
Label6: TLabel;
RadioGroup1: TRadioGroup;
Button1: TButton;
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
ComboBox3: TComboBox;
Label7: TLabel;
Label8: TLabel;
Memo1: TMemo;
Button2: TButton;
Label9: TLabel;
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button2Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
// тип медали
TKind=(gold, silver, bronze);
// запись из файла
TMedal=record
country:string[20]; // страна
sport: string[20]; // вид спорта
person: string[20]; // спортсмен
kind: TKind; // медаль
end;
var
Form1: TForm1;
f:file of TMedal; // файл записей - база данных
implementation
{$R *.dfm}
// активизация формы
procedure TForm1.FormActivate(Sender: TObject);
var resp:word; // ответ пользователя
begin
AssignFile(f,'medals.db');
{$I-}
Reset(f); // открыть файл
Seek(f, FileSize(f)); // указатель записи в конец файла
{$I+}
if IOResult=0
then button1.Enabled:=TRUE //теперь кнопка Добавить доступна
else
begin
resp:=MessageDlg('Файл базы данных не найден'+#13+
'Создать новую базу данных?',
mtInformation,[mbYes,mbNO],0);
if resp=mrYes then
begin
{$I-}
rewrite(f);
{$I+}
if IOResult=0 then button1.Enabled:=TRUE
else ShowMessage('Ошибка создания файла БД');
end;
end;
end;
// щелчок на кнопке Добавить
procedure TForm1.Button1Click(Sender: TObject);
var medal:TMedal;
begin
with medal do
begin
country:=ComboBox1.Text; // поля
sport :=ComboBox2.Text; // базы
person :=Edit1.Text; // данных
case RadioGroup1.ItemIndex of
0:kind:=gold;
1:kind:=silver;
2:kind:=bronze;
end;
end;
write(f,medal); // записать содержимое полей записи в файл
end;
// завершение работы программы
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseFile(f); // закрыть файл
end;
// нажатие кнопки ОК
procedure TForm1.Button2Click(Sender: TObject);
var
rec:TMedal; // запись, прочитанная из файла
n:integer; // кол-во записей, удовлетворяющих запросу
st:string[80];
begin
AssignFile(f, 'medals.db');
{$I-}
Reset(f); // открыть файл для чтения
{$I+}
if IOResult<>0 then
begin
ShowMessage('Ошибка открытия файла БД');
Exit;
end;
// обработка базы данных
if RadioButton2.Checked then
Memo1.Lines.Add('*** '+ComboBox3.Text+' ***');
n:=0;
{ Memo1.Clear; // очистить список поля Memo}
while not EOF(f) do
begin
read(f,rec); // прочитать запись
if RadioButton1.Checked or(rec.country=ComboBox3.text)
then
begin
n:=n+1;
st:=rec.person+', '+rec.sport;
if RadioButton1.Checked then st:=st+', '+rec.country;
case rec.kind of
gold: st:=st+', золото';
silver:st:=st+', серебро';
bronze:st:=st+', бронза';
end;
Memo1.Lines.Add(st);
end;
end;
if n=0 then ShowMessage('В БД нет запрашиваемой информации');
end;
// переключатель Выбрать
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
Label7.Enabled:=True;
ComboBox3.Enabled:=True; // теперь поле Страна доступно
ComboBox3.SetFocus; // курсор в поле Страна
end;
// переключатель Все
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
Label7.Enabled:=False;
ComboBox3.Enabled:=false; // теперь поле Страна не доступно
end;
end.
7.4 Контрольные вопросы к лекции 7
1. Какая инструкция позволяет использовать процедуры и функции модуля в своих программах?
2. Какой инструкцией начинается модуль?
3. Что должен поместить программист в раздел interface создаваемого модуля?
4. Что должен поместить программист в раздел implementation (реализация)?
5. Как добавить модуль к проекту?
6. Как осуществить компиляцию программы?
7. Где должен быть объявлен файл?
8. Как называются файл, компонентами которого являются данные символьного типа?
9. Как осуществляется вывод в текстовый файл?
10. Как осуществляется открытие файла для перезаписи?
11. Как осуществляется открытие файла для добавления?
12. Как выполняется открытие файла для чтения
13. Как прочитать данные из файла?
Лекция 8. Вывод графика
Поверхности, на которую программа может осуществлять вывод графика, соответствует объект Canvas. Свойство Pixels, представляющее собой двумерный массив типа TColor, содержит информацию о цвете каждой точки графической поверхности. Используя это свойство, можно задать требуемый цвет для любой точки графической поверхности, т.е. "нарисовать" точку. Например, инструкция Form1.Canvas.Pixels[10,10]:=clRed окрашивает точку поверхности формы в красный цвет. Размерность массива Pixels определяется размером графической поверхности. Размер графической поверхности формы (рабочей области, которую также называют клиентской) задается значениями свойств ClientWidth и ClientHeight, а размер графической поверхности компонента Image - значениями свойств Width и Height. Левой верхней точке рабочей области формы соответствует элемент Pixels[0,0], а правой нижней - Pixels[ClientWidth-1, ClientHeight-1].
График строится, как правило, на основе вычислений по формуле. Границы изменения аргумента являются исходными данными. Диапазон изменения значения функции может быть вычислен.
Следующая программа, текст которой приведен в листинге 24, выводит график функции y=2 sin(x) ex/10.
Диалоговое окно программы в процессе ее работы показано на рис. 35.
procedure TForm1.FormPaint(Sender: TObject); Листинг 24
begin
Form1.Font.Size:=10; // размер шрифта текста
with form1.Canvas do
begin
TextOut(50,18,'График функции y = 2 sin(x) exp(x/10)');
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
gr:array[1..50] of TPoint;
x0,y0,dx,dy,i:integer;
x,f:real;
begin
x0:=10; y0:=130;
dx:=5; dy:=5;
for i:=1 to 50 do
begin
x:=i/2;
f:=2*Sin(x)*exp(x/10);
gr[i].X:=x0+(i-1)*dx;
gr[i].Y:=y0-round(f)*dy;
end;
// строим график
with form1.Canvas do
begin
MoveTo(x0,y0+100); LineTo(x0,10); // ось Y
MoveTo(x0,y0); LineTo(250,y0); // ось X
TextOut(15,20,'20'); // цифры на оси
TextOut(14,220,'-20');
canvas.Pen.Color:=clRed; // цвет - красный
canvas.Pen.Width:=2;
PolyLine(gr); // график
end;
end;
8.1 Контрольные вопросы к лекции 8
1. Какое свойство содержит информацию о цвете точки графической поверхности?
2. Какого типа элементы массива Pixels?
Литература
1. Моисеева Л.Т., Рахматуллин А.И., Сотников С.В. Основы программирования в Delphi. Казань: Изд-во Казан. гос. техн. ун-та, 2005. 55 с.
2. Культин Н.Б. Основы программирования в Delphi 7. СПб.: БХВ-Петербург. 2003. 608 с.
3. Информатика: Учебник. 3-е перераб. изд. / Под ред. проф. Н.В. Макаровой. М.: Финансы и статистика. 1999. 768 с.
4. Фаронов В.В. Турбо Паскаль. В 3-х книгах. Кн. 1. М.: Учебно-инженерный центр "МВТУ-ФЕСТО ДИДАКТИК". 1992. 304 с.
Размещено на Allbest.ru
...Подобные документы
Delphi - среда быстрой разработки, в которой в качестве языка программирования используется типизированный объектно-ориентированный язык Delphi. Варианты программного пакета. Особенности работы, вид экрана после запуска. Описание структуры программы.
курсовая работа [1,3 M], добавлен 25.11.2014Язык Delphi как строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам Object Pascal, его главные особенности. Стадии создания автоматизированной системы. Листинг программы, разработка интерфейса.
курсовая работа [933,9 K], добавлен 08.12.2011Разработка программы обработки типизированных файлов с кодом на языке Object Pascal, с использованием компонентов Delphi для ввода и вывода данных. Разработка экранных форм и алгоритма программы. Описание программных модулей и инструкция оператору.
курсовая работа [1,5 M], добавлен 08.02.2011Предмет объектно-ориентированного программирования и особенности его применения в средах Паскаль, Ада, С++ и Delphi. Интегрированная среда разработки Delphi: общее описание и назначение основных команд меню. Процедуры и функции программы Delphi.
курсовая работа [40,8 K], добавлен 15.07.2009Delphi как строго типизированный объектно-ориентированный язык. Общее понятие о приложении "DreamBook", его главные задачи. Модель бизнес процесса. Диаграмма прецедентов: спецификация, ограничения и отношения. Модель анализа, общий алгоритм метода.
контрольная работа [190,4 K], добавлен 22.11.2013Описание входной и выходной документации. Требования к интерфейсу Windows-приложения и информационной базе. Разработка алгоритмов обработки данных и SQL-запросов к базе данных. Язык программирования Object Pascal и среда Delphi. Используемая СУБД.
дипломная работа [228,7 K], добавлен 25.11.2007Borland Delphi 7 как универсальный инструмент разработки, применяемый во многих областях программирования, функции: добавление информации об абитуриентах в базу данных, формирование отчетов. Рассмотрение и характеристика основных компонентов Delphi.
контрольная работа [3,6 M], добавлен 18.10.2012Интегрированная среда разработки Delphi и элементы, входящие в ее состав. Математическая модель, алгоритм решения и его свойства. Описание операторов, процедур, функций и методов. Создание приложений по аналитической геометрии и теоретической механике.
курсовая работа [1,8 M], добавлен 26.05.2010Эффективные средства разработки программного обеспечения. Технология визуального проектирования и событийного программирования. Конструирование диалоговых окон и функций обработки событий. Словесный алгоритм и процедуры программы Borland Delphi 7 Studio.
дипломная работа [660,2 K], добавлен 21.05.2012Создание Windows-приложения на алгоритмическом языке Object Pascal в среде визуального программирования Delphi, которое, как планируется, будет обеспечивать решение специализированных задач по формированию, обработке на ЭВМ и выводу информации.
курсовая работа [967,6 K], добавлен 20.05.2008Free Pascal как свободная реализация языка Паскаль, совместимая с Borland Pascal и Object Pascal - Delphi, но при этом обладающая и некоторыми дополнительными возможностями. Основы алгоритмизации и программирования, создание визуальных приложений.
учебное пособие [4,2 M], добавлен 13.12.2011Характеристика вычислительной системы и инструментов разработки. Программирование на языке Pascal в среде Turbo Pascal и на языке Object Pascal в среде Delphi. Использование процедур, функций, массивов, бинарного поиска. Создание базы данных в виде файла.
отчет по практике [2,1 M], добавлен 02.05.2014Основные понятия и структура обработчика на языке Pascal. Элективные курсы по информатике в системе профильного обучения. Элективный курс "Программирование в среде Delphi". Методические материалы по изучению программирования на языке Object Pascal.
методичка [55,4 K], добавлен 08.12.2010Характеристика системы программирования. Главные составные части Delphi. Интерфейс программного приложения. Результаты работы программы. Руководство системного программиста и оператора. Язык программирования Delphi, среда компилятора Borland 7.0.
курсовая работа [1,6 M], добавлен 29.05.2013Методы грамматического разбора. Разработка структуры учебного транслятора на базовом языке программирования Object Pascal в среде объектно-ориентированного визуального программирования Borland DELPHI 6.0 с использованием операционной системы Windows XP.
курсовая работа [493,8 K], добавлен 12.05.2013Особенности и тонкости программирования в среде Delphi. Специфика перехода от алгоритмического решения к непосредственной программной реализации на языке Object Pascal с использованием всех необходимых средств данного языка. Анализ полученных результатов.
реферат [246,2 K], добавлен 17.11.2012История развития, характеристика, предназначение и особенности языка программирования Delphi. Разработка проекта создания кроссворда на объектно-ориентированном языке Delphi, который состоит из 19 вопросов по горизонтали и 16 вопросов по вертикали.
курсовая работа [970,5 K], добавлен 15.05.2014Понятие многопоточности. История возникновения и развития параллельного программирования. Квазимногозадачность на уровне исполняемого процесса. Типы реализации потоков, их взаимодействие и общее ресурсы. Критические секции. Классы и процедуры в Delphi.
курсовая работа [1,1 M], добавлен 20.09.2013Элементы языка Object Pascal: идентификаторы, константы, переменные, выражения. Структура проекта Delphi. Операторы и метки. Типы данных языка OPascal. Статические и динамические массивы. Записи с вариантными полями. Совместимость и преобразование типов.
курс лекций [385,4 K], добавлен 18.02.2012Обоснование языка программирования Object Pascal и среды разработки Delphi. Создание интерфейса пользователя. Проектирование структуры и описание компонентов, использованных при разработке программного продукта. Составление инструкции пользователя.
курсовая работа [888,7 K], добавлен 20.05.2015