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

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

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

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

Добавлен: 10.01.2024

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

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

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

СОДЕРЖАНИЕ

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

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

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

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

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

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

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

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

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

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

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

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

Множества

Записи

Массивы

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

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

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

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

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

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

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

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

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

Полиморфизм

ЗАДАНИЕ

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

Класс TControl

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

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

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

Задание

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

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

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

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

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

Задание

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

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

— после перемещения мыши на небольшое расстояние (количество пикселов указывается в Threshold).ПринеобходимостипрерватьпроцессперетаскиваниявызываетсяметодprocedureEndDrag(Drop:Boolean);В случае если параметру Dropпередано значение true, то результаты перетаскивания будут приняты. В противном случае произойдет отмена.Завнешнийвидкурсораприоперацииперетаскиванияотвечаетсвойство:propertyDragCursor:TCursor;Если элемент-приемник по каким-то причинам отказывается получать данные от источника, то внешний вид курсора над ним будет соответствовать значению crNoDrop(перечеркнутый круг). Если все в порядке, то сигналом готовности станет курсор crDrag.Процессперетаскиванияпоследовательносопровождаетсячетырьмясобытиями(табл.5.3).Таблица5.3.Последовательностьсобытийвоперацииdraganddrop

События

Инициатор

Описание

OnStartDrag()

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

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

OnDragOver()

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

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

OnDragDroup()

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

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

OnEndDrag()

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

Сигнализирует о завершении перетаскивания, используется для освобождения используемых ресурсов, отмены операции и т. п.
ВмоментначалаперетягиваниягенерируетсясобытиеpropertyOnStartDrag:
TStartDragEvent;typeTStartDragEvent=procedure(Sender:TObject;varDragObject:TDragObject)ofobject;В программах Delphi обработчик события OnStartDrag() задействуется только при необходимости,напримердляинициализациипеременных,вызовадополнительныхпроцедурифункций. Необязательный формальный параметр DragObject применяется наиболее подготовленными программистами для создания собственного экземпляра класса TDragObject, позволяющего осуществлять более тонкую настройку операций перетаскивания.Как мы уже говорили, событие OnDragOver возникает в то время, когда курсор мыши с перетаскиваемым клиентом движется над элементом-приемником, а также в момент отпускания кнопки мыши. Обработчик события уведомляет о готовности элемента-получателя принять клиента.propertyOnDragOver:TDragOverEvent;TDragOverEvent=procedure(Sender,Source:TObject;X,Y:Integer;State:TDragState;varAccept:Boolean)ofobject;Параметрысобытияприведенывтабл.5.4.Таблица5.4.ПараметрысобытияOnDragOver()

Параметр

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

Описание

Sender

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

TObject

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

Source

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

X, Y

integer

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

State

dsDragEnter

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




dsDragLeave

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




dsDragMove

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

Accept

Boolean

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

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

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

Задачей программиста является информирование приложения (через параметр Accept) о готовности или отказе приема операции drag and drop. В случае положительного решения при отпускании кнопки мыши возникает событиеpropertyOnDragDrop:TDragDropEvent;typeTDragDropEvent=procedure(Sender,Source:TObject;X,Y:Integer)ofobject;Вне зависимости от готовности элемента-приемника к получению клиента, в финале перетаскивания элемент-источник генерирует событие:propertyOnEndDrag:TEndDragEvent;typeTEndDragEvent=procedure(Sender,Target:TObject;X,Y:Integer)ofobject;В рамках обработчика события допускается освободить захваченные ранее ресурсы иливыполнить какие-то другие действия, определяемые программистом.

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


Благодаря умению получать фокус ввода потомки класса 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

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