logo search
Методичка лаб по ООП с ИИТ

Лабораторная работа 2. Использование курсоров в приложениях Windows.

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

Задание 1.

В свойстве Curcor формы выберете значение crCross (крест). Добавьте кнопку на форму и в свойстве Curcor этой кнопке выберите значение crHandPoint (указатель в виде руки). Запустите программу и понаблюдайте за сменой курсоров.

Задание 2.

Выполните двойной щелчок на кнопке, откроется заготовка процедуры TForm1.Button1.Click. После слова begin напишите следующие строки:

Screen.Cursor:=crHourGlass;

Sleep(3000);

Screen.Cursor:=crDefault;

Запустите программу и понаблюдайте, что происходит после щелчка на кнопке. Ровно на три секунды курсор принимает облик песочных часов. Временная задержка 3000 миллисекунд указана в процедуре Sleep.

Задание 3.

Уберите заголовок кнопки. Рядом с кнопкой разместите компонент Edit1. втексте программы перед заголовком процедуры TForm1.Button1Click(Sender: TObject) вставить описание глобальной переменной

var

i: Integer=1;

В самой процедуре написать:

Dec(i); // уменьшаем i на 1

if i<-22 then Close else // если i < -22 то закрываем окно

begin

Edit1.Text:=IntToStr(i); // показываем значение i в edit1

Screen.Cursor:=i;

end;

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

Задание 4.

Создать собственный курсор тоже можно. Для этого сначала необходимо создать изображение. Откройте редактор изображений ImageEditor, ссылка на него содержится в меню Tools. В меню File выбрать пункт New, Resource File(.res) для создания файла ресурсов. В результате появится стандартное окно Untitled.res. В этот файл можно поместить множество картинок курсоров. Щелчком правой кнопки мыши выберите New Cursor. Имя нового курсора Cursor1 можно переименовать и назвать Wolf (волк). Двойным щелчком по имени откройте окно для рисования. Увеличить размер окна можно через меню View (Вид). Квадратная сетка показывает точки или пикселы изображения. Создайте изображение волка или другое изображение, используя инструменты рисования. На изображение необходимо выделить главную точку, которой курсор указывает или рисует. Подведите курсор к нужному пикселу и определите координаты по х и у ( внизу окна на индикационной панели). Щелкните правой кнопкой в правой половине окна, выберите пункт SetHotSpot и зафиксируйте координаты «горячей точки». Для тестирования созданного курсора в правой части окна щелкаем правой кнопкой мыши и выбираем пункт Test. Появится белое окно, в котором можно проверить движение курсора. Для сохранения необходимо выделить окно Untitled.res и в редакторе Image выбрать пункт File, Save и сохранить курсор в папку вашего проекта под именем WolfCursor.res. для присоединения курсора к своему проекту в программе проекта после строки {$R *.dfm}

вставить {$R wolfCursor.res} – это указание автоматическому компоновщику подключить к исполняемому файлу новый ресурс, содержащийся в файле WolfCursor.res.

Предыдущий код процедуры заменяем на

begin

Screen.Cursors[1]:=LoadCursor(HInstance,'wolf'); //загрузить курсор и присвоить имя

Screen.Cursor:=1; //показать курсор на экране

end;

Запустите проект и просмотрите полученный результат.

Задание 5.

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

Form2.Show;

Для создания дополнительной формы проекта щелкните по кнопке New Form. Новая форма должна содержать фотографию, информацию об авторе и кнопку «До свидания».

Для вставки фотографии используйте компонент Image (вкладка Additional), а также ее свойство Picture для вставки фото с формате bmp или jpg. Информацию об авторе можно вывести в поле Memo. Изменяя свойства компонента можно изменить шрифт, фон и т.п. кнопка «До свидания» служит для закрытия формы. В процедуру добавляем следующие строки:

procedure TForm2.Button1Click(Sender: TObject);

begin

close;

end;

Чтобы связать два отдельно существующих модуля попытайтесь запустить программу. Система обнаружит форму 2 и выдаст сообщение «Форма Form1 ссылается на форму Form2, объявленную в модуле Unit2, который не подключен к списку Uses. вы хотите это добавить?» Соглашайтесь, после этого в модуле Unit1система вставит строку

uses Unit2;

Теперь все модули нашего проекта будут работать совместно.

Лабораторная работа 3. Перетаскивание объектов мышью.

Популярная технология перетаскивания позволяет перетащить любой объект в другое место экрана. В системе Delphi есть стандартные средства для осуществления технологии перетаскивания, связанные с событиями OnDragDrop, OnStartDrag, OnEndDrag и некоторых других. Разместим на форме отдельные части, из которых можно собрать фигуру человечка.

Задание 1.

Разместим на форме компонент Shape1 (вкладка Additional). Установим свойству Shape значение stCircle. Измените размеры фигуры, используя ее свойства или с помощью мыши. Отсчет координат ведется с левого верхнего угла. О том, что на фигуре щелкнули мышью, компьютер узнает из обработки события OnMouseDown. Перейдем на вкладку Events и два раза щелкните мышью в пустом поле OnMouseDown. Для того, чтобы переместить фигуру достаточно нарисовать ее на новом месте. Для определения координат введем глобальные переменные и вспомогательную переменную drag, которая будет сигнализировать об операции перетаскивания.

Var

X0,Y0:Integer;

drag: boolean=false;

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

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

Shift: TShiftState; X, Y: Integer);

begin

X0:=x;

Y0:=y;

drag:=true;

end;

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

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

Shift: TShiftState; X, Y: Integer);

begin

if drag then

begin

with Shape1 do

begin

Left:=Left+x-X0;

Top:=Top+y-Y0;

end;

drag:=false;

end;

end;

Сохраните проект и запустите программу. Попробуйте переместить фигуру.

Задание 2.

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

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

Shift: TShiftState; X, Y: Integer);

begin

if drag then

begin

with Sender as TShape do

begin

Left:=Left+x-X0;

Top:=Top+y-Y0;

end;

drag:=false;

end;

end;

Задание 3.

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

procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

if drag then

with Sender as TShape do

begin

Left:=Left+x-X0;

Top:=Top+y-Y0;

end;

end;

В процедуре TForm1.Shape1MouseUp теперь нужно оставить только один оператор опускания флажка:

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

Shift: TShiftState; X, Y: Integer);

begin

drag:=false;

end;

Запустите программу и попробуйте составить фигурку человечка.