з) Paint (кроме пункта «File»);
и) WinRAR (кроме пункта «Commands»).
3. Создайте программу, включающую окно с кнопкой и выполняющую одно из следующих действий:
а) при нажатии на кнопку её размеры увеличиваются;
б) при нажатии на кнопку её размеры уменьшаются;
в) при нажатии на кнопку она перемещается слева направо;
г) при нажатии на кнопку она перемещается сверху вниз;
д) при нажатии на кнопку меняется шрифт надписи на кнопке;
е) при нажатии на кнопку изменяется её надпись;
ж) при нажатии на кнопку изменяется цвет окна (формы);
з) при нажатии на кнопку изменяется заголовок окна (формы);
и) при нажатии на кнопку окно (форма) перемещается по горизонтали;
к) при нажатии на кнопку окно (форма) увеличивается;
л) при нажатии на кнопку она исчезает, а при дальнейшем щёлчке мышью на форме кнопка вновь появляется.
м) при нажатии на кнопку она отключается (становится недоступной), а при дальнейшем щёлчке мышью на форме кнопка вновь становится активной.
4. Создайте программу, включающую окно с двумя кнопками и меткой (Label) и выполняющую одно из следующих действий:
а) при нажатии на первую кнопку выводится надпись «да», а при нажатии на вторую кнопку надпись меняется на «нет»;
б) при нажатии на первую кнопку метка (надпись) перемещается влево, а при нажатии на вторую кнопку надпись перемещается вправо.
2. ПРИМЕРЫ ПРОГРАММИРОВАНИЯ В DELPHI
2.1. Простые расчётные программы – определение расстояний
2.1.1. Программа расчёта расстояния между двумя точками на плоскости
Загрузите систему Delphi. Если Вы уже работали с проектами, закройте их (File / Close All) и начните новый проект (File / New Application).
Для ввода координат точек установите на форме компоненты Edit. В их свойстве Text введите цифру 0. Для запуска процедуры расчёта установите кнопку (компонент Button). Надписи на форме выполните с помощью компонентов Label и их свойства Caption. Для вывода результата также используйте компонент Label. На рис. 2.1 показано, как следует разместить на форме эти компоненты.
Напишем процедуру вычисления расстояния. Для этого сделайте двойной щелчок мышью по кнопке.[1] При этом автоматически создаётся процедура Button1Click в программном модуле. В этой процедуре введите следующий текст:
procedure TForm1.Button1Click(Sender: TObject);
var X1, Y1, X2, Y2, R: Real;
begin
X1:= StrToFloat(Edit1.text); Y1:= StrToFloat(Edit2.text);
X2:= StrToFloat(Edit3.text); Y2:= StrToFloat(Edit4.text);
R:= sqrt((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2));
Label8.Caption:= FloatToStr(round(1000*R)/1000);
end;
В этой процедуре использованы переменные вещественного типа Real, которые объявлены в разделе Var процедуры. В начале процедуры переменным X1, X2, Y1,Y2 присваиваются значения координат, введённых в окна Edit. Свойство Text этих компонентов имеет строковый тип String, поэтому для преобразования введённых данных в вещественный формат используется стандартная функция StrToFloat (табл. 2.1).
После вычисления расстояния R (sqrt – функция взятия квадратного корня) результат выводится путём присвоения значения R свойству Caption компонента Label8. Функция FloatToStr служит для преобразования из вещественного типа в строковый. Функция round округляет результат до ближайшего целого числа. Выражение round(1000*R)/1000 позволяет получить результат с точностью до 3 цифр после запятой.
Таблица 2.1
Функции преобразования типов данных
Функция | Назначение | Пример | Результат |
Round | Округление дробного числа до целого | Round(3.54) | 4 |
Trunc | Отбрасывание дробной части числа | Trunc(3.54) | 3 |
StrToFloat | Преобразование строки в вещественное число | StrToFloat(‘3.14’) | 3.14 |
FloatToStr | Преобразование вещественного числа в строку | FloatToStr(3.14) | ‘3.14’ |
StrToInt | Преобразование строки в целое число | StrToInt(‘79’) | 79 |
IntToStr | Преобразование целого числа в строку | IntToStr(79) | ‘79’ |
Сохраните проект. Для этого в меню File выберите команду Save Project As... и сохраните файлы проекта в отдельную папку.
Теперь программа готова. Если Вы не сделали ошибок при написании текста процедуры, то после выбора команды Run из меню Run (или нажатия кнопки
), произойдёт компиляция программы (при этом создаётся exe - файл) и запуск её на выполнение.
2.1.1. Программа расчёта расстояний на поверхности Земли
Создадим более сложную программу – калькулятор расстояний между двумя точками на поверхности Земли. Внешний вид главного окна программы показан на рис. 2.2. Здесь используются те же компоненты (Label, Edit, Button), что и в предыдущем примере. Однако в левом верхнем углу есть новый компонент – кнопка SpeedButton, который отличается от обычной кнопки тем, что на нём можно поместить рисунок.
Кнопка SpeedButton с изображением Земли понадобится для открытия вспомогательного окна с картой мира. Для возможности выбора точек по карте необходимо иметь изображение карты в меркаторской проекции. Если у Вас нет такой карты, можно ограничиться упрощённым вариантом программы (с одним окном, без кнопки с рисунком).
![]() |
Рис. 2.2. Главное окно географического калькулятора
После создания формы в соответствии с рисунком 2.2 в тексте модуля программы объявите переменные вещественного типа:
var
Form1: TForm1;
lat1, lat2, lon1, lon2, dist, dkm, angle: real;
sign, dlat, dlon, dep: real;
Поясним смысл основных переменных:
lat1, lat2, lon1, lon2 – широта (град) и долгота (мин) первой и второй точек;
dist – расстояние между точками (в милях) по дуге большого круга;
dkm – расстояние между точками (в км);
angle – угол курса (между направлением на север и линией, проходящей через точки).
Сделайте двойной щелчок мышью по кнопке «Выполнить расчёт» и в открывшемся окне редактора текста напишите следующую процедуру:
procedure TForm1.Button1Click(Sender: TObject);
begin
// присвоение введённых координат
// соответствующим переменным:
lat1:= StrToFloat(Edit1.text) +
StrToFloat(Edit8.text)/60;
lon1:= StrToFloat(Edit2.text) +
StrToFloat(Edit9.text)/60;
lat2:= StrToFloat(Edit3.text) +
StrToFloat(Edit10.text)/60;
lon2:= StrToFloat(Edit4.text) +
StrToFloat(Edit11.text)/60;
// вычисление расстояний и курсового угла:
dlat:= lat2 - lat1;
dlon:= lon2 - lon1;
sign:= 1; if dlon < 0 then sign:= -1;
if abs(dlon) > 180 then dlon:= sign * (360 - abs(dlon));
dep:= cos((abs(lat2*pi/180)+abs(lat1*pi/180))/2 ) * dlon;
dist:= 60*sqrt(dlat *dlat + dep * dep);
dkm:= dist * 1.852;
angle:= 0;
if (lat2 < lat1) then angle:= 180;
if (dlon <> 0) then angle:= arctan(dlat/abs(dlon))*180/pi;
if (dlon < 0) and (dlat < 0) then angle:= angle + 180;
if (dlon > 0) and (dlat < 0) then angle:= angle + 270;
if (dlon > 0) and (dlat > 0) then angle:= angle + 270;
if (dlon > 0) and (dlat = 0) then angle:= 270;
if (dlon < 0) and (dlat = 0) then angle:= 90;
// вывод результатов расчёта:
Label20.Caption:= FloatToStr(round(10*dist)/10);
Label21.Caption:= FloatToStr(round(10*dkm)/10);
Label22.Caption:= FloatToStr(trunc(angle));
Label11.Caption:=
FloatToStr(round((angle-trunc(angle))*100)/100*60);
end;
На кнопку «Очистить поля» напишите следующую процедуру:
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Text:= '0'; Edit2.Text:= '0';
Edit3.Text:= '0'; Edit4.Text:= '0';
Edit8.Text:= '0'; Edit9.Text:= '0';
Edit10.Text:= '0'; Edit11.Text:= '0';
Label11.Caption:= ''; Label20.Caption:= '';
Label21.Caption:= ''; Label22.Caption:= '';
end;
Теперь осталось сохранить проект и исправить ошибки, если они появляются после запуска программы. Проверьте также правильность результатов, вводя такие координаты, по которым можно легко определить расстояние и угол курса без вычислений.
Введём в программу возможность выбора точек по карте. Для этого вначале создайте рисунок для кнопки SpeedButton с помощью графического редактора. В меню Tools выберите команду Image Editor. В меню редактора выберите File / New… / Bitmap File (.bmp). В окне Bitmap Properties установите размер рисунка в пикселях: 35 х 35 (рис. 2.3). После этого нарисуйте изображение и сохраните его. Для установки рисунка на поверхности кнопки выберите свойство Gliph компонента SpeedButton. В появившемся окне щёлкните по кнопке Load и выберите файл рисунка.
![]() |
Создадим далее вспомогательное окно программы с изображением карты мира. Для этого в меню File выберите команду New Form. На новой форме поместите компонент Image (страница Additional палитры компонентов) и разверните его на всю форму (свойство Align = alClient). В свойстве Picture нажмите кнопку, в появившемся окне выберите Load… и установите графический файл с изображением карты. Размеры формы подберите так, чтобы рисунок полностью входил в окно. Установите свойства формы: AutoScroll = False; BorderStyle = bsSingle.
Выполнив двойной щелчок мышью по кнопке SpeedButton, напишите процедуру вывода окна с картой и компоновки окон на экране:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Form2.visible:= true;
Form2.Top:= 340; Form2.Left:= 25;
Form1.Top:= 20; Form1.Left:= 210;
end;
Добавим в программу возможность указания координат путём простого щелчка мышью по точке на карте. Но для этого вначале необходимо подумать о том, чтобы программа «понимала» порядок указания точек: если указывается первая точка, то должны заполниться поля координат под пунктом 1 (рис. 2.2), а при указании второй точки должны заполниться поля пункта 2 с выполнением расчёта. Для этого введём логическую переменную p1, принимающую значение true при указании первой точки.
2.1. Калькулятор
Внешний вид калькулятора представлен на рис. 2.2.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)

Button1: TButton;
Button2: TButton;
Button3: TButton;

Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
Button10: TButton;
Button11: TButton;


Button12: TButton;
Button13: TButton;
Button14: TButton;
Button15: TButton;
Button16: TButton;
Button17: TButton;
Label1: TLabel;
procedure Button17Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Button13Click(Sender: TObject);
procedure Button14Click(Sender: TObject);
procedure Button15Click(Sender: TObject);
procedure Button16Click(Sender: TObject);
procedure Button12Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 |




