Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Свойства, события и методы технологии Drag-and-Drop.



Читайте также:
  1. CASE-технологии: определение и описание.
  2. II. Методы и методики диагностики неосознаваемых побуждений.
  3. II.9. МЕТОДЫ АТОМНО-ЭМИССИОННОГО СПЕКТРАЛЬНОГО АНАЛИЗА
  4. III. Психические свойства, влияющие на безопасность.
  5. V. Образовательные технологии
  6. V1: 02. Методы обследования в стоматологии
  7. V1: 12. Физические методы диагностики и лечения в стоматологии
Название Описание
DragDrop Событие, возникающее по окончании операции перетаскивания элемента.
DragOver Событие, которое выполняется в случае, когда элемент находится над объектом-адресатом (при этом операция перетаскивания еще не завершена).
DragMode Свойство устанавливает режим перетаскивания элемента: · Manual (ручной); · Automatic (автоматический).
Draglcon Свойство задаёт изображение элемента при его перетаскивании.
Drag Метод, используемый для начала и окончания операции перетаскивания (перед этим необходимо установить DragMode = 0).

 

Если установлен ручной режим перемещения (DragMode = 0), то в этом случае операция может быть выполнена только при помощи метода Drag. При автоматическом режиме возможно перетаскивание элемента без использования Drag.

Событие DragDrop, возникающее при завершении операции, имеет следующие параметры:

- DragDrop (Source As Control, X As Single, Y As Single), где Source As Control - ссылка на элемент-источник;

- X As Single, Y As Single - координаты точки объекта-адресата, в которой отпускается кнопка мыши по окончании операции.

Метод Drag имеет один параметр - Action, определяющий то или иное состояние выполняемого перетаскивания. В таблице приведены значения параметра Action метода Drag:

Константа Значение Описание
vbCancel   Отмена операции
vbBeginDrag   Начало перетаскивания
vbEndDrag   Окончание операции

Пример 1: Имитация действия Корзины путём перетаскивания в неё объекта. Восстановление объекта происходит при двойном щелчке по корзине.

В качестве корзины и объекта будем использовать элементы управления Image. В качестве рисунков пустой и полной корзины можно использовать файлы с расширением.ICO, в качестве объекта для перемещения – рисунок мяча. Соответствующие рисунки нужно скопировать в папку с данным проектом. При запуске приложения корзина изображена пустой, затем в Image будет загружен рисунок с изображением полной корзины методом LoadPicture <Рисунок1>.

Рисунок 1

Интерфейс проекта:

На форме разместить метку Label1 (Положи мяч в корзину), кнопку Command1 (Выход), 2 элемента управления Image (в один поместить изображение мяча, в другой – пустой корзины).

Обозначения:

· Mx, My – координаты перемещаемого объекта;

· P – переменная логического типа, определяющая, пустая корзина или полная.

Dim Mx, My As Single, P As Boolean

Private Sub Form_Load() ‘загрузка формы

P = False ‘признак пустой корзины

End Sub

Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbLeftButton Then ‘если нажата левая кнопка мыши

Call Image1.Drag(vbBeginDrag) ‘начало перетаскивания

Mx = X

My = Y

End If

End Sub

Private Sub Image2_DragDrop(Source As Control, X As Single, Y As Single) ‘завершение перетаскивания объекта в корзину

Source.Visible = False ‘мяч стал невидим

P = True ‘признак полной корзины

Image2.Picture = LoadPicture("LEO4.ICO") ‘рисунок полной корзины

Label1.Caption = "Достань мяч из корзины!!!" ‘изменили надпись в метке

End Sub

Private Sub Image2_DblClick() 'извлечение объекта из корзины

Image1.Visible = True ‘мяч стал видимым

P = False ‘признак пустой корзины

Image2.Picture = LoadPicture("LEO3.ICO") ‘загрузить рисунок пустой корзины

Label1.Caption = "Положи мяч в корзину!" ‘изменить надпись в метке

End Sub

‘Завершение перетаскивания объекта на форме с учётом поправки (необязательная процедура)

Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)

SourceMove (X - Mx), (Y - My)

End Sub

 

При автоматическом перетаскивании элемента по форме при завершении операции его левый верхний угол будет находиться в той точке, где располагался указатель при отпускании кнопки мыши, независимо от того, где он находился на элементе в начале перетаскивания. Для того, чтобы конечное расположение совпадало с контуром, который отображается по умолчанию при перетаскивании (или с изображением, установленным в свойстве DragIcon), необходимо ввести поправку. После установления ручного режима становится возможным определение координат точки, в которой находился указатель в начале перетаскивания путём обработки события MouseDown для соответствующего элемента, что позволяет откорректировать параметры метода Move. [1]

 

ВОПРОСЫ ДЛЯ САМОКОНТРОЛЯ:

1. Создание простейших игр.

2. Введение собственных координат и масштаба.

 

ИСПОЛЬЗУЕМАЯ ЛИТЕРАТУРА:

1. Вирт Н. Алгоритмы и структуры данных. –М.: Мир, 2001.

2. Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы. Построение и анализ. –М.: МЦНМО, 2000.

3. Ахо А., Хопкрофт Д., Ульман Д. Структуры данных и алгоритмы. –М.: Вильямс, 2000.

4. Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования. –М.: Форум, 2008.

16)аналогично в vb Var Temp,k: integer;

Begin

AssignFile(f,1.txt);

Resetf(f);

K:=0;

While not EOF(f) do

Begin

Read(f,1.txt);

If temp = (then begin

K:=k+1;

17)
Написать программу обработки кольцевого списка из N лементов, решающую задачу Джозефуса. Задача представляет собой своего рода считалку: элементы становятся в круг, вводится некоторое число k. Необходимо, начиная с первого, отсчитать k-й элемент списка и удалить его. Далее отсчет начинается с (k+1)-го элемента и опять удаляется k-ый. Так продолжается до тех пор, пока в списке не останется один элемент. Выдать содержимое последнего элемента.

var

n,k,i: integer;

s: string;

begin

n:=50; // количество элементов, max 255

for i:=1 to n do

s:=s+chr(i);

k:=12; // номер элемента, который удаляем

i:=1;

repeat

i:=i+k-1;

while i > n do i:=i-n;

delete(S,i,1);

n:=length(s);

until n <= 1;

Edit1.Text:=IntToStr(ord(s[n]));

end;

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

Пример рекурсивной процедуры:

  procedure Rec(a: integer); begin if a>0 then Rec(a-1); writeln(a); end;

Рассмотрим, что произойдет, если в основной программе поставить вызов, например, вида Rec(3). Ниже представлена блок-схема, показывающая последовательность выполнения операторов.

Рис. 1. Блок схема работы рекурсивной процедуры.

Процедура Rec вызывается с параметром a = 3. В ней содержится вызов процедуры Rec с параметром a = 2. Предыдущий вызов еще не завершился, поэтому можете представить себе, что создается еще одна процедура и до окончания ее работы первая свою работу не заканчивает. Процесс вызова заканчивается, когда параметр a = 0. В этот момент одновременно выполняются 4 экземпляра процедуры. Количество одновременно выполняемых процедур называют глубиной рекурсии.

Четвертая вызванная процедура (Rec(0)) напечатает число 0 и закончит свою работу. После этого управление возвращается к процедуре, которая ее вызвала (Rec(1)) и печатается число 1. И так далее пока не завершатся все процедуры. Результатом исходного вызова будет печать четырех чисел: 0, 1, 2, 3.

Еще один визуальный образ происходящего представлен на рис. 2.

Рис. 2. Выполнение процедуры Rec с параметром 3 состоит из выполнения процедуры Rec с параметром 2 и печати числа 3. В свою очередь выполнение процедуры Rec с параметром 2 состоит из выполнения процедуры Rec с параметром 1 и печати числа 2. И т. д.

В качестве самостоятельного упражнения подумайте, что получится при вызове Rec(4). Также подумайте, что получится при вызове описанной ниже процедуры Rec2(4), где операторы поменялись местами.

  procedure Rec2(a: integer); begin writeln(a); if a>0 then Rec2(a-1); end;

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


Дата добавления: 2015-07-11; просмотров: 145 | Нарушение авторских прав






mybiblioteka.su - 2015-2024 год. (0.022 сек.)