- •Методическое пособие для самостоятельных работ «Основы интегрированной среды программирования delphi6»
- •6.100301 "Судовождение",
- •6.100302 "Эксплуатация судовых энергетических установок"
- •6.092201 "Электрические системы и комплексы транспортных средств",
- •Введение
- •Глава 1. Интегрированная среда Delphi. Принципы работы
- •1.1. Интегрированная среда Delphi
- •1.2. Принципы визуального программирования
- •Val(Edit1.Text,k1,sign);
- •Val(Edit2.Text,k2,sign);
- •Val(MaskEdit1.Text,r1,sig);
- •Val(МaskEdit2.Text,r2,sig);
- •1.3. Событийно-управляемые программы
- •1.4. Составление программ обработки массивов
- •I :integer;
- •I, j :integer;
- •1.5. Вывод на печать
- •Глава 2. Общие свойства компонентов
- •2.1. Иерархия компонентов
- •2.2. Имена и собственники компонентов
- •2.3. Родительские и дочерние компоненты
- •2.4. Положение, размеры и оформление компонентов
- •2.5.Указатели мыши
- •2.3. Окно редактора с готовым изображением указателя
- •2.6. Реакция на события от мыши и клавиатуры
- •2.6.1. События от мыши
- •2.6.2. События от клавиатуры
- •2.6.3. Клавиатура в ms-dos и Windows
- •2.6.4. Фокус ввода
- •2.7. Механизм действий Action
- •2.8. Иинтерфейс Drag&Drop
- •2.9. Иинтерфейс Drag&Dock
- •2.10. Поддержка справочной службы
- •2.11. Поддержка Сом
- •2.12. Свойства разного назначения
- •Глава 3. Использование компонентов общего назначения
- •3.1. Компоненты страницы Standard
- •3.1.1. TFrame - рама и шаблоны компонентов
- •6) Окно регистрации рамы в палитре компонентов
- •3.1.2. Создание шаблонов без рам
- •3.1.3. TMainMenu - главное меню формы (программы)
- •3.1.4. TPopupMenu - вспомогательное (локальное) меню
- •3.1.5. TLabel - метка для отображения текста
- •3.1.6. TEdit - ввод и отображение строки
- •3.1.7. TMemo - ввод и отображение текста
- •3.1.8. TButton - кнопка
- •3.1.9. TCheckBox - независимый переключатель
- •3.11. Компонент tCheckBox - независимый переключатель
- •3.1.10. TRadioButton - зависимые переключатели
- •3.1.11. TListBox - список выбора
- •3.1.12. TComboBox – комбинированный или раскрывающийся список выбора
- •3.1.13. TScrollBar - управление значением величины
- •3.1.14. TGroupBox - панель группирования
- •3.1.15. TRadioGroup - группа зависимых переключателей
- •3.1.16. TPanel - панель
- •3.1.17. TActionList - механизм действий
- •3.2. Компоненты страницы Аdditional
- •3.2.1. TBitBtn - кнопка с изображением
- •3.2.2. TSpeedButton - кнопка для инструментальных панелей
- •3.2.3. TMaskEdit - специальный редактор
- •3.2.4. TStringGrid - таблица строк
- •3.2.5. TDrawGrid - произвольная таблица
- •3.2.6. TImage - отображение картинок
- •3.2.7. TShape - стандартная фигура
- •3.2.8. TBevel - кромка
- •3.2.9. TScrollBox - панель с прокруткой
- •3.2.10. TСheckListBox - группа независимых переключателей
- •3.2.11. TSplitter - компонент для изменения размеров
- •3.2.12. TStaticText - метка для отображения текста
- •3.2.13. TControlBar - инструментальная панель
- •3.2.14. TApplicationEvents - обработчик сообщений Windows
- •3.2.15. TValueListEditor - специализированный редактор строк
- •3.2.16. TLabelEdit - однострочный редактор с меткой
- •3.2.17. TColorBox - список выбора цвета
- •3.2.18. TChart - построитель графиков
- •3.2.19. TActionManager - менеджер действий
- •3.2.20. TActionMainMenuBar - полоса меню для действий
- •3.2.21. TActionTollBar - полоса кнопок для действий
- •3.2.22. TCustomizeDIg - диалог настройки интерфейса
- •Глава 4. Многодокументный и однодокументный интерфейсы (mdi и sdi)
- •4.1. Mdi и sdi: сравнение
- •4.2. Разработка mdi—приложений
- •4.2.1. Разработка главного и информационного окон
- •4.2.2. Использование стандартных диалоговых окон
- •If OpenDialog1.Execute then
- •4.2.3. Разработка диалогового окна
- •Var dlg6:tokRightDlg;
- •X1,x2,x3:String;
- •If b1 or b2 then
- •4.2.4. Управление окнами
- •I:integer;
- •I:integer;
- •4.2.5. Работа с меню
- •Var tf5:tForm2;
- •4.3. Разработка sdi–приложения
- •4.3.1. Простое sdi–приложение
- •I,j :byte;
- •I,j :byte;
- •I,j :byte;
- •4.3.2. Управление окнами в sdi–приложениях
- •I :byte;
- •Var I :byte; ptr6 :tForm2;
- •I :byte;
- •Глава 5. Реализация алгоритмов решаемых задач на Delphi
- •5.1. Традиционный подход реализации алгоритмов на Delphi
- •5.2. Объектно-ориентированный подход
- •Val(Edit1.Text,k,sig);
- •Val(Edit2.Text,l,sig);
- •I,j :byte;
- •I,j :integer;
- •Inherited Create (Ni,Nj);
- •Val(Edit1.Text, p, sig1);
- •Val(Edit2.Text, q, sig2);
- •Val(Edit3.Text, r, sig3);
- •Vas :real;
- •Val(Edit4.Text,n,sig);
- •Глава 6. Тестирование и отладка приложений
- •6.1. Виды ошибок
- •6.2. Отладочные средства Delphi
- •6.3. Составление тестов
- •Глава 7. Исключительные ситуации
- •7.1. Обработка исключительных ситуаций
- •I, j, k : integer;
- •I:integer;
- •I, j, k : integer;
- •7.2. Обработка определенных исключительных ситуаций
- •Var I,j,k :shortint; p,q :real;
- •Заключение
- •Литература
- •Методическое пособие для самостоятельных работ «Основы интегрированной среды программирования delphi6»
- •6.100301 "Судовождение",
- •6.100302 "Эксплуатация судовых энергетических установок"
- •6.092201 "Электрические системы и комплексы транспортных средств",
I, j :integer;
sum, x :real;
begin
sum:=0;
for i:=1 to StringGrid1.RowCount –1 do
for j:=1 to StringGrid1.ColCount - 1 do
begin
if StringGrid1.Cells[j,i]='' then x:=0
else x:=StrToFloat( StringGrid1.Cells[j,i]);
sum:=sum+x;
end;
Label2.Caption:=FloatToStr(sum);
end;
Условный оператор позволяет отождествлять пустые элементы с нулем. Для вывода результата использован компонент Label, поэтому исключена в принципе возможность изменения выведенного значения.
1.5. Вывод на печать
Постараемся в этом параграфе ответить на вопрос: как обеспечить вывод результатов на печать? Ограничимся простейшим способом печати, представленном в следующем примере. Печать выполняется при нажатии кнопки:
procedure TForm1.Button1Click(Sender: TObject);
var
p :TextFile;
k :real;
begin
AssignPrn (p);
Rewrite (p);
k:=4.3456;
writeln ( p, 'Это печать текста ',' K= ', k :3 :1);
CloseFile(p);
end;
Для выполнения печати объявим переменную типа TextFile и используем разновидность команды Assign – AssignPrn для настройки переменной р на порт принтера. Кроме того, необходимо добавить uses Printers; на соответствующее место в модуле формы.
В Delphi имеется специальный компонент TPrinter для организации сложного вывода, включая изменение шрифтов, управление расположением текста на бумаге, вывод графики и т.д. Ее описание выходит за рамки данного пособия.
Контрольные вопросы
Какие три основных способа задания свойств компонента вы знаете?
Как динамически изменить свойства компонента?
Какая разница между остановкой программы и состоянием паузы?
Что такое «событие», и какие источники событий вы знаете?
Какие два типа меню используется в Delphi, чем они отличаются?
Как обеспечить вывод результатов на печать?
Какой специальный компонент В Delphi служит для организации сложного вывода на печать?
Примеры составления программ
Угадывание целого числа
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
bbRun: TBitBtn;
bbCancel: TBitBtn;
edInput: TEdit;
mmOutput: TMemo;
lbOutput: TLabel;
procedure bbRunClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
X: Integer; // Угадываемое число
IsAnswerWait: Boolean; // Признак ожидания ответа
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.bbRunClick(Sender: TObject);
var
Y: Integer; // Ответ пользователя
begin
if edInput.Text='' then // Есть ответ?
Exit; // - нет: выход
try // Преобразуем текст в число
Y := StrToInt(Trim(edInput.Text));
except // Ошибка преобразования:
ShowMessage('Ошибка в записи числа!');
edInput.SelectAll; // Выделяем ошибочный текст
edInput.SetFocus;
Exit; // Завершаем работу
end;
if not IsAnswerWait then // Ждем ответ?
if X<Y then // - нет: число меньше?
mmOutput.Lines.Add('X < '+edInput.Text) // -да
else if X>Y then // - нет: число больше?
mmOutput.Lines.Add('X > '+edInput.Text) // -да
else // - нет. Пользователь угадал
begin // Предлагаем сыграть еще раз
mmOutput.Lines.Add('X = '+edInput.Text);
MessageBeep(mb_OK); // Звук для привлечения внимания
lbOutput.Caption :=
'Вы угадали! Введите 1, если хотите повторить.';
IsAnswerWait := True;
end else // Ждали ответ на приглашение
if Y=1 then // Пользователь согласен?
begin // -да
X := Random(1001);
lbOutput.Caption := 'Введите число:';
IsAnswerWait := False;
end else
Close; // Пользователь прекратил игру
edInput.Text := ''; // Очищаем ввод
edInput.SetFocus; // и передаем фокус ввода
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
Randomize; // Инициализируем генератор
X := Random(1001); // Загадываем случайное число
edInput.SetFocus; // Передаем фокус ввода строке edInput
end;
end.
Пример работы с модулем Cmplx (программа генерирует два случайных комплексных числа и производит над ними 4 математических действия)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls;
type
TfmExample = class(TForm)
Panel1: TPanel;
bbRun: TBitBtn;
bbClose: TBitBtn;
edInput: TEdit;
lbOutput: TLabel;
mmOutput: TMemo;
procedure bbRunClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmExample: TfmExample;
implementation
uses Cmplx;
{$R *.DFM}
procedure TfmExample.bbRunClick(Sender: TObject);
var
x,y,z: Complex;
procedure Output(Operation: Char);
// Осуществляет нужное действие и выводит результат в mmOutput
var
S: String;
begin
case Operation of
'+': z := AddC(x,y);
'-': z := SubC(x,y);
'*': z := MulC(x,y);
'/': z := DivC(x,y);
end;
S := '('+FormatFloat('+0.0000;-0.0000',x.re)+
FormatFloat('+0.0000j;-0.0000j',x.im)+')'+Operation+
'('+FormatFloat('+0.0000;-0.0000',y.re)+
FormatFloat('+0.0000j;-0.0000j',y.im)+'='+
FormatFloat('+0.0000;-0.0000',z.re)+
FormatFloat('+0.0000j;-0.0000j',x.im);
mmOutput.Lines.Add(S);
end; //Output
begin //bbRunClick
x.re := Random;
x.im := Random;
y.re := Random;
y.im := Random;
Output('+');
Output('-');
Output('*');
Output('/');
mmOutput.Lines.Add('');
end;
end.
Сумма целых чисел.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
bbRun: TBitBtn;
bbCancel: TBitBtn;
edInput: TEdit;
mmOutput: TMemo;
lbOutput: TLabel;
procedure bbRunClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.bbRunClick(Sender: TObject);
var
N, Sum, i: Integer;
S: String;
begin
// Проверка ввода пользователя:
if edInput.Text='' then
Exit; // Ввода нет
try
N := StrToInt(Trim(edInput.Text));
except // Ошибочный ввод
ShowMessage('');
edInput.SelectAll;
edInput.SetFocus;
Exit;
end;
Sum := 0; // Начальное значение суммы
if N>=0 then // Анализ знака N
for i := 1 to N do // - положительное число
Sum := Sum+i
else
for i := -1 downto N do // - отрицательное число
Sum := Sum+i;
// Вывод результата:
S := 'Сумма всех целых чисел в диапазоне от 0 до ';
mmOutput.Lines.Add(S+edInput.Text+' равна '+IntToStr(Sum));
// Подготовка нового ввода:
edInput.Text := '';
edInput.SetFocus;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
edInput.SetFocus
end;
end.
Вычисление машинного эпсилон
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TfmExample = class(TForm)
Panel1: TPanel;
bbRun: TBitBtn;
bbClose: TBitBtn;
edInput: TEdit;
lbOutput: TLabel;
mmOutput: TMemo;
procedure bbRunClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmExample: TfmExample;
implementation
{$R *.dfm}
procedure TfmExample.bbRunClick(Sender: TObject);
var
Epsilon: Real;
begin
Epsilon := 1;
while 1+Epsilon/2>1 do
Epsilon := Epsilon/2;
lbOutput.Caption := 'Машинное эпсилон = '+FloatToStr(Epsilon);
end;
end.
Иллюстрация рекурсии (Введится положительное целое число и вычисляетя его факториал).
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TfmExample = class(TForm)
Panel1: TPanel;
bbRun: TBitBtn;
bbCancel: TBitBtn;
edInput: TEdit;
mmOutput: TMemo;
lbOutput: TLabel;
procedure bbRunClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmExample: TfmExample;
implementation
{$R *.dfm}
procedure TfmExample.bbRunClick(Sender: TObject);
{Программа вычисляет N! и показывает результат работы в компоненте lbOutput. В компоненте edInput пользователь должен ввести значение N. }
Function Factorial(N: Word): Extended;
begin
if N = 0 then
Result := 1
else
Result := N * Factorial(N-1)
end; // Factorial
var
N: Integer;
begin
try
N := StrToInt(Trim(edInput.Text));
except
Exit;
end;
mmOutput.Lines.Add(edInput.Text+'! = '+FloatToStr(Factorial(N)))
end;
procedure TfmExample.FormActivate(Sender: TObject);
begin
edInput.SetFocus
end;
end.
Задания для самостоятельного выполнения
Вычислить f = 10!, каждым из трёх вариантов цикла.
Подсчитать k – количество цифр в десятичной записи целого неотрицательного числа n.
Логической переменной t присвоить значение true или false в зависимости от того, является натуральное число k степенью 3 или нет.
Вычислить: y = (2n-1)!! = 1•3•5•…•(2n-1), n>0.
Вычислить: y=n!!, n>0.
Вычислить: y=1!+2!+3!+…+n!, n>1.
Числа Фибоначчи (fn) определяются формулами: F0=f1=1;Fn=fn-1+fn-2, где n=2,3,…Определить f40- 40-е число Фибоначчи.Вычислить s-сумму всех чисел Фибоначчи, которые не превосходят 1000.
Вычислить сумму квадратов всех целых чисел, попадающих в интервал (ln x, e2x), х>1.
Вычислить K-количество точек с целочисленными координатами , попадающих в круг радиуса R (R>0) с центром в начале координат.
Напечатать в возрастающем порядке все трёхзначные числа, в десятичной записи которых нет одинаковых цифр (Операции деления не использовать).