создание приложений

Создание приложения «Блокнот»

Разместить на форме (пример 5.13) следующие компоненты:

  • рабочая область для текста — TextBox1;

  • диалоги работы с файлами — OpenFileDialog1, SaveFileDialog1;

  • диалоги для настройки внешнего вида приложения — FontDialog1, ColorDialog1;

  • главное меню — MenuStrip1.

Компонент TextBox1 предназначен для набора и редактирования текста. Текст может набираться в несколько строк, поэтому нужно установить значение true для свойства MiltiLine. Для того чтобы компонент занимал всю клиентскую часть формы, необходимо установить у свойства Dock значение Fill (пример 5.14). Установить значение Vertical для свойства ScrollBars (вертикальная полоса прокрутки).

Структура меню представлена в примере 5.15. Для написания обработчиков пунктов меню нужно в инспекторе объектов выбрать соответствующий пункт меню, перейти на вкладку Events и выбрать событие Click. Поскольку событие Click является событием по умолчанию, то двойной клик по пункту в редакторе меню создаст процедуру-обработчик.

Пример 5.13
Пример 5.14
Пример 5.15

var s:string;

procedure Form1.toolStripMenuItem4_Click (sender: Object; e: EventArgs);

begin

//Файл — Новый

TextBox1.Clear;

end;

procedure Form1.toolStripMenuItem5_Click (sender: Object; e: EventArgs);

begin

//Файл — Открыть

openFileDialog1.ShowDialog();

s := openFileDialog1.FileName;

Text := 'Блокнот ' + s;

TextBox1.Lines:=ReadAllLines(s);

end;

procedure Form1.toolStripMenuItem6_Click (sender: Object; e: EventArgs);

begin

//Файл — Сохранить

saveFileDialog1.ShowDialog();

F_N := saveFileDialog1.FileName;

WriteAllLines(F_N, TextBox1.Lines);

Text := 'Блокнот ' + F_N;

end;

procedure Form1.toolStripMenuItem8_Click (sender: Object; e: EventArgs);

begin

//Файл — Выход

close;

end;

procedure Form1.toolStripMenuItem9_Click (sender: Object; e: EventArgs);

begin

//Формат — Шрифт

fontDialog1.ShowDialog();

TextBox1.Font := fontDialog1.Font;

end;

procedure Form1.toolStripMenuItem10_Click(sender: Object; e: EventArgs);

begin

//Формат — Цвет текста

colorDialog1.ShowDialog();

TextBox1.ForeColor := colorDialog1.Color;

end;

procedure Form1.toolStripMenuItem11_Click(sender: Object; e: EventArgs);

begin

//Формат — Цвет фона

colorDialog1.ShowDialog();

TextBox1.BackColor := colorDialog1.Color;

end;

Создание приложения «Графический редактор»

Сначала спроектируем форму, разместив на ней следующие компоненты (пример 5.18):

  • область для рисования — PictureBox;

  • компоненты, отображающие выбранный цвет для рисования и цвет фона — Panel1, Panel2;

  • кнопки для смены цвета;

  • компонент выбора цвета — ColorDialog1;

  • компонент для выбора толщины линии — numericUpDown1 (панель компонентов Стандартные элементы управления);

  • главное меню — menuStrip1 и компоненты для работы с файлами — OpenFileDialog1, SaveFileDialog1.

На этапе конструирования установить значение свойства BackColor у компонентов Panel1 и Panel2 — Black и White соответственно.

У свойств Value и Minimum для компонента numericUpDown1 установить значение 1.

Структура меню показана в примере 5.19.

В обработчике события Load для формы прописаны первоначальные установки для создания графического объекта, заданы параметры кисти и карандаша.

В обработчике события MouseDown для компонента PaintBox1 задаем переменной m_d значение true — кнопка нажата. Здесь же запоминаем координаты точки, поскольку от этой точки начнем строить линию. В обработчике MouseUp — значение переменной m_d = false — кнопка не нажата.

Для отслеживания траектории движения мыши по компоненту PaintBox1 создаем обработчик события MouseMove. Если кнопка нажата, то можем строить линию. Параметры e.x, e.y возвращают координаты точки, в которой произошло нажатие кнопки.

Для перемещения мыши нужно использовать метод DrawLine (x1, y1, e.x, e.y) — рисование линии, соединяющей две точки. После прорисовки обновляем координаты.

Толщина линии определяется значением свойства Value для компонента numericUpDown1. Обработчик события — ValueChanged.

Обработчики событий для компонентов OpenFileDialog1, SaveFileDialog1 вызываются из соответствующих пунктов меню и аналогичны обработчикам, описанным для программы Блокнот. Для сохранения и загрузки файлов нужно описать глобальную строковую переменную FileName. Приложение может сохранять и загружать файлы формата BMP.

С помощью компонента ColorDialog1 можно выбрать цвет линии или заливки. Пункты меню Цвет позволяют выбрать цвет линии или заливки соответственно.

Пример 5.18
Пример 5.19

//Описание глобальных переменных

var gr: Graphics;

bm: Bitmap;

p_c: Pen;

s_b: SolidBrush;

c_f, c_b: Color;

w: decimal;

x1, y1, x2, y2: integer;

m_d : boolean;

F_N :string;

procedure Form1.Form1_Load(sender: Object; e: EventArgs);

begin

bm := new Bitmap(pictureBox1.Width, pictureBox1.Height);

pictureBox1.Image := (Image)(bm);

gr := Graphics.FromImage(pictureBox1.Image);

gr.Clear(Color.White);

gr := pictureBox1.CreateGraphics;

c_f := Color.Black;

p_c := new Pen(c_f, 1);

c_b := Color.White;

s_b := new SolidBrush(c_b);

end;

procedure Form1.numericUpDown1_ValueChanged(sender: Object; e: EventArgs);

begin

p_c.Dispose;

w := numericUpDown1.Value;

p_c := new Pen(c_f, (integer)(w));

end;

procedure Form1.button1_Click(sender: Object; e: EventArgs);

begin

colorDialog1.ShowDialog();

c_f := colorDialog1.color;

w := numericUpDown1.Value;

p_c.Dispose;

p_c := new Pen(c_f, (integer)(w));

panel1.BackColor := c_f;

end;

procedure Form1.button2_Click(sender: Object; e: EventArgs);

begin

colorDialog1.ShowDialog();

c_b := colorDialog1.color;

s_b.Dispose;

s_b := new SolidBrush(c_b);

panel2.BackColor := c_b;

end;

procedure Form1.pictureBox1_MouseDown(sender: Object; e: MouseEventArgs);

begin

m_d := true;

x1 := e.x; y1 := e.y;

end;

procedure Form1.pictureBox1_MouseMove(sender: Object; e: MouseEventArgs);

begin

if m_d then begin

gr.DrawLine(p_c, x1, y1, e.X, e.Y);

end;

//запомнить координаты для рисования следующего отрезка

x1 := e.X; y1 := e.Y

end;

procedure Form1.pictureBox1_MouseUp(sender: Object; e: MouseEventArgs);

begin

m_d := false;

end;

procedure Form1.toolStripMenuItem3_Click(sender: Object; e: EventArgs);

begin

gr := pictureBox1.CreateGraphics;

gr.Clear(c_b);

end;

procedure Form1.toolStripMenuItem4_Click(sender: Object; e: EventArgs);

begin

openFileDialog1.ShowDialog();

F_N := openFileDialog1.FileName;

Text := 'myPaint ' + F_N;

PictureBox1.Load(F_N);

end;

procedure Form1.toolStripMenuItem5_Click(sender: Object; e: EventArgs);

begin

saveFileDialog1.ShowDialog();

F_N := saveFileDialog1.FileName;

PictureBox1.Image.save(F_N);

Text := 'myPaint ' + F_N;

end;

procedure Form1.numericUpDown1_ValueChanged (sender: Object; e: EventArgs);

begin

p_c.Dispose;

w := numericUpDown1.Value;

p_c := new Pen(c_f, (integer)(w));

end;

procedure Form1.toolStripMenuItem7_Click(sender: Object; e: EventArgs);

begin

close;

end;

Создание приложения «Калькулятор»

Создание калькулятора начнем с конструирования формы. На ней нужно разместить: поле TextBox для ввода/ вывода чисел, 10 кнопок с цифрами, 4 кнопки с арифметическими действиями, кнопку «=» и кнопку «С» — очистить (пример 5.22).

При нажатии на кнопку с цифрой программа должна дописать эту цифру к числу в поле TextBox. При нажатии на кнопку с арифметическим действием нужно запомнить число, которое в данный момент находится в поле TextBox, и очистить поле для ввода второго числа. Числа будем хранить в двух переменных n1, n2 типа integer. Знак операции будем хранить в переменной znak типа char. Переменные описываются как глобальные. При нажатии на кнопку «=» выполняется арифметическое действие и выводится результат.

Кнопки могут содержать рисунок на поверхности (например, изображения с цифрами). Свойство для размещения рисунка — BackgroundImage.

Установить значение FixedSingle для свойства FormBorderStyle формы. В этом случае граница формы не позволит менять ее размеры. Коды процедур-обработчиков приведены в примере 5.23.

Для каждой кнопки на форме нужно создать обработчик события Click.Обработчики событий для всех цифровых кнопок будут идентичны.

Обработчики для кнопок арифметических действий будут отличаться только значением запоминаемой операции. Основные вычисления происходят в обработчике кнопки «=». Преобразуем в число n2 значение поля Edit и выполняем арифметическую операцию в зависимости от значения переменной znak. После этого обнуляем переменные.

В обработчике кнопки «С» (от англ. clear — очистить) происходит обнуление переменных и очистка поля Edit.Созданный калькулятор имеет большое количество ограничений в своей работе, поскольку рассчитан на вычисления только с натуральными числами.

Пример 5.22
Пример 5.23

//описание глобальных переменных

var n1, n2: integer; znak: char;

procedure Form1.button1_Click (sender: Object; e: EventArgs);

begin

//приписывание цифры к числу

TextBox1.Text:=TextBox1.Text+'1';

end;

procedure Form1.button9_Click (sender: Object; e: EventArgs);

begin

//приписывание цифры к числу

TextBox1.Text:=TextBox1.Text+'2';

end;

Для остальных цифровых кнопок нужно изменить только '1' на соответствующую цифру.

procedure Form1.button12_Click (sender: Object; e: EventArgs);

begin

n1 := StrToInt(TextBox1.Text);

//запоминание знака операции

znak := '+';

TextBox1.Clear;

end;

Для остальных кнопок со знаками арифметических действий нужно изменить только '+' на соответствующий знак.

procedure Form1.button16_Click

(sender: Object; e: EventArgs);

begin

n2 := StrToInt(TextBox1.Text);

case znak of

'+':TextBox1.Text:=IntToStr(n1+n2);

'-':TextBox1.Text:=IntToStr(n1-n2);

'*':TextBox1.Text:=IntToStr(n1*n2);

'/':TextBox1.Text:=IntToStr(n1 div n2);

end;

n1 := 0; n2 := 0;

znak := ' ';

end;

procedure Form1.button15_Click (sender: Object; e: EventArgs);

begin

TextBox1.Clear;

n1 := 0; n2 := 0;

znak :=' ';

end;

Упражнения

  1. Дополните проект Блокнот следующими возможностями:

    1. Пункт меню Сохранить файл заменить двумя: Сохранить и Сохранить как...

    2. Добавить Пункт меню Переносить по словам.

    3. Добавьте возможность управления полосами прокрутки: установить горизонтальную, вертикальную, обе.

    4. *Добавьте следующие диалоги: Параметры страницы, Печать, Поиск, Замена и соответствующие пункты в меню.

    5. Добавьте контекстное меню для управления компонентом Memo. Команды контекстного меню, дублирующие команды основного меню, должны вызывать те же обработчики.

    6. Предложите свои возможности.

  2. Для проекта Графический редактор добавьте следующие возможности:

    1. Рисовать отрезки, овалы и прямоугольники.

    2. Предложите свои возможности.

  3. Для проекта Калькулятор добавьте следующие возможности:

    1. Возможность работы с вещественными числами.

    2. Возможность вычислять значения функций: извлечение квадратного корня, тригонометрические функции (для градусов и радиан) и др.

    3. *Возможность перевода чисел в другие системы счисления.