Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


Задания на самостоятельную работу




1. ИНТЕРФЕЙС DRAG&DROP

 

Операционная система Windows широко использует специальный прием связывания программ с данными, который называется Drag&Drop (перетащи и от­пусти). Такой прием в Проводнике Windows используется для копирования или перемещения файлов. В Delphi реализован собственный интерфейс Drag&Drop, позволяющий компонентам обмениваться данными путем “перетаскивания» их мышью. Этот интерфейс определяется двумя свойствами и тремя событиями, дос­тупными каждому видимому компоненту.

Свойство

property DgagMode: TDragMode;

TGragMode = (dmManual, dmAutomatic);

Определяет, как будет выполняться весь комплекс действий, связанных с Drag&Drop: dmManual — вручную (программой); dmAutomatic — автомати­чески (свойствами и методами компонентов). Во всех случаях программист должен написать обработчики этих событий.

Свойство

Property DradCursor: TCursor;

Определяет вид указателя мыши в момент, когда над компонентом 2протаскиваются данные». Если компонент готов принять данные, он устанавливает в это свойство значение crDrag, в противном случае — crNoDrag. Установка этих свойств осуществляется автоматически, если DgagMode = dmAutomatic.

Событие OnDragOver(Sender, Soursce: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean) возникает в момент перемещения указателя мыши «с грузом» над компонентом.

Здесь Sender — компонент, который возбудил событие; Soursce — компонент-оправитель «груза»; X, Y — текущие координаты указателя мыши; State — состояние указателя (dsDragEnter— только что появился над компонентом; dsDragLeave — только что покинул компонент или была отпущена кнопка мыши; dsDragMove — перемещается над компонентом). В параметре Accept обработчик сообщает, готов ли компонент принять данные.

Событие OnDragDropEvent(Sender, Soursce: TObject; X, Y: Integer) означает, что пользователь «бросил» данные на компонент. Параметры обработчика совпадают по назначению с одноименными параметрами OnDragOver.

Наконец, при завершении перетаскивания (вне зависимости от того, приняты данные или нет) возникает событие

OnEndDrag(Sender, Target: TObject; X, Y: Integer);

где Sender — отправитель данных; Target — получатель данных или NIL, если никто не принял «посылку»; X, Y — координаты мыши в момент отпускания левой кнопки.

Задание 1.

Создадать проект, содержащий 2 списка ListBox, компонент Edit, компонент Panel и две кнопки. Данный проект должен обеспечивать следующие функции:

 

 

 

· копирование строк из Edit в 1 список;

· перенос строк из первого списка во второй;

· удаление строк из 1 списка методом их буксировки на черную панель.

Задание 2.

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

 

 

АВТОМАТИЗАЦИЯ ActiveX

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

Современные версии операционных систем от Microsoft по сути частично уже являются объектно-ориентированными. Для взаимодействия между объектами фирма Microsoft разработала целый ряд стандартов, объединенных между собой под единой маркой ActiveX.

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

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

Для того, чтобы пользователь в программе мог выбирать имена баз данных и таблиц, необходимо на форме разместить два комбосписка. Список элементов для выбора имени базы данных необходимо заполнить в обработчике события формы OnCreate. Для этого необходимо вызвать метод Session.GetDatabaseNames. Список элементов второго комбосписка для выбора имени таблицы необходимо формировать в ответ на изменение имени базы данных с помощью вызова метода Session.GetTableNames. при изменении имени базы данных или таблицы необходимо заново попытаться открыть таблицу или выдать сообщение об ошибке открытия.

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

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

Для программирования с помощью автоматизации ActiveX вначале необходимо установить связь с программой-сервером автоматизации и связаться с каким-то из его объектов, например с книгой Microsoft Excel или с документом Microsoft Word. В Delphi это делается с помощью функции SetActiveOleObject для подключения к объекту уже запущенного сервера либо с помощью CreateObject для запуска приложения-сервера автоматизации и подключения к его объектам. Эти функции определены в модуле ComObj, поэтому перед их использованием этот модуль необходимо указать в секции Uses. Аргументом вызова этих функций является имя создаваемого объекта сервера автоматизации, например, «Excel.Application» для получения доступа к Microsoft Excel в целом либо «Word.Document» для создания в памяти временного текстового документа Microsoft Word.

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

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

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

 

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

 

Var

XLApp,Sheet,Colum:Variant;

index,i:Integer;

Begin

XLApp:= CreateOleObject('Excel.Application'); { строка создаёт объект Excel и записывает его в переменную XLAp p. }

XLApp.Visible:=true; { строка заставляет запустить сам Excel. }

XLApp.Workbooks.Add(-4167); { добавляем новую рабочую книгу. Число в скобках – это константа, которая означает создание книги и её изменять нельзя. }

XLApp.Workbooks[1].WorkSheets[1].Name:='Отчёт'; { даtv название созданной книге. Это действие не обязательно, но тогда будет название по умолчанию " Лист 1 ". }

{ Теперь у нас Excel запущен и создана новая книга. Можно переходить к

впечатыванию данных. Но прежде чем это сделать отформатируем колонки и строки. Для этого получаем указатель на колонки рабочей книги Colum. }

Colum:=XLApp.Workbooks[1].WorkSheets['Отчёт'].Columns;

Colum.Columns[1].ColumnWidth:=20; { последовательно изменяем ширину колонок }

Colum.Columns[2].ColumnWidth:=20;

Colum.Columns[3].ColumnWidth:=20;

Colum.Columns[4].ColumnWidth:=20;

Colum.Columns[5].ColumnWidth:=20;

Colum:=XLApp.Workbooks[1].WorkSheets['Отчёт'].Rows; { в ту же переменную записываем указатель на строки рабочей книги и в следующих строках устанавливаем параметры шрифта }

Colum.Rows[2].Font.Bold:=true;

Colum.Rows[1].Font.Bold:=true;

Colum.Rows[1].Font.Color:=clBlue;

Colum.Rows[1].Font.Size:=14;

{Теперь можно выводить данные. Для этого получаем указатель на лист Sheet. Для того, чтобы вывести данные, нужно просто присвоить значение в Sheet.Cells[строка, колонки].

Sheet:=XLApp.Workbooks[1].WorkSheets['Отчёт']; {}

Sheet.Cells[1,2]:='Телефонный справочник';

Sheet.Cells[2,1]:='Фамилия';

Sheet.Cells[2,2]:='Имя';

Sheet.Cells[2,3]:='e-mail';

Sheet.Cells[2,4]:='Город';

Sheet.Cells[2,5]:='Дата рождения';

{ Далееработаем с записями таблицы }I

ndex:=3;





Поделиться с друзьями:


Дата добавления: 2016-09-06; Мы поможем в написании ваших работ!; просмотров: 445 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Студент может не знать в двух случаях: не знал, или забыл. © Неизвестно
==> читать все изречения...

2754 - | 2314 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.