Методические указания для выполнения практических работ по мдк 01. 02 Разработка прикладного программного обеспечения для студентов специальности 230115 Программирование в компьютерных системах




страница1/11
Дата30.08.2016
Размер1.43 Mb.
  1   2   3   4   5   6   7   8   9   10   11


Министерство образования и науки Челябинской области

государственное бюджетное образовательное учреждение

среднего профессионального образования

(среднее специальное учебное заведение)

«Южно-Уральский многопрофильный колледж»

Методические указания

для выполнения практических работ

по МДК 01. 02 Разработка прикладного программного обеспечения

для студентов специальности 230115 Программирование в компьютерных системах.

2014


Одобрена

цикловой комиссией

Председатель комиссии

_____________Л.В.Сухорослова




Составлена в соответствии с Федеральным государственными требованиями к уровню подготовки выпускника по специальности:230115 Программирование в компьютерных системах.





Заместитель директора по инновациям и информатизации

___________И.Н. Тихонова



Автор:

Воропанова И.О. – преподаватель Южно-Уральского государственного колледжа

Рецензент:

Кулиненко И.М. – методист Южно-Уральского многопрофильного колледжа

Редактор:




Содержание

Введение 7

Урок 1. Основные принципы ООП. Классы и обекты. 8

Урок 2. Иерархия базовых классов 21

Урок 3. Базовые классы элементов управления 28

Урок 4. Свойства компонентов. События мыши и клавиатуры 38

Урок 5. Обработка событий. Динамическое изменение свойств 48

Урок 6. Компоненты ввода-вывода и редактирования. 50

Урок 7. Компоненты для работы со списками 62

Урок 8 Работа с таблицами 70

Урок 9. Кнопочные компоненты, переключатели 81

Урок 10. Работа с кнопками и переключателями 89

Урок 11. Контейнеры 94

Урок 12. Инструментальные панели 102

Урок 13 Формы 109

Урок 14. Невизуальные компоненты 120

Урок 15. Главное и контекстное меню 130

Урок 16. Класс Exception. Стандартные классы исключений.

Операторы обработки исключений. 141

Урок 17 Отображение графики на канве Canvas 153

Урок 18 Полоса состояния StatusBar 167

Урок 19 Горячие клавиши-HotKey 176

Урок 20 Воспроизведение немых видео клипов — компонент Animate 184

Литература 190


Аннотация

Методические указания предназначены для студентов специальности 230115 «Программирование в компьютерных системах» при выполнении практических работ по МДК 01. 02. Разработка прикладного программного обеспечения



Целью выполнения данных практических работ является:

-закрепление теоретических знаний по объектно-ориентированному программированию;

- развитие и закрепление студентами навыков программирования в среде Delphi;

-получение навыков работы для конструирования пользовательского интерфейса в Delphi;

-закрепление навыков работы с офисными программами;

-закрепление навыков работы с методической и справочной литературой.

Перед выполнения работ студент отвечает на вопросы для контроля. Защищает каждую практическую работу.

При оценке знаний студента необходимо учитывать качество выполнения студентом заданий и ответов на вопросы для контроля. Для этого введены следующие критерии оценки:




Объем выполненного задания

Оценка

Полное выполнение работы с полными ответами на все теоретические и практические вопросы (90%-100%)

Отлично

Выполнение работы с полными ответами на вопросы и частичное выполнение практических работ (80%-90%)

Хорошо

Выполнение работы без ответов на вопросы (70%-80%)

Удовлетворительно

Частичное выполнение работы (ниже 70%)

Неудовлетворительно


Введение


Учебно-методическое пособие представляет собой комплексный набор заданий по освоению МДК Прикладное программирование. Задания предусмотрены для работы в интегрированной среде Delphi.

Пособие рассчитано на 90 часов.

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

В пособии предусмотрены два вида заданий:



http://saliyna.narod.ru/images/voprosik.png-теоритеческие вопросы, ответы на которые неоходимо найти в пособии и сохранить в текстором файле.

http://saliyna.narod.ru/images/mancomp.png-практические задания, выполняются в интегрированной среде Delphi. Проекты сохраняются в папке соответструющей уроку, а скрин-шоты программного кода и результат выполнения программы необходимо сохранить в текстовый файл, созданный для ответов на вопросы по данному уроку.
Желаем успеха в работе.

Урок 1. Принципы ООП. Классы и объекты.

ПРИРОДА ОБЪЕКТА


Об объектах можно думать как о существах, которые «живут» в вашей программе и коллективно решают некоторую прикладную задачу. Вы создаете этих существ, распределяете между ними обязанности и устанавливаете правила их взаимодействия.

В общем случае каждый объект «помнит» необходимую информацию, «умеет» выполнять некоторый набор действий и характеризуется набором свойств.

То, что объект «помнит», хранится в его полях. То, что объект «умеет делать», реализуется в виде его внутренних процедур и функций, называемых методами. Свойства объектов аналогичны свойствам, которые мы наблюдаем у обычных предметов. Значения свойств можно устанавливать и читать. Программно свойства реализуются через поля и методы.

Пример:


Объект «кнопка» имеет свойство «цвет». Значение цвета кнопка запоминает в одном из своих полей. При изменении значения свойства «цвет» вызывается метод, который перерисовывает кнопку.

Этот пример позволяет сделать важный вывод: свойства имеют первостепенное значение для программиста, использующего объект. Чтобы понять суть и назначение объекта, вы обязательно должны знать его свойства, иногда — методы, очень редко — поля (объект и сам знает, что с ними делать).


ОБЪЕКТЫ И КОМПОНЕНТЫ


Компоненты в Delphi — это особые объекты, которые являются строительными кирпичиками среды визуальной разработки и приспособлены к визуальной установке свойств. Чтобы превратить объект в компонент, первый разрабатывается по определенным правилам, а затем помещается в Палитру Компонентов. Конструируя приложение, вы берете компоненты из Палитры Компонентов, располагаете на форме и устанавливаете их свойства в окне Инспектора Объектов. Внешне все выглядит просто, но чтобы достичь такой простоты, потребовалось создать механизмы, обеспечивающие функционирование объектов-компонентов уже на этапе проектирования приложения! Все это было придумано и блестяще реализовано в среде Delphi. Таким образом, компонентный подход значительно упростил создание приложений с графическим пользовательским интерфейсом и дал толчок развитию новой индустрии компонентов.

КЛАССЫ ОБЪЕКТОВ


Каждый объект всегда принадлежит некоторому классу. Класс — это обобщенное (абстрактное) описание множества однотипных объектов. Объекты являются конкретными представителями своего класса, их принято называть экземплярами класса. Например, класс СОБАКИ — понятие абстрактное, а экземпляр этого класса МОЙ ПЕС БОБИК — понятие конкретное.

ТРИ КИТА ООП


Весь мир ООП держится на трех китах: инкапсуляции, наследовании и полиморфизме.

Инкапсуляция. Наблюдаемое в объектах объединение данных и операций в одно целое было обозначено термином инкапсуляция. Применение инкапсуляции сделало объекты похожими на маленькие программные модули и обеспечило сокрытие их внутреннего устройства. Для объектов появилось понятие интерфейса, что значительно повысило их надежность и целостность.

Наследование. Этот простой принцип означает, что если вы хотите создать новый класс, лишь немногим отличающийся от того, что уже существует, то нет необходимости в переписывании заново всех полей, методов и свойств. Вы объявляете, что новый класс является потомком (или дочерним классом) имеющегося класса, называемого предком (или родительским классом), и добавляете к нему новые поля, методы и свойства. Иными словами добавляется то, что нужно для перехода от общего к частному. Процесс порождения новых классов на основе других классов называется наследованием. Новые классы имеют как унаследованные признаки, так и, возможно, новые. Например, класс СОБАКИ унаследовал многие свойства своих предков — ВОЛКОВ.

Полиморфизм. Означает, что в производных классах вы можете изменять работу уже существующих в базовом классе методов. При этом весь программный код, управляющий объектами родительского класса, пригоден для управления объектами дочернего класса без всякой модификации. Например, вы можете породить новый класс кнопок с рельефной надписью, переопределив метод отрисовки кнопки. Новую кнопку можно «подсунуть» вместо стандартной в какую-нибудь подпрограмму, вызывающую отрисовку кнопки. При этом подпрограмма «думает», что работает со стандартной кнопкой, но на самом деле кнопка принадлежит производному классу и отображается в новом стиле.


КЛАССЫ


Для поддержки ООП в язык Object Pascal введены объектные типы данных, с помощью которых одновременно описываются данные и операции над ними. Объектные типы называют классами, а их экземпляры — объектами.

Классы объектов определяются в секции type глобального блока. Описание класса начинается словом class и заканчивается словом end. По форме объявления классы похожи на обычные записи, но помимо полей данных могут содержать объявления пользовательских процедур и функций. Такие процедуры и функции обобщенно называют методами, они предназначены для выполнения над объектами различных операций.


Пример объявления класса:


type
TDiskGauge = class              
 {измеритель дискового пространства}
DriveLetter: Char;              
 {буква дискового накопителя}
PercentCritical: Integer;        
{критический процент свободного пространства} 
function GetPercentFree: Integer;

procedure CheckStatus; 


end;

Заголовки методов, следующие за списком полей, играют роль предварительных (forward) объявлений. Программный код методов помещается ниже определения класса и будет приведен позже.

Класс обычно описывает сущность, моделируемую в программе.

Например, класс TDiskGauge описывает измеритель дискового ресурса. Класс содержит два поля: DriveLetter — буква находящегося под наблюдением накопителя, и PercentCritical — процент свободного пространства на диске, с которым работает программа. Когда объем свободных ресурсов снижается до этого порога, пользователю выдается звуковое предупреждение. Функция GetPercentFree определена как метод работы над любым объектом класса TDiskGauge и возвращает процент свободного пространства на диске. Процедура CheckStatus служит для проверки состояния ресурса и выдачи звукового предупреждения.

Обратите внимание, что приведенное выше описание является не чем иным, как декларацией интерфейса для управления объектами класса TDiskGauge. Реализация методов GetPercentFree и CheckStatus отсутствует, но для создания и использования экземпляров класса она пока и не нужна. В этом как раз и состоит сила инкапсуляции, Которая делает объекты аналогичными программным модулям. Для использования модуля необходимо изучить лишь его интерфейсную часть, раздел реализации для этого изучать не требуется. Поэтому дальше от описания класса мы перейдем не к реализации методов, а к созданию на их основе объектов.

ОБЪЕКТЫ


Чтобы от описания класса перейти к объекту, следует выполнить соответствующее объявление в секции var:

var DiskGauge: TDiskGauge;

При работе с обычными типами данных этого объявления было бы достаточно для получения экземпляра типа. Однако объекты в Delphi являются динамическими данными, т.е. распределяются в «куче» (heap). Поэтому переменная DiskGauge — это просто ссылка на экземпляр объекта, которого физически еще не существует. Чтобы сконструировать объект класса TDiskGauge и связать с ним переменную DiskGauge, нужно в тексте программы поместить следующий оператор (statement):

DiskGauge: = TDiskGauge.Create;

Create — это так называемый конструктор объекта; он всегда присутствует в классе и служит для создания и инициализации экземпляров. К сведению профессионалов заметим, что в памяти выделяется место только для полей объекта. Методы, так же как и обычные процедуры и функции, помещаются в область кода программы; они умеют работать с любыми экземплярами своего класса и в памяти никогда не дублируются,


Использование объекта


После создания объект можно использовать в программе — читать и устанавливать его поля, вызывать методы. Доступ к полям и методам объекта происходит с помощью уточненных имен, например:

DiskGauge.DriveLetter: = 'С';

DiskGauge. PercentCritical: = 10;

DiskGauge.CheckStatus;

Допустимо использование оператора with, например:

with DiskGauge do 
begin
DriveLetter: = '
С';

PercentCritical: = 10;

CheckStatus; 
end;

Если наступает время, когда объект становится не нужен, в программе, он должен быть удален вызовом специального метода Destroy, например:



DiskGauge.Destroy;

Destroy — это так называемый деструктор объекта; он присутствует в классе наряду с конструктором и служит для удаления объекта из динамической памяти. После вызова деструктора переменная DiskGauge становится несвязанной и не должна использоваться для доступа к полям и методам уже несуществующего объекта. Чтобы отличать в программе связанные объектные переменные от несвязанных, последние следует инициализировать значением nil. Например, в следующем фрагменте обращение к деструктору Destroy выполняется только в том случае, если объект реально существует.



DiskGauge: = nil;

if DiskGauge <> nil then DiskGauge.Destroy;

Вызов деструктора для несуществующих объектов недопустим и при выполнении программы приведет к ошибке. Чтобы избавить программистов от лишних ошибок, в объекты ввели предопределенный метод Free, который следует вызывать вместо деструктора. Метод Free сам вызывает деструктор Destroy, но только в том случае, если значение объектной переменной не равно nil. Поэтому последнюю строчку в приведенном выше примере можно переписать следующим образом:

DiskGauge.Free;

Значение одной объектной переменной можно присвоить другой. При этом объект не копируется в памяти, а вторая переменная просто связывается с тем же объектом, что и первая:

Var DiskGauge1, DiskGauge2: TDiskGauge;

begin
{Переменные DiskGauge1 и DiskGauge2 не связаны с объектом}


DiskGauge1:=TDiskGauge.Create
;{ DiskGauge1 связана с объектом, а DiskGauge2 — нет}

DiskGauge2: = DiskGauge1; {Обе переменные связаны с одним объектом} 
DiskGauge2.Free;
 {Объект удален, переменные DiskGauge1 и DiskGauge2 с ним не связаны}

end;




http://saliyna.narod.ru/images/voprosik.pngЗадание: Ответьте на вопросы.

  1. Что такое класс?

  2. Что такое объект?

  3. Для чего нужны поля в объекте?

  4. Что представляют собой методы объекта

  5. Что называют экземплятом класса?

  6. Опишите класс СОБАКИ.

  7. Перечислите три основных принципа ООП.

  8. Описать каждый из принципов ООП.

  9. Как описывается класс?

  10. Что называют конструктором и деструктором объекта?

  11. Как объявляется объект?

  12. Как работать с объектом, пример.


http://saliyna.narod.ru/images/mancomp.pngЗадание 1. В момент создания формы должна динамически создаваться кнопка в левом верхнем углу формы. При нажатии на кнопку должно выдаваться сообщение «Проверка».

Ход решения:

  1. Создайте новое приложение

  2. Щелкните дважды по форме. Откроется заготовка события onCreate для формы. В тело процедуры внесите следующий код:

MyButton:=TButton.Create(Form1);//Создаем новую кнопку MyButton.Parent:=Form1;//Устанавливаем расположение новой кнопки

MyButton.Top:=5;

MyButton.Left:=10;

MyButton.Width:=100;

MyButton.Height:=25;

MyButton.Caption:='Новая кнопка';

MyButton.OnClick:=MyAction;

  1. Опишите в разделе Var переменную (объект)

MyButton: TButton;

  1. Добавьте процедуру MyAction.

procedure TForm1.MyAction(Sender: TObject);

begin
ShowMessage('
Проверка');

end;

  1. В разделе private класса формы внесите объявление этой процедуры.


{ Private declarations }


procedure MyAction(Sender:TObject);

public

Запустите программу. На форме появится кнопка, при нажатии на которую выдастся сообщение «Проверка».



http://saliyna.narod.ru/images/mancomp.pngЗадание 2. Добавить в программу из задания 1 динамическое создание компонента Edit рядом с кнопкой.

http://saliyna.narod.ru/images/mancomp.pngЗадание 3. При нажатии на кнопку "Создать объект" программа должна будет создать круг со случайными параметрами (размер, цвет) и поместить его в произвольном месте панели. При нажатии на кнопку "Удалить объект" программа должна выполнить два действия:

1.удалить изображение объекта с экрана

2.освободить память, выделенную объекту конструктором.

Ход работы

Начните новый проект в Delphi и сохраните его в отдельной папке под названиемFigures”. Разместите на форме компоненты, показанные на рисунке.




http://saliyna.narod.ru/oop/lesson1/untitled.jpg
Созданные объекты будем хранить в списке TList, т.к. мы не знаем заранее, сколько объектов создадим (это массив, размер которого увеличивается в процессе заполнения). В его свойстве Items хранятся указатели типа Pointer, поэтому элементами списка могут быть объекты любого типа.

Вставьте в модуль объявление переменной List типа TList:



Var

Form1: TForm1;

List : TList;

Implementation

{$R *.DFM} 

Поскольку список является классом Delphi, то его (список) тоже необходимо создать по общим правилам. Для этого дважды щелкните по пустому месту формы, таким образом вы создадите обработчик события onCreate для формы. Добавьте в него строку, выделенную жирным шрифтом: 



procedure TForm1.FormCreate(Sender: TObject);

begin

List:=TList.Create;

end;

Количество элементов в списке фиксируется в свойстве Count. Добавление нового объекта в список вне зависимости от его типа производится методом Add (при этом Count увеличивается на единицу), удаление – методом Delete(при этом Count уменьшается на единицу). Однако нужно помнить, что элементами списка являются указатели, следовательно, удаление указателя из списка не удаляет сам объект из памяти. Поэтому при закрытии формы, прежде чем удалить список, следует освободить память, занятую созданными объектами. 

Щелкните дважды по кнопке Button1 («Создать объект») и добавьте в созданный Delphi шаблон строки, отмеченные ниже жирным шрифтом: 

procedure TForm1.Button1Click(Sender: TObject);

var AObj : TShape;  delta : word;

begin 
  AObj:=TShape.Create(Panel1); // Создаем объект AObj типа TShape на панели Panel1
  AObj.Parent:=Panel1; // Указываем ссылку на объект-владелец (место «рождения»)
AObj.Shape:=stCircle  // форма фигурыкруг  ; 
  delta:=10+random(50);   // диаметр круга - случайное число от 10 до 60 

  AObj.Width:=delta; 
  AObj.Height:=delta; 
  // "разыгрываем" место круга внутри панели
  AObj.Left:=random(Panel1.Width-AObj.Width); 
  AObj.Top:=random(Panel1.Height-AObj.Height); 
  // задаем цвет круга
  AObj.Brush.Color:=RGB(random(256),random(256),random(256));
  // добавляем созданную фигуру в список
  List.Add(AObj); 
end;

 

http://saliyna.narod.ru/images/mancomp.pngЗадание 4. Продолжение проекта «Фигуры» 

Щелкните дважды по кнопке Button2 («Удалить объект») и добавьте в созданный Delphi шаблон строки, отмеченные ниже жирным шрифтом: 

procedure TForm1.Button2Click(Sender: TObject);

var Temp: TShape;

begin

  with List do

  if Count>0 then begin

    Temp:=Items[Count-1]; // В Temp – ссылка на последний созданный объект



Temp.Free;

Delete(Count-1);

end; 
end;

Щелкните дважды по кнопке Button3 («Удалить все») и добавьте в созданный Delphi шаблон строки, отмеченные ниже жирным шрифтом: 



procedure TForm1.Button3Click(Sender: TObject);

var Temp: TShape;

begin

with List do

while Count>0 do begin

Temp:=Items[Count-1];

Temp.Free;

Delete(Count-1);

end; 
end;

Щелкните по пустому месту формы, перейдите на вкладку Events инспектора, щелкните дважды по полю ввода события OnCloseи добавьте в созданный Delphi шаблон строки, отмеченные ниже жирным шрифтом: 



procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin 

Button3.Click;  // запускаем процедуру удаления объектов List.Free;  //удаляем список указателей

end;

И, наконец, поскольку фигуры на панели будут возникать случайным образом, необходимо будет вызвать один раз в программе процедуру Randomize, которая подготавливает к работе датчик случайных чисел. Можно сделать это в событии OnCreate формы, но мы для разнообразия используем секцию initialization нашего модуля. Для этого поместим в самый конец модуля перед end с точкой следующие строки:

…………………..
initialization 
  randomize;
end.

На рисунке приведен примерный вид окна программы после запуска.


http://saliyna.narod.ru/oop/lesson1/untitled2.jpg
http://saliyna.narod.ru/images/mancomp.pngЗадание 5. Переделать программу так, чтобы кроме кругов на панели появлялись фигуры и другой формы.

Урок 2. Иерархия базовых классов

Все классы библиотеки визуальных компонентов произошли от группы базовых классов, которые лежат в основе иерархии VCL. Самый общий предок компонентов — это класс TObject, инкапсулирующий простейший объект. Как известно, каждый объект наследует свойства и методы родительского класса. К объекту можно добавить новые свойства и методы, но нельзя удалить унаследованные. Объект-наследник в свою очередь может стать родительским для нового класса, который унаследует возможности всех своих предков. 



Иерархия базовых классов 

В основе всего многообразия классов и компонентов, используемых в Delphi, лежат всего лишь пять базовых классов. Они обеспечивают выполнение основных функций любого объекта — будь это стандартный компонент VCL или специализированный объект, выполняющий некоторые операции в приложении. 


http://saliyna.narod.ru/oop/lesson5/lecture_clip_image002.jpg
Благодаря механизму наследования свойств и методов, потомки базовых классов умеют "общаться" друг с другом; работают в среде разработки, взаимодействуя с Палитрой компонентов и Инспектором объектов; распознаются операционной системой как элементы управления и окна. 

Класс TObject

Класс TObject является родоначальником всей иерархии использующихся в Delphi классов VCL. Он реализует функции, которые обязательно будет выполнять любой объект, который может быть создан в среде разработки.

В первую очередь — это создание экземпляра объекта и его уничтожение. Любой объект выполняет эти две операции в обязательном порядке. Обычно разработчик даже не задумывается о том, как объект будет создан и что необходимо сделать для его корректного уничтожения. Компоненты VCL создаются и освобождают занимаемые ресурсы автоматически. 

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

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

Метод


class function Classlnfo: Pointer;

возвращает указатель на таблицу информации времени выполнения (RTTI). Эта информация используется в среде разработки и в приложении.

Функция

class function ClassName: ShortString;

возвращает имя типа объекта, которое может быть использовано для идентификации.

Метод 

class function ClassNameIs(const Name: string): Boolean;

позволяет определить, является ли данный объект того типа, имя которого передано в параметре Name. В случае положительного ответа функция возвращает True.

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

Метод procedure Dispatch(var Message); virtual; осуществляет обработку сообщений, поступающих объекту. Он определяет, сможет ли объект обработать сообщение при помощи собственных обработчиков событий. В случае отсутствия таких методов сообщение передается аналогичному методу Dispatch класса-предка (если он есть). Класс TObject имеет предопределенный обработчик событий: procedurе DefaultHandler(var Message); virtual;

Класс TObject имеет еще несколько методов, которые в основном применяются для взаимодействия объекта со средой разработки. В целом класс TObject может служить для создания на его основе некоторых простых классов для использования в приложениях.

Класс TPersistent происходит непосредственно от класса TObject. Он обеспечивает своих потомков возможностью взаимодействовать с другими объектами и процессами на уровне данных. Его методы позволяют передавать данные в потоки, а также обеспечивают взаимодействие объекта с Инспектором объектов. "Persistent" в переводе с английского означает "устойчивый", "постоянный". Что же такого постоянного в одноименном классе? Ответ таков: виртуальный метод procedure Assign (Source: TPersistent);

Этот важнейший метод осуществляет копирование содержимого одного объекта (source) в другой (self, т.е. в объект, вызвавший метод Assign). При этом объект-получатель остается самим собой, чего нельзя достигнуть, используя простое присваивание переменных объектного типа:

FirstObject:= SecondObject;

Ведь в этом случае указатель на одну область адресного пространства, содержащую экземпляр класса (объект), замещается указателем на другую область адресного пространства, содержащую другой объект. Метод Assign позволяет продублировать объект — присвоить одному объекту значения всех свойств другого. При этом объекты не обязательно должны быть одного и того же класса; более того, они не обязательно должны находиться в отношениях "родитель-потомок".

Класс TPersistent никогда не используется напрямую, от него порождаются потомки, которые должны уметь передавать другим объектам значения своих свойств, но не являться при этом компонентами.

Класс TComponent

Класс TComponent является предком всех компонентов VCL. Он используется в качестве основы для создания невизуальных компонентов и реализует основные механизмы, которые обеспечивают функционирование любого компонента. Механизмы, реализованные в классе TComponent, обеспечивают взаимодействие компонента со средой разработки, главным образом с Палитрой компонентов и Инспектором объектов. Благодаря возможностям этого класса, компоненты начинают работать на форме проекта уже на этапе разработки. В нем появляются первые свойства, которые отображаются в Инспекторе объектов.




Свойство (метод)

Описание

property Name: TComponentName;

свойство содержит имя экземпляра компонента, которое используется для идентификации компонента в приложении

property Tag: Longint;

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

Для компонентов существует своя иерархия, поэтому в классе введен механизм учета и управления компонентами, для которых данный компонент является владельцем. Свойства и методы, которые отвечают за управление, приведены в таблице ниже.



Свойство (метод)

Описание

Property Components [Index: Integer]: TComponent ;

Содержит индексированный список указателей всех компонентов, для которых данный компонент является владельцем (owner)

Property ComponentCount : Integer;

Число подчиненных компонентов

property Owner: TComponent;

Указывается, какой компонент является владельцем данного

property ComponentIndex: Integer;

Индекс данного компонента в списке владельца

Procedure InsertComponent (AComponent: TComponent) ;

Вставляет компонент AComponent в список

Procedure RemoveComponent (AComponent : TComponent);

Удаляет компонент AComponent из списка

Procedure FindComponent (AName: string): TComponent;

Осуществляет поиск компонента по имени AName

procedure DestroyComponents;

Предназначен для уничтожения всех компонентов, подчиненных данному

Очень важное свойство property ComponentState: TComponentState; дает представление о текущем состоянии компонента. Состояние может измениться в результате получения компонентом некоторого сообщения, действий разработчика, выполнения акции и т. д. Это свойство активно используется средой разработки.

Определение принадлежности к классу и приведение типов объектов

Оператор is

Чтобы определить ссылка на объект какого именно типа находится в той или иной переменной, используется оператор is, проверяющий принадлежность объекта к заданному классу. Оператор is возвращает логическое значение (True или False) и используется в следующем виде:



<Ссылка на объект> is <Название класса>

Оператор as

Для указания компилятору о том, что объект следует рассматривать как экземпляр какого-либо конкретного класса, предусмотрен оператор as, используемый следующим образом:

<Ссылка на объект> as <Название класса> 

В результате такого указания Delphi пытается обращаться к объекту, на который указывает ссылка, как к экземпляру заданного класса.



http://saliyna.narod.ru/images/voprosik.pngЗадание Ответьте на вопросы:

  1. Зарисуйте структуру 5 базовых классов.

  2. Какие функции реализует класс TObject?

  3. Заполните таблицу: Методы класса TObject.

    метод

    Действие метода

    …..

    ….

  4. Опишите действие виртуального метода

  5. procedure Assign (Source: TPersistent);

  6. Для чего используют класс TComponent?

  7. Для чего используют оператор is?

  8. Для чего используют оператор as?

http://saliyna.narod.ru/images/mancomp.pngЗадание 1: Все установленные на форме компоненты TCheckBox установить в положение checked.

Ход решения:

Установите на форме несколько (5) компонентов CheckBox и кнопку. В обработчик события нажатия кнопки добавьте следующий код:



http://saliyna.narod.ru/oop/lesson5/lecture_clip_image003.png 

http://saliyna.narod.ru/images/mancomp.pngЗадание 2: Составить программу, которая будет при установке флажка в компоненте CheckBox делать недоступными все кнопки формы.

Урок 3. Базовые классы элементов управления

Напомним, иерархия базовых классов имеет следующий вид:




http://saliyna.narod.ru/oop/lesson6/lecture_clip_image001.png
Рисунок 1

Визуальные и невизуальные компоненты

Класс TComponent обеспечивает взаимодействие компонентов между собой и с визуальным построителем, но не предоставляет каких-либо возможностей для взаимодействия компонентов с пользователем и визуального отображения компонентов на экране. Таким образом, TComponent предназначен не для прямого использования в программе, а исключительно для целей построения других компонентов на его основе с помощью стандартных механизмов наследования классов.




Компоненты:

Невизуальные компоненты

не имеющие представления на экране, и не взаимодействующие с пользователем



Визуальные компоненты, называемые также элементами управления, имеющие визуальное представление и возможность взаимодействия с пользователем

Диалоговые компоненты, которые не имеют визуального представления, но могут его приобретать для временного взаимодействия с пользователем

Невизуальные компоненты

Невизуальные компоненты наследуются напрямую от класса TComponent и поддерживают все его возможности взаимодействия со средой разработки, например, сохранение свойств и связей с событиями в файлы формы и их восстановление при последующем открытии проекта.

Невизуальные компоненты не имеют представления на экране во время выполнения программы, в процессе разработки отображаются на формах в виде иконок, сопоставленных им в Палитре компонентов, и предназначены для добавления в программу поддержки некоторой технологии. В качестве примера можно привести наборы компонентов для работы с базами данных с использованием механизмов доступа BDE или ADO, или набор компонентов, обеспечивающих взаимодействие программных продуктов через сети.

Базовый класс визуальных компонентов - TControl

Группа визуальных компонентов (элементов управления) строится на основе класса TControl, описывающим свойства, методы и события, присущие всем элементам управления, такие как:



  • расположение на экране;

  • правила выравнивания относительно других элементов управления;

  • курсор мыши, отображаемый при наведении мыши на элемент управления;

  • шрифт, используемый для вывода надписей на компоненте;

  • цвет фона;

  • подсказка, выводимая операционной системой при попадании элемента управления в фокус.

Общие свойства визуальных компонентов

Местоположение и размер визуального компонента

Для определения местоположения и размеров визуального компонента используются следующие свойства:


http://saliyna.narod.ru/oop/lesson6/lecture_clip_image002.png
Рисунок 2

Значения свойств задаются в пикселах.



Система координат рабочей области: начало отсчета находится в левом верхнем углу. Оси направлены вправо и вниз. Под рабочей областью понимается та часть площади владельца (формы, панели), которая предназначена для размещения дочерних элементов. Эти свойства можно использовать как на этапе разработки, так и во время выполнения.

Выравнивание элемента управления

Для выравнивания компонента в рабочей области его владельца (обычно это форма) применяется свойство Align.

Может принимать следующие значения: alNone, alTop, alBottom, alLeft, alRight, alClient. При значении alNone выравнивание отсутствует. При следующих четырех значениях выравнивание осуществляется по соответствующей стороне. Значение alclient приводит к тому, что элемент управления изменяет свои размеры до размеров рабочей области владельца.

Свойство Anchors («Якорь») обеспечивает фиксацию элемента управления по сторонам владельца. Сложное свойство, которое содержит следующие подсвойства

akTop – фиксация по верху,

akLeft – фиксация по левой стороне,

akRight – фиксация по правому краю,

akBottom – фиксация по нижнему краю.

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

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

Свойство AutoSize обеспечивает изменение размеров компонента в соответствии с размерами его содержимого (текста, изображения, списка, иерархического дерева и т. д.).
Внешний вид элемента управления

Для определения цвета компонента используется свойство Color. При нахождении указателя мыши над компонентом его изображение может изменяться в соответствии со значением свойства Cursor. Для текста компонента шрифт обычно задается свойством Font. Сам текст задается свойством Text. Свойство Hint содержит текст ярлыка — однострочной подсказки, которая появляется в маленькой рамке при остановке мыши на элементе управления. Если свойство ShowHint=true, то подсказка показывается.

Если свойство ShowHint=False, то подсказка не отображается.
http://saliyna.narod.ru/oop/lesson6/lecture_clip_image004.png
Рисунок 3.

У кнопки Hint=’Подсказка’, ShowHint=True;



Видимость компонента.

Элемент управления можно сделать видимым или невидимым. Для этого применяется свойство Visible.



Visible=True – компонент виден,

Visible=false – компонент не виден.

Доступность элемента управления

Определяется свойством Enabled.

Если Enabled=True, то компонент доступен (полностью работоспособен).

Если Enabled=False, то компонент не доступен (неактивен и отображается серым цветом).



Свойство визуальной принадлежности

Одно из самых важных свойств элементов управления — это свойство визуальной принадлежности Parent, описанное в классе TControl, и определяющее внутри какого компонента визуально располагается данный элемент управления. Данное свойство имеет тип TWinControl, так как любой элемент управления может располагаться только в Windows-окне.



Класс TWinControl

Класс TWinControl обеспечивает создание оконных элементов управления.

Главное отличие оконного элемента управления от любых других — наличие дескриптора окна hwnd. Дескриптор окна — это специальный идентификатор, который операционная система присваивает всем объектам, которые должны обладать свойствами окна. Оконный элемент управления умеет:



  •  получать и передавать фокус управления во время выполнения приложения;

  •  воспринимать управляющие воздействия от мыши и клавиатуры; 

  •  размещать на себе другие элементы управления.

Оконными элементами управления являются не только формы, но и практически все стандартные элементы управления Windows.

Фокус

Для передачи фокуса между элементами управления на одной форме часто используется клавиша <Таb>. Порядок перемещения фокуса между элементами определяется свойством TabOrder. В первую очередь фокус передается компоненту с минимальным значением свойства. Далее — по возрастанию значения. При переносе компонента на форму это значение задается автоматически в соответствии с числом компонентов на форме. Если свойство TabStop=False, то компонент не будет откликаться на клавишу <Таb>. Для передачи фокуса прямо элементу управления применяется метод SetFocus. Чтобы узнать, имеет ли элемент управления фокус, в настоящее время используется метод Focused.



Внешний вид

Все оконные элементы имеют рамку по контуру (впрочем, она может быть не видна). Ее параметры задаются группой свойств:



  •  BevelEdges - задает, какие стороны входят в рамку;

  •  BevellnnerBevelOuter - задают внешний вид рамки;

  •  BevelKind - определяет стиль рамки;

  •  BevelWidth - задает размер рамки.

Внешний вид оконного элемента определяется свойством Ctl3D. Если Ctrl3D=True, то элемент управления имеет трехмерный вид. Если Ctrl3D=False, то элемент выглядит плоским.
http://saliyna.narod.ru/oop/lesson6/lecture_clip_image005.png
Рисунок 4
у Edit1 свойство Ctrl3D=False, у Edit2 свойство Ctrl3D=True

 

Оконный элемент может содержать другие компоненты. Для управления ими применяется индексированный список указателей, представляющих свойство Controls. Общее число дочерних элементов управления содержится в свойстве ControlCount.



Класс TGraphicControl

Класс TGraphicControl используется для создания неоконных (не получающих фокус) элементов управления. Так как непосредственным предком класса является класс TControl, то потомки TGraphicControl умеют реагировать на управляющие воздействия мышью.

Наглядный пример элемента управления, которому не нужно получать фокус, — это компонент TLabel, предназначенный для отображения текста, или компонент TImage, предназначенный для визуализации изображений. Для визуализации элементов управления на основе этого класса используется канва, инкапсулированная в классе TCanvas.



http://saliyna.narod.ru/images/voprosik.png Вопросы Ответьте на вопросы

  1. Какие компоненты называют визуальными?

  2. Какие компоненты называют невизуальными?

  3. Какие компоненты называют диалоговыми?

  4. Какие свойства, методы и события, присущие всем элементам управления?

  5. Какие свойства определяют местоположения и размеров визуального компонента?

  6. Для чего используют свойство «Якорь»?

  7. Какие свойства можно использовать для управления внешним видом элемента?

  8. Что определяет свойство Parent?

  9. Что называют дескриптором окна?

  10. Опишите принцып работы фокуса ввода.

  11. Какие компоненты не получают фокус ввода?

http://saliyna.narod.ru/images/mancomp.pngЗадание 1. Установить на форму две панели (на странице Standart) panel1 и panel2 и осуществить выравнивание первой панели по верху формы, а второй панели на всё оставшееся место формы. Использовать свойство Align.

http://saliyna.narod.ru/images/mancomp.pngЗадание 2: Посмотреть, как работает «Якорь».

Ход решения:

Задайте размеры формы 250х250. Установите компоненты Memo и кнопку (рис.5).


http://saliyna.narod.ru/oop/lesson6/lecture_clip_image003.png
Рисунок 5

Установите для кнопки якорь по правой и нижней стороне. Для этого в подсвойствах свойства Anchors установите следующие значения:

akTop – false, akLeft – false, akRight – true, akBottom – true.

Запустите программу и увеличьте размеры формы.



http://saliyna.narod.ru/images/voprosik.pngКак поведет себя кнопка? А Memo?

Теперь для Memo настройте якорь по всем четырем сторонам. Все подсвойства свойства Anchors установите в True.

Запустите приложение и снова увеличьте размер формы.

http://saliyna.narod.ru/images/voprosik.pngКак ведет себя Memo?

http://saliyna.narod.ru/images/mancomp.pngЗадание 3: Установить на форму кнопку и сделать для нее всплывающую подсказку «Нажми меня».
http://saliyna.narod.ru/images/mancomp.pngЗадание 4. Установите на форму три кнопки, и сделать так, чтобы при запуске была одна кнопка видима и доступна, вторая невидима, а третья видима, но не доступна для пользователя.

http://saliyna.narod.ru/images/mancomp.pngЗадание 5:  создайте форму, показанную на рисунке 6, комбинируя свойства BevelEdges, Bevellnner, BevelOuter, BevelKind,  BevelWidth.
http://saliyna.narod.ru/oop/lesson6/lecture_clip_image006.png

 

Рисунок 6



Урок 4. Свойства компонентов. События мыши и клавиатуры

Обращение к свойству объекта в программе

В программе к свойству объекта можно обратиться так: 



<имя объекта>.<имя свойства>

Например: Label1.Caption.

Иногда свойство объекта является в свою очередь объектом. Тогда в обращении к этому свойству указывается через точки вся цепочка предшествующих объектов.

Например, метки имеют свойство Font — шрифт, которое в свою очередь является объектом. У этого объекта имеется множество свойств, в частности, свойство Color — цвет шрифта. Чтобы сослаться на цвет шрифта метки Label1, надо написать Label1.Font.Color.

Аналогично для доступа к методам объекта. 

<имя объекта>.<имя метода>

Например: Label1.Free.



Оператор With

Оператор with используется для сокращения записи при обращении к полям записи или к свойствам и методам объекта. В этих случаях применение with позволяет избежать повторных ссылок на объект в последующих операторах. Например, группу операторов:



Form1.Label1.left:=Form1.Label1.left+10;
Form1.Label1.font.color:=clRed;

с помощью with можно записать короче: 



with Form1.Label1 do

begin

left:=left+10;
font.color:=clRed;

end; 

События

Приложения Delphi используют управляемые событиями методы для организации взаимодействия между программой и пользователем. Большая часть кода, которую Вы будете писать в Delphi, будет инициироваться событиями. В принципе событием может быть изменение любой величины. Происхождение события заставляет работать определенный объект, при этом объект получает заранее определенные параметры для своей настройки на работу.

Процедура, инициируемая событием, называется обработчиком события. События делятся на три основные категории:


  • события мыши,

  • события клавиатуры и

  • системные события.

Все действия пользователя при взаимодействии с приложением сводятся к перемещению мыши, нажатию кнопок мыши и нажатию клавиш клавиатуры. Рассмотрим обработку в приложении событий, связанных с этими манипуляциями пользователя.
События мыши

Событие onClick - щелчок мыши на компоненте и некоторые другие действия пользователя




События OnMouseDown, OnMouseMove, OnMouseUp

Метод

Описание

OnMouseDown

Нажатие клавиши мыши над компонентом. Возможно распознавание нажатой кнопки и координат курсора мыши.

OnMouseMove

Перемещении курсора мыши над компонентом. Возможно распознавание нажатой кнопки и координат курсора мыши.

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



OnMouseUp

Отпускание ранее нажатой кнопки мыши над компонентом. Возможно распознавание нажатой кнопки и координат курсора мыши

Рассмотрим на примере событие OnMouseDown.



http://saliyna.narod.ru/oop/lesson7/lecture_clip_image001.png

Источник событий – параметр Sender

Во все обработчики событий, связанных с манипуляциями мыши передается параметр Sender типа TObject. Он содержит указатель на компонент, в котором произошло событие. Он используется, если пишется обработчик события для одного конкретного компонента. Однако часто один обработчик применяется для нескольких компонентов.



Распознаем, какая кнопка мыши нажата – параметр Button

Параметр Button типа TMouseButton определяет нажатую в этот момент кнопку мыши. Может принимать следующие значения:



  • mbLeft соответствует нажатию левой кнопки мыши

  • mbRight — правой,

  • mbMiddle — средней.

Например, если вы хотите, чтобы обработчик реагировал на нажатие только левой кнопки, вы можете его первым оператором написать:

if (Button <> mbLeft) then exit;

Тогда, если значение Button не равно mbLeft, т.е. нажата не левая кнопка, выполнение обработчика прервется.



Распознаем, какая вспомогательная клавиша была нажата – параметр Shift

Параметр Shift может принимать следующие значения:

ssShift - нажата клавиш Shift,

ssAlt- нажата клавиш Alt,

ssCtrl- нажата клавиш Ctrl

ssLeft- нажата левая кнопка мыши

ssRight- нажата правая кнопка мыши

ssMiddle- нажата средняя кнопка мыши

Параметр Button соответствует кнопке, нажимаемой в данный момент, а параметр Shift содержит информацию о том, какие кнопки были нажаты, включая и те, которые были нажаты ранее. Поскольку Shift является множеством, проверять наличие в нем тех или иных элементов надо операцией in.

Пример: реагируем на событие, заключающееся в нажатии левой кнопки мыши при нажатой клавише Alt:

if (Button = mbLeft) and (ssAlt in Shift) then ...

Аналогичные параметры Button и Shift передаются и в обработчик события OnMouseUp. Отличие только в том, что параметр Button соответствует не нажимаемой в данный момент, а отпускаемой кнопке. Параметр Shift передается также в обработчик события OnMouseMove, так что и в этом обработчике можно определить, какие клавиши и кнопки нажаты.



Определяем координаты курсора – параметры X и Y.

Во все события, связанные с мышью, передаются также координаты курсора X и Y. Эти параметры определяют координаты курсора в клиентской области компонента. Благодаря этому можно обеспечить различную реакцию в зависимости оттого, в какой части клиентской области расположен курсор.

Событие OnEnter – возникает в момент получения элементом фокуса в результате манипуляции мышью, нажатия клавиши табуляции или программной передачи фокуса. Событие OnExit – возникает в момент потери элементом фокуса в результате манипуляции мышью, нажатия клавиши табуляции или программной передачи фокуса.

События клавиатуры

Обработку клавиатуры можно выполнить, используя комбицацию трех событий.

Событие OnKeyDown происходит при нажатии любой клавиши, включая функциональные и специальные:

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);



Например, если мы хотим по нажатию на клавишу Esc закрывать форму, в обработчик события onKeyDown добавить следующий оператор:

if key=VK_ESCAPE then Close;

Здесь метод Close закрывает форму, key – параметр, который определяет нажатую клавишу, VK_ESCAPE - символическое имя клавишы Esc.

Событие OnKeyPress возникает при нажатии клавиши, генерирующей символы ASCII, включая управляющие клавиши:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

Событие OnKeyUp происходит при освобождении любой клавиши:

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;  Shift: TShiftState);

Каждый из обработчиков событий получает, по крайней мере, один параметр, называемый Key, который представляет нажатую клавишу. В обработчиках событий OnKeyDown и OnKeyUp параметр Key является беззнаковым значением типа Word, которое представляет код виртуальной клавиши Windows. В обработчике события OnKeyPress параметр Key — это значение типа Char, представляющее символ ASCII. Несмотря на то, что обе переменные называются Key, они представляют различную информацию. Все ASCII-символы имеют соответствующие коды виртуальных клавиш, но многие виртуальные клавиши не имеют ASCII-эквивалента, например клавиша F1.

http://saliyna.narod.ru/images/voprosik.png Вопросы Ответьте на вопросы:


  1. Как обратится к свойствам объекта или методам объекта?

  2. Для чего используют оператор with?

  3. Что называют обработчиком события?

  4. На какие категории делятся события?

  5. Какие обработчики событий позволяют обрабатывать события клавиатуры?

  6. Что представляет собой параметр Key?

  7. К каким типам может принадлежать параметр Key ?

  8. Какой из обработчиков событий позволяет определить нажатие функциональной клавиши?

  9. Когда происходит событие onClick?

  10. Когда происходит событие onDblClick?

  11. В какой момент времени выполняются события onMouseUp, onMouseDown, onMouseMove?

  12. Какие параметры передаются в обработчике события onMouseDown?

  13. Для чего используется каждый из параметров?



http://saliyna.narod.ru/images/mancomp.pngЗадание 1. Напишите приложение, которое при щелчке левой кнопкой мыши по форме перекрашивает ее в красный цвет.

Ход работы:

Создайте обработчик события OnClick: для этого в объектном инспекторе перейдите на страницу Events, найдите событие onClick и выполните двойной щелчок мышью в правой колонке, напротив этого события. На переднем плане появится окно редактора с помещенной в нужное место модуля заготовкой обработчика события OnClick. Для изменения цвета формы в обработчике события OnClick напишите:



Form1.Color:=clRed;  

http://saliyna.narod.ru/images/mancomp.png Задание 2. Напишите приложение, в котором при нажатии на левую кнопку мыши происходит смена цвета с зеленого на красный, и, наоборот, с красного — на зеленый.

Ход работы: 

В соответствии с условием задачи в обработчике события OnClick формы необходимо проанализировать свойство Color формы: если его значение соответствует красному, то изменить его на зеленый (clGreen), иначе присвоить значение красный. На языке Object Pascal это записывается так:



if Form1.Color=clRed

then Form1.Color:=clGreen

else Form1.Color:=clRed;

Событие OnDblClick - двойной щелчок мыши на компоненте

http://saliyna.narod.ru/images/mancomp.pngЗадание 3. Напишите приложение, в котором при двойном щелчке левой кнопкой мыши изменяется вид курсора.

Ход работы:

Каждое значение свойства Cursor имеет свой числовой эквивалент в пределах от -21 (crHandPoint) до 0 (crDefault). При каждом двойном щелчке левой кнопкой мыши значение свойства Cursor будем увеличивать на единицу, при достижении значения 0 — восстановим значение -21. Введите в обработчик события формы OnDblClick следующий оператор:



if Cursor=0 then Cursor:=-21 else Cursor:=Cursor+1;

http://saliyna.narod.ru/images/mancomp.pngЗадание 4: создать несколько кнопок, у которых будет один обработчик события и который будет уметь работать с разными типами кнопок.

Ход работы: 

Установите на форму несколько разных кнопок TBitBtn, TSpeedButton (на странице Additional в палитре инструментов). Выделите все кнопки TSpeedButton и установите свойство GroupIndex=1.

Создайте следующий обработчик для кнопки BitBtn1.

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

if Sender is TBitBtn then TBitBtn(Sender).Enabled := False;



if Sender is TSpeedButton then TSpeedButton(Sender).Down := True;

end;


Всем остальным кнопкам присвойте этот обработчик с помощью Object Inspector. Для этого выделите все кнопки, перейдите в окно Object Inspector и на закладке Events найдите событие onClick. Щелкните в колонке справа от события и из списка выберите событие Bitbtn1Click (рис.1)
http://saliyna.narod.ru/oop/lesson7/lecture_clip_image002.png

Рисунок 1



http://saliyna.narod.ru/images/mancomp.pngЗадание 5.

При перемещении курсора по форме при нажатой клавише Shift выдавать в заголовок формы координаты курсора.



http://saliyna.narod.ru/images/mancomp.pngЗадание 6. Напишите приложение, позволяющее рисовать отрезок на форме.

Ход работы:

Чтобы нарисовать на форме пунктирную линию красного цвета от точки с координатами (10,10) до точки (300,300), создайте обработчик события формы onClick и введите следующие операторы:

with Canvas do begin

Pen.Color:=ClRed; //цвет линии

Pen.Style:=PsDash; //стиль линии

MoveTo(10,10); //переместить курсор в точку (10,10)

LineTo(300,300); //нарисовать линию из точки, где находится курсор в точку (300,300)

end;


http://saliyna.narod.ru/images/mancomp.pngЗадание 7. Напишите приложение, которое при нажатии мыши устанавливает курсор в точку, а при отпускании кнопки мыши в другом месте формы рисует отрезок от первой точки до второй. Использовать события MouseDown и MouseUp, для координат использовать параметры x,y.
Урок 5. Обработка событий. Динамическое изменение свойств

http://saliyna.narod.ru/images/mancomp.pngЗадание 1. Поместить на форму два поля ввода и кнопку "Переслать". При нажатии на кнопку текст из первого поля ввода переписывается во второе, то есть исчезает в первом поле и появляется во втором.

Ход работы: установите на форму два Edit и одну кнопку. В обработчик события нажатия кнопки onClick поместите следующий код:
http://saliyna.narod.ru/oop/lesson8/lecture_clip_image001.png

 

http://saliyna.narod.ru/images/mancomp.pngЗадание 2. Создайте приложение, позволяющее изображать кривые линии при нажатой левой кнопке мыши.



Ход работы: 

Создайте обработчик события OnMouseMove и введите следующие

операторы:http://saliyna.narod.ru/oop/lesson8/lecture_clip_image002.png

http://saliyna.narod.ru/images/mancomp.pngЗадание 3. Напишите приложение, которое изображает прямоугольники (эллипсы)

Подсказка:

В классе TCanvas определен метод Rectangle(x1,y1,x2,y2), в котором параметры задают координаты противоположных вершин прямоугольника (т.е. принадлежащих одной из его диагоналей). Нажатие кнопки мыши (событие OnMouseDown) фиксирует начало рисования прямоугольника и соответственно определяет координаты первой точки, а освобождение кнопки (событие ОnMouseUp) — окончание рисования прямоугольника и соответственно определяет координаты второй точки.


http://saliyna.narod.ru/images/mancomp.pngЗадание 4. Напишите программу, которая при нажатии на клавиши управления курсором перемещает форму в соответствующем направлении; при нажатии комбинации клавиши и клавиши управления курсором — изменяет размеры формы.

 

http://saliyna.narod.ru/images/mancomp.png Задание 5. Напишите приложения для рисования эллипсов с закрашенной внутренней областью.



http://saliyna.narod.ru/images/mancomp.png Задание 6. Напишите приложения для рисования разноцветных линий.
  1   2   3   4   5   6   7   8   9   10   11


База данных защищена авторским правом ©infoeto.ru 2016
обратиться к администрации
Как написать курсовую работу | Как написать хороший реферат
    Главная страница