Файл: Лр операторы и выражения Delphi.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.01.2024

Просмотров: 288

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

ЛР 1. Операторы и выражения Delphi

Оператор присваивания

Арифметические операторы

Оператор конкатенации строк

Логические операторы

Операторы поразрядного сдвига

Операторы отношения

Операторы множеств

Оператор-селектор case

Оператор перехода goto

Организация циклов

ЛР 2. Структурные типы

Множества

Записи

Массивы

ЛР 3. Объекты и классы

Проектирование класса

Управление жизненным циклом объекта

Опережающее объявление класса

Ограничение видимости членов класса

Свойства объекта

Особенности объявления методов

Поля класса и методы класса

Иерархия наследования

Полиморфизм

ЗАДАНИЕ

ЛР4. Опорные классы VCL

Класс TControl

Принадлежность к родительскому контейнеру

Размещение и размеры элемента управления

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

Задание

ЛР5. Обработка клавиатурных событий и событий мышки

Щелчки кнопками мыши

Перемещение указателя мыши

Вращение колесика мыши

Операция перетаскивания drag and drop

Задание

ЛР 6. Классы потоков данных

Прототип потоков данных, класс TStream

— после перемещения мыши на небольшое расстояние (количество пикселов указывается в Threshold).

При необходимости прервать процесс перетаскивания вызывается метод

procedure EndDrag(Drop: Boolean);

В случае если параметру Drop передано значение true, то результаты перетаскивания будут приняты. В противном случае произойдет отмена.

За внешний вид курсора при операции перетаскивания отвечает свойство:

property DragCursor: TCursor;

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

Процесс перетаскивания последовательно сопровождается четырьмя событиями (табл. 5.3).

Таблица5.3.Последовательностьсобытийвоперацииdraganddrop


События

Инициатор

Описание

OnStartDrag()

Элемент- источник

Над элементом-источником нажата кнопка мыши и начато движение с удержанием кнопки в нажатом состоянии

OnDragOver()

Элемент- приемник

Перетаскиваемый элемент находится над приемником

OnDragDroup()

Элемент- приемник

Над элементом-приемником отпущена кнопка мыши

OnEndDrag()

Элемент- источник

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


В момент начала перетягивания генерируется событие

property OnStartDrag:
TStartDragEvent;

type TStartDragEvent = procedure(Sender: TObject;

var DragObject: TDragObject) of object;

В программах Delphi обработчик события OnStartDrag() задействуется только при необходимости, например для инициализации переменных, вызова дополнительных процедур и


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

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

property OnDragOver: TDragOverEvent;

TDragOverEvent = procedure(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean) of object;

Параметры события приведены в табл. 5.4.

Таблица5.4.ПараметрысобытияOnDragOver()


Параметр

Возможные значения

Описание

Sender

Любой потомок класса

TObject

Ссылка на приемник

Source

Ссылка на источник

X, Y

integer

Координаты указателя над приемником

State

dsDragEnter

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




dsDragLeave

Указатель убран с поверхности приемника




dsDragMove

Указатель движется над приемником

Accept

Boolean

Результат решения на прием клиента:

  • true готовность к приему клиента;

  • false отказ от приема



Задачей программиста является информирование приложения (через параметр Accept) о готовности или отказе приема операции drag and drop. В случае положительного решения при отпускании кнопки мыши возникает событие

property OnDragDrop: TDragDropEvent;

type TDragDropEvent = procedure(Sender, Source: TObject;

X, Y: Integer) of object;

Вне зависимости от готовности элемента-приемника к получению клиента, в финале перетаскивания элемент-источник генерирует событие:

property OnEndDrag: TEndDragEvent;

type TEndDragEvent = procedure(Sender, Target: TObject;

X, Y: Integer) of object;

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


Обработка событий клавиатуры


Благодаря умению получать фокус ввода потомки класса TWinControl способны реагировать на события клавиатуры. Клавиатурных событий всего три, и они возникают в строгой последовательности:

  1. В момент опускания клавиши у находящегося в фокусе ввода оконного элемента управления генерируется событие OnKeyDown().

  2. В момент фиксации клавиши в нажатом положении вызывается событие OnKeyPress().




  1. Подъем клавиши сопровождается событием OnKeyUp().

События опускания и подъема клавиши (первое и третье в нашем списке) описываются идентичным набором параметров:

property OnKeyDown: TKeyEvent;

property OnKeyUp: TKeyEvent;

type TKeyEvent = procedure(Sender: TObject; var Key: Word;

Shift: TShiftState) of object;

Здесь: Sender — ссылка на элемент управления, в котором возникло событие; Shift — индикатор состояния служебных клавиш , и ; Key — код клавиши (табл. 5.5).

Таблица5.5.Кодыклавиш


Код клавиши

Клавиша

Код клавиши

Клавиша

VK_CANCEL

/

VK_PRIOR


Up>

VK_BACK



VK_NEXT


Down>

VK_TAB



VK_END



VK_RETURN

>

VK_HOME



VK_SHIFT

>

VK_LEFT

<>

VK_CONTROL

>

VK_UP

<>

VK_MENU

>

VK_RIGHT

<>

VK_PAUSE


>

VK_DOWN

<>

VK_CAPITAL

>

VK_INSERT



VK_ESCAPE

>

VK_DELETE

>

VK_SPACE

<Пробел >

VK_NUMLOCK

Lock>

VK_SNAPSHOT


Screen>

VK_SCROLL

Lock>

Цифровые и символьные клавиши основной клавиатуры

VK_0, ..., VK_9

<0>, ..., <9>

VK_A, ..., VK_Z

, ...,

Функциональные клавиши

VK_F1, ..., VK_F12

, ...,

Дополнительная цифровая клавиатура (Num Lock включен)

VK_NUMPAD0, ..., VK_NUMPAD9

<0>, ..., <9>

VK_MULTIPLY

<*>

VK_SUBTRACT

<–>

VK_ADD

<+>

VK_DIVIDE

>

VK_DECIMAL

<.>



В момент фиксации клавиши в нажатом состоянии генерируется событие:

property OnKeyPress: TKeyPressEvent;

type TKeyPressEvent = procedure(Sender: TObject;

var Key: Char) of object;

Обратите внимание на то, что на этот раз параметр-переменная Key в обработчике отслеживает не код клавиши, а выбранный пользователем символ. Благодаря этому можно проверять корректность вводимого текста (листинг 5.4).


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

begin

if ((KEY<'0') or (KEY>'9') or (Length(Edit1.Text)>=11)) and (KEY<>#8) then {#8 код клавиши Backspace}

begin

Key:=#0;

if (Length(Edit1.Text)>=11)=false then

ShowMessage('Допускаются только цифры!')

else

ShowMessage('Длина текста превысила 11 знаков!')

end; end;
Событие осуществляет контроль верности ввода телефонного номера в строку ввода Edit1. Процедура допускает ввод только цифр, причем длина номера не должна превышать 11 символов. В противном случае ввод ошибочного символа отменяется (параметру-переменной Key присваивается значение #0) и выдается сообщение об ошибке.

9>0>9>0>
1   ...   18   19   20   21   22   23   24   25   26

Задание

Вариант 1


Разработайте приложение, состоящее из одной формы и нескольких (не менее 10) произвольных элементов управления.

Приложение должно позволять пользователю самостоятельно назначать местоположение элементов управления, перемещая их мышью во время выполнения программы.



Замечание

Постарайтесь, чтобы листинг программы не превысил 100 строк кода!

Вариант 2


Разработайте приложение-калькулятор позволяющее осуществлять 4 основных арифметических операции. Пользовательский интерфейс калькулятора должен позволять осуществлять расчёты без использования мышки (управление с клавиатуры)




Замечание

Постарайтесь, чтобы листинг программы не превысил 200 строк кода!

Вариант 3


Разработайте приложение позволяющее осуществлять перетаскивание (интерфейс drag and drop) текстовых надписей из одного списка (компонент TListBox) в другой.



Замечание

Постарайтесь, чтобы листинг программы не превысил 80 строк кода!

Вариант 4


Разработайте приложение содержащее не менее 5 компонентов TImage. Загрузите в один из компонентов рисунок. Реализуйте интерфейс (drag and drop) позволяющий осуществлять перетаскивание текстовых надписей из одного компонента в другой.


Замечание

Постарайтесь, чтобы листинг программы не превысил 80 строк кода!

Вариант 5


Разработайте приложение позволяющее пользователю (используя только клавиатуру) изменять размеры и положение главной формы.



Замечание

Постарайтесь, чтобы