4825

Создание первой программы в языке Turbo Pascal

Лекция

Информатика, кибернетика и программирование

Создание первой программы. Цель: Показать студентам управление программой при помощи меню. Задачи: Воспитательная: повторение уже изученного языка программирования TurboPascal. Учебная: научить создавать программы. Развивающая: развитие внимат...

Русский

2012-11-27

94.5 KB

2 чел.

Создание первой программы.

Цель:

Показать студентам управление программой при помощи меню.

Задачи:

Воспитательная: повторение уже изученного языка программирования Turbo Pascal.

Учебная: научить создавать программы.

Развивающая: развитие внимательности.

План занятия.

  1.  Организационный момент.
  2.  Изучение нового материала.
  3.  Контрольные вопросы.
  4.  Резюме.
  5.  Домашнее задание.

Изучение нового материала.

   Продолжим создание программ на основе уже знакомой программы. Для этого используем не визуальные компоненты TMainMenu и TPopupMenu. Измененная форма с этими компонентами показана на рисунке.

   Как видно из рисунка, на форме добавились еще два компонента. Причем эти компоненты можно располагать где угодно, так как они при компиляции и запуске программы будут не видны.

   Компонент TMainMenu предназначен для добавления к программе главного меню, без которого не обходится практически ни одно из приложений. Чтобы добавить к программе меню, надо выбрать на вкладке Standard компонент TMainMenu. Меню создается с помощью специального редактора. Редактор меню вызывается двойным щелчком на объекте MainMenu1. Первоначально меню пустое. В Инспекторе объектов надо открыть категорию Localizable (настраиваемые) и в свойстве Caption (заголовок) ввести название первого пункта, например &Файл и нажать кнопку Enter. Редактор меню переключится обратно в проектируемое меню, где появится первый пункт. Теперь опять нажать на клавишу Enter, и система переключится к заголовку Caption для нового пункта. В него вводится очередное название (&Вычислить)и нажать кнопку Enter. То же самое сделаем для кнопки Завершить. Когда меню подготовлено, редактор можно закрыть.  

   Чтобы выполнить вычисление, выберем пункт меню Вычислить. При щелчке на нем в Проектировщике форм будет создан соответствующий обработчик. Повторно писать ранее созданный код (метод Button1Click) не имеет смысла. Проще и правильнее вызвать метод Button1Click напрямую, передав ему параметр Sender.

   Обработчик события выглядит следующим образом.

   procedure TForm1.N2Click(Sender: TObject);

   begin

       Button1Click(Sender)

   end;

   То же самое сделаем и для кнопки Завершить.

   procedure TForm1.N3Click(Sender: TObject);

   begin

       Button2Click(Sender)

   end;

   Теперь создадим обработчик щелчка мыши на объекте. Такая возможность используется, когда важно просто среагировать на щелчок, не анализируя координаты указателя. Для этого обрабатывают событие OnClick, которое  чаще всего используют в таких объектах, как кнопка или переключатель, где знание точных координат указателя мыши не обязательно. Такой подход не всегда устраивает разработчика, поэтому в системе имеются еще два события: OnMouseDown (При нажатии кнопки мыши) и OnMouseUp (При отпускании кнопки мыши). Они содержат подробную информацию о параметрах щелчка: координаты указателя в рамках клиентской области объекта, на котором выполнен щелчок, тип щелчка (одинарный или двойной), какая кнопка мыши была нажата/отпущена и состояние системных клавиш SHIFT, ALT, CTRL.

   Контекстное меню, вызываемое в сделанном приложении по щелчку правой клавишей мыши, является удобной и стандартной возможностью программ. Компонент TPopupMenu (всплывающее меню) предназначен для создания контекстных меню. После того как компонент TPopupMenu размещен на форме, структура меню формируется таким же способом, как и основное меню. Единственное отличие состоит в том, что в контекстном меню не может быть нескольких раздело верхнего уровня, так как все пункты располагаются в одном вертикальном столбце.

   Дважды щелкнув на пункта Завершить, в обработчик события можно скопировать раннее созданный оператор завершения работы или ссылку на него.

   procedure TForm1.N5Click(Sender: TObject);

   begin

       Button2Click(Sender)

   end;

   То же самое сделаем для пункта Вычислить

   procedure TForm1.N4Click(Sender: TObject);

   begin

       Button1Click(Sender)

   end;

   Теперь осталось вызвать созданное меню из программы. Чтобы добавить в программу обработчик такого события, надо в Проектировщике форм выделить главную форму и в Инспекторе объектов на вкладке Events дважды щелкнуть в строке с надписью OnMouseUp. В теле данной процедуры необходимо активизировать контекстное меню PopupMenu1. Это осуществляется с помощью метода Popup() с двумя параметрами – координатами верхнего левого угла меню. Только указываются эти координаты в экранной системе отсчета, а не в границах клиентской части программы. Чтобы указать корректное значение координат, надо добавить к ним смещение, определяющее начало клиентской части формы. Пересчитать экранные координаты точки щелчка в координаты клиентской области можно с помощью метода GetClientOrigin. Эта функция обращается к стандартным функциям Windows и возвращает корректное значение смещения. Результирующее значение имеет тип TPoint (Координатная точка), представляющий собой запись из двух элементов; X и Y.

   procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;

                     Shift: TShiftState; X, Y: Integer);

   var P:TPoint;

   begin

       P:=GetClientOrigin;

       IF Button = mbRight then PopupMenu1.Popup(P.X+X,P/Y+Y);

   end;

   Тип TMouseButton является перечислимым типом и содержит значения mbLeft, mbRight, mbMiddle (признаки использования левой, правой и средней кнопок мыши). Тип TShiftState представляет собой множество: так как можно выполнить, например, двойной щелчок, одновременно удерживая нажатыми клавиши ALT и SHIFT, необходимо проверять комбинации допустимых значений.

   Полный листинг программы приведен

unit vrun1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, Menus;

type

 TForm1 = class(TForm)

   Edit1: TEdit;

   Edit2: TEdit;

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Button1: TButton;

   Button2: TButton;

   MainMenu1: TMainMenu;

   PopupMenu1: TPopupMenu;

   N1: TMenuItem;

   N2: TMenuItem;

   N3: TMenuItem;

   N4: TMenuItem;

   N5: TMenuItem;

   procedure Button1Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure N2Click(Sender: TObject);

   procedure N3Click(Sender: TObject);

   procedure N5Click(Sender: TObject);

   procedure N4Click(Sender: TObject);

   procedure FormMouseUp(Sender: TObject; Button: TMouseButton;

     Shift: TShiftState; X, Y: Integer);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

   dist : integer;

   t:     real;    

   min : integer;  

   sek : integer;   

   v: real;        

begin

   dist := StrToInt(Edit1.Text);

   t := StrToFloat(Edit2.Text);

   min := Trunc(t);  

   sek := Trunc(t*100) mod 100;

   v := (dist/1000) / ((min*60 + sek)/3600);

   label4.Caption := 'Дистанция: '+ Edit1.Text + ' м' + #13 +

                                'Время: ' + IntToStr(min) + ' мин ' +

                                IntToStr(sek) + ' сек ' + #13 +

                               'Скорость: ' + FloatToStrF(v,ffFixed,4,2) + ' км/ч';

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

       Form1.Close;

end;

procedure TForm1.N2Click(Sender: TObject);

begin

Button1Click(Sender)

end;

procedure TForm1.N3Click(Sender: TObject);

begin

Button2Click(Sender)

end;

procedure TForm1.N5Click(Sender: TObject);

begin

Button2Click(Sender)

end;

procedure TForm1.N4Click(Sender: TObject);

begin

Button1Click(Sender)

end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;

                 Shift: TShiftState; X, Y: Integer);

var P:TPoint;

begin

P:=GetClientOrigin;

IF Button = mbRight then PopupMenu1.Popup(P.X+X,P/Y+Y);

end;

end.

Контрольные вопросы

  1.  Для чего предназначен компонент TMainMenu? Как создается данное меню?
  2.  Для чего предназначен компонент TPopupMenu? Как создается данное меню?
  3.  Вызов контекстного меню. Метод вызова.

Резюме

  1.  Компонент TMainMenu предназначен для добавления к программе главного меню, без которого не обходится практически ни одно из приложений. Меню создается с помощью специального редактора
  2.  Компонент TPopupMenu (всплывающее меню) предназначен для создания контекстных меню. После того как компонент TPopupMenu размещен на форме, структура меню формируется таким же способом, как и основное меню.
  3.  Теперь осталось вызвать созданное меню из программы. Чтобы добавить в программу обработчик такого события, надо в Проектировщике форм выделить главную форму и в Инспекторе объектов на вкладке Events дважды щелкнуть в строке с надписью OnMouseUp. В теле данной процедуры необходимо активизировать контекстное меню PopupMenu1. Это осуществляется с помощью метода Popup() с двумя параметрами – координатами верхнего левого угла меню.

Домашнее задание

   Написать собственную программу.


 

А также другие работы, которые могут Вас заинтересовать

9065. АТТЕСТАЦИЯ РАБОЧИХ МЕСТ КАК ФАКТОР УЛУЧШЕНИЯ УСЛОВИЙ ТРУДА 1.12 MB
  Аттестация рабочих мест – один из основных видов контроля охраны труда. При аттестации рабочих мест наряду с оценкой технического уровня оснащения рабочих мест и их организации проводится анализ их соответствия требованиям охраны труда, как в части условий труда, так и в части проводимых технологических процессов, используемого оборудования и средств защиты
9066. Северин Боэций, Утешение философией (проблемы соотношения Провидения и свободы воли, времени и вечности, теодицея) 20.15 KB
  Северин Боэций, Утешение философией (проблемы соотношения Провидения и свободы воли, времени и вечности, теодицея) Утешение философией это последнее сочинение Боэция, написанное во время пребывания в тюрьме в ожидании казни. Трактат, отличающийся бо...
9067. Проблема соотношения веры и знания, теологии и философии в средневековой философии 15.11 KB
  Проблема соотношения веры и знания, теологии и философии в средневековой философии. О вере и знании: Философия на данном этапе находилась под исключительным воздействием религиозной догматики, к подавляющему влиянию которой прибавлялось наслед...
9068. Проблема универсалий и варианты ее решения 18.83 KB
  Проблема универсалий и варианты ее решения Универсалии-понятия, идеи. Универсалия (от лат. universalis - общий) - термин средневековой философии, обозначающий общие понятия. Проблема универсалий восходит к философским идеям Платона и Арист...
9069. Доказательства бытия Бога. Ансельм Кентерберийский и Фома Аквинский 18.15 KB
  Доказательства бытия Бога. Ансельм Кентерберийский и Фома Аквинский. Ансельм Кентерберийский (11 век) Он фактически повторяет формулу Августина. Но если для Августина знание было не обязательно, то для Ансельма вера всегда стремится к пониманию. Что...
9070. Схоластическая система Фомы Аквинского 17.39 KB
  Схоластическая система Фомы Аквинского Фома Аквинский - ангельский доктор. Монах доминиканского ордена. Ему необходимо было что-то противопоставить линии Августина. Его целью было примирить Аристотеля с христианством. И ему это с блеском удало...
9071. Трактовка человека в философии Пико дела Мирандолы 21.54 KB
  Трактовка человека в философии Пико дела Мирандолы По произведению Речь о достоинстве человека. Прежде всего обращаем внимание на эпиграф Человек - свободный творец самого себя. Первое о чем рассказывает- в писании арабов некий Абдалла Сарацин...
9072. Никколо Макиавелли Государь 32.76 KB
  Никколо Макиавелли Государь Здесь фактически просто мой краткий пересказ произведения по главам. Глава I. Скольких видов бывают государства и как они приобретаются. Есть либо республики, либо государства, управляемые единовластно. Последние могут бы...
9073. Философия Рене Декарта (смысл и назначение философии, принцип методологического сомнения, сущность дедуктивного метода, учение о врожденных идеях.) 17.96 KB
  Философия Рене Декарта (смысл и назначение философии, принцип методологического сомнения, сущность дедуктивного метода, учение о врожденных идеях.) Рене Декарт (1596- 1650).Его философия- рационалистическая. Декарт- основоположник рационализма. Прот...