МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Программирование на Delphi

    Присвоить такому свойству значение - значит указать программе адрес метода,

    который будет вызываться в момент наступления события. Такие методы

    называются обработчиками событий.

    Внутри библиотеки времени выполнения Delphi вызовы обработчиков событий

    находятся внутри методов, обрабатывающих сообщения Windows. Выполнив

    необходимые действия, этот метод проверяет, известен ли адрес обработчика,

    и, если это так, вызывает его.

    События имеют разное количество и тип параметров, в зависимости от

    происхождения и назначения. Общим для всех события является параметр Sender

    - он указывает на объект, вызвавший событие. Самое простое событие -

    tNotifyEvent - не имеет других параметров.

    tNotifyEvent = procedure(Sender:tObject) of object;

    Тип метода, предназначенный для извещения о нажатии клавиши,

    предусматривает передачу в процедуру кода этой клавиши, о передвижении мыши

    - ее текущих координат и т.д.

    Имя события в Delphi начинается с префикса On: OnClick, OnCreate,

    OnMouseDown и т.д. Имена методов - обработчиков событий состоят из имени

    объекта, генерирующего событие, и корня имени события: OkButtonClick.

    Дважды щелкнув мышью в инспекторе объектов на странице Events в поле

    напротив любого события, вы получите скелетный код (заготовку) этого

    события.

    Поскольку события - это свойства объекта, их значения можно менять в любой

    момент во время выполнения программы. Эта возможность называется

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

    одного объекта и присвоить (делегировать) их другому.

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

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

    подстановкой процедур.

    Один и тот же обработчик может обрабатывать события от разных объектов.

    Типичный пример - в современных программах одно и то же действие можно

    вызвать несколькими способами - через главное меню, контекстное меню и т.

    д. Этого легко добиться, назначив один и тот же обработчик всем необходимым

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

    того же типа.

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

    какой именно объект вызвал событие. Если объекты, которые потенциально

    могут это сделать, имеют разный тип, то именно их тип можно применить в

    качестве критерия:

    If Sender is tMenuItem then ...

    Если же все объекты, разделяющее между собой один обработчик события,

    относятся к одному классу, можно использовать свойство tObject.Tag.

    Ниже приведены названия некоторых, наиболее употребительных событий Delphi:

    Событие - Тип обработчика - Когда возникает

    OnClick - TNotifyEvent - При нажатии левой клавиши мыши

    OnActivate - TnotifyEvent - После передачи объекту фокуса

    OnCreate - TnotifyEvent - После создание объекта

    OnDestroy - TnotifyEvent - Перед уничтожением объекта

    OnDeactivate - TnotifyEvent - Перед уходом фокуса из объекта

    OnKeyPress - TkeyPressEvent - При нажатии клавиши

    OnMouseDown - TmouseEvent - При нажатии клавиши мыши

    OnMouseMove - TmouseMoveEvent - При движении мыши над объектом

    OnMouseUp - TmouseEvent - При отпускании клавиши мыши

    а также их типы:

    Тип

    Описание

    TnotifyEvent

    type TnotifyEvent = procedure (Sender: TObject) of object;

    TkeyPressEvent

    type TkeyPressEvent = procedure (Sender: TObject; var Key: Char) of object;

    TmouseEvent

    TmouseEvent = procedure (Sender: TObject; Button: TmouseButton; Shift:

    TShiftState; X, Y: Integer) of object;

    TmouseMoveEvent

    TmouseMoveEvent = procedure(Sender: TObject; Shift: TShiftState; X, Y:

    Integer) of object;

    Стандартные события описаны в модуле Classes.

    Динамические массивы

    В Delphi существуют динамические массивы, то есть массивы, длину которых

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

    массивов стояла довольно остро. Стандартных средств для работы с ними не

    было, и программистам приходилось вручную создавать подобные структуры (как

    правило, на основе динамических переменных). Теперь компилятор Delphi сам

    выполняет всю “грязную” работу. Параллельно с динамическими, в Delphi

    сохранились и обычные, статические массивы.

    Длина динамических массивов определяется уже во время выполнения программы.

    Описав переменную как

    var A1:array of real,

    мы будем иметь указатель, соответствующий массиву вещественных чисел.

    Память под него выделяется процедурой SetLength:

    procedure SetLength(var A; NewLength: Integer);

    Здесь A - указатель на динамический массив, NewLength - длина массива.

    В динамических массивах нумерация индексов начинается только с нуля.

    То обстоятельство, что динамические массивы фактически являются

    указателями, приводит к определенным нюансам в их использовании. Первый из

    них касается присвоения массивов. Запись

    Var A1,A2:array[0..4] of real;

    A1:=A2;

    В случае со статическими массивами, означает, что всем элементам массива A1

    присваиваются значения соответствующих элементов массива A2, но при этом,

    переменные A1и A2 - разные переменные, хранящиеся в разных областях памяти.

    В случае с динамическими массивами присвоение их друг другу - не более чем

    присвоение указателей. ассмотрим пример:

    Var A1,A2:array of real;

    . . .

    SetLength(A1,5);

    A1[0]:=0.0;

    A2:=A1;

    A2[0]:=2.0;

    Значение A2[0] также изменится и станет равно 2. Это произошло потому, что

    после присвоения указатели ссылаются на один и тот же адрес в памяти и

    изменения в одном массиве приведут к синхронным изменениям в другом.

    Для того, чтобы действительно скопировать элементы в A2, необходимо

    использовать функцию Copy:

    function Copy(A; Index, Count: Integer): string;

    Здесь А - указатель на копируемый массив,

    Index - индекс первого копируемого элемента,

    Count - число копируемых элементов.

    A2:=Copy(A1,0,Length(A1));

    Освободить выделенную под массив память можно при помощи процедуры

    finalize:

    procedure Finalize( var A [; Count: Integer] );

    здесь V - указатель на динамический массив, Count - количество массивов (в

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

    в одном непрерывном блоке памяти, их можно освободить одним вызовом

    Finalize); или просто присвоив указателю на массив значение nil. В этом

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

    а будет вызвана соответствующая процедура, корректно освобождающая память.

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

    ни одна динамически созданная структура.

    Значения граничных индексов (как статических так и динамических) можно

    получить при помощи функций Low(A) - нижний граничный индекс и Hight(A) -

    верхний граничный индекс. Число элементов массива - функцией Length:

    function Length(A): Integer;

    Дальнейшим развитием идеи динамических массивов являются многомерные

    динамические массивы.

    Var AA: array of arrray of real;

    SetLength(AA,10,5);

    AA[9,4]:=1;

    AA[9][4]:=1;

    Можно пойти еще дальше, и создать динамические массивы с переменной длиной

    по разным индексам. Для создания такого массива сначала нужно задать его

    размерность по первому индексу:

    SetLength(AA,10);

    Это означает, что массив будет состоять из десяти строк. Теперь длина

    каждой строки задается отдельно:

    SetLength(AA[0],5);

    SetLength(AA[1],6);

    SetLength(AA[2],3);

    SetLength(AA[3],8);

    . . .

    В использовании многомерных динамических массивов есть одно ограничение:

    передавать их в процедуры как параметры нельзя.

    Перегружаемые функции

    Перегрузка функций ничем не отличается от перегрузки методов. Основная идея

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

    две или болеефункции с одинаковыми именами и разными наборами параметров.

    Перегружаемые функции, также как и методы описываются с ключевым словом

    overload. Например:

    function OverloadDemo(val : Byte) : string; overload;

    function OverloadDemo(val : Char) : string; overload;

    Такой подход делает ваш код более простым, его легче сопровождать и

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

    похожие действия над разнотипными данными.

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

    передаваемого параметра (в приведенном выше примере - Byte или Char) и в

    зависимости от этого подставит вызов соответствующего варианта функции.

    Параметры функций по умолчанию

    Параметры функций по умолчанию пришли в Delphi из С++. Часто при вызове

    процедур и функций в них надо передать параметры, обычно имеющие одно и то

    же значение. Это имеет место в частности в научных расчетах. Теперь эта

    проблема упрощается путем введения параметров по умолчанию. Это означает,

    что прямо в объявлении функции можно указать, что те или иные параметры

    должны принимать определенные значения, если они не заданы явно. Нарпример,

    можно описать функцию

    function Test(x:extended; Rz:extended = 6371):extended;

    При ее вызове второй параметр можно указать явно:

    Test(100,6372);

    А можно и не указывать:

    Test(100);

    В первом случае параметр Rz будет иметь значение 6372, а во втором - по

    умолчанию - 6371.

    Параметры по умолчанию должны быть сосредоточены в конце списка параметров.

    Допускается умалчивать последний, последний и предпоследний, и т.д.

    параметры В этом состоит отличие от С++ - там можно опускать любые из

    параметров по умолчанию.

    При применении параметров по умолчанию следует соблюдать осторожность.

    ассмотрим следующий пример:

    Procedure Confused(I:integer); overload;

    Procedure Confused(I:integer; J:integer = 0); overload;

    . . .

    Confused(x);

    Компилятор не сможет определить, какую именно реализацию Confused следует

    вызвать, и выдаст сообщение об ошибке.

    2. Приемы работы в среде разработки

    Репозиторий

    Репозиторий (Repository) представляет собой хранилище разнородных объектов,

    объединенных общим предназначением. Основная цель создания репозитория -

    предоставление разработчику возможности повторного использования уже

    готовых и отлаженных частей программы. Здесь можно найти готовое

    стандартное приложение, динамическую библиотеку, форму, модуль, мастера

    диалогов и приложений, а также различные вспомогательные программы.

    Репозиторий в Delphi представляет собой текстовый файл, в котором данны обо

    всех объектах храняться в специальном формате.

    Открыть репозиторий можно при помощи команды New меню File главного окна

    Delphi.

    Рассмотрим некоторые объекты, входящие в репозиторий. Основу любой

    разработки в Delphi составляет проект, объединяющий самые разные

    структурные элементы в единое приложение. В него чаще всего входят модули и

    формы различных видов. Типы приложений представлены исполняемыми

    программами, динамическими библиотеками и приложениями для запуска служб.

    Особое место занимают приложения для работы с базами данных (БД), поэтому

    значительная часть объектов репозитория предназначена для конструирования

    таких программ. Для обеспечения удаленного доступа к данным предназначены

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

    взаимодействия, в том числе технологии CORBA и Microsoft Transaction Server

    (MTS).

    Состав объектов репозитория можно обновлять, также можно создавать,

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

    репозитория осуществляется в диалоговом окне Object Repository которое

    появляется при выборе команды Repository меню Tools главного окна Delphi,

    или при выборе команды Properties всплывающего меню репозитория. Добавить

    новую форму в репозиторий можно командой Add to repository всплывающего

    меню формы или перетаскиванием формы в панель репозитория.

    Проект и группа проектов

    Любая работа в Delphi начинается с создания нового проекта. Как правило, из

    одного проекта получается одно приложение. Таким образом, проект

    представляет собой фундамент или каркас, на который “крепятся” все нужные

    детали. Самый маленький проект представляет собой только один файл с

    расширением DPR, он называется главным файлом проекта. Серьезный большой

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

    В главном файле содержится описание всех модулей и форм, входящих в проект.

    Кроме того, в секции begin … end может располагаться любой код, который

    должен выполняться перед началом работы приложения или в процессе его

    закрытия.

    Модулем называется текстовый файл с расширением PAS, в котором содержится

    некоторый исходный код на языке Object Pascal. С модулем может быть связана

    форма, представляющая собой отдельно взятое окно программы с расположенными

    на нем интерфейсными элементами. Служебная информация о формах хранится в

    файлах с расширением DFM. В общем случае, в состав проекта могут входить

    модули, не имеющие связанных с ними форм.

    В репозитории содержится несколько заготовок для форм (страница Forms), а

    также некоторые стандартные диалоги, которые с точки зрения

    пользовательского интерфейса являются модальными формами (страница

    Dialogs). В проекте Delphi помимо модулей и форм могут присутствовать

    различные служебные файлы. Среди них важное место занимают ресурсы

    (расширение RES), которые хранят значки, курсоры, строки сообщений

    информацию о версии программы и т.д.

    Репозиторий предлагает на выбор несколько типов проектов: например проекты

    с многодокументным (MDI) и однодокументным (SDI) интерфейсом. При

    необходимости создания динамической библиотеки также можно воспользоваться

    соответствующей заготовкой из репозитория.

    Помимо проекта в Delphi пристствует и более важная структурная единица -

    группа проектов, которая , как видно из названия, объединяет для совместной

    разработки несколько проектов. Файл группы проектов имет расширение BPG и

    представляет собой текстовый файл с системной информацией и описанием

    проектов, входящих в группу.

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

    отдельным проектом, необходимо только следить за принадлежностью отдельных

    форм и модулей и овремя переключаться на нужный проект в Диспетчере

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

    списка на панели инструментов Delphi или Диспетчера проектов.

    Диспетчер проекта предназначен для управления составными частями проекта

    или группы проектов. В группе можно добавить или удалить отдельный проект,

    в проекте - добавить или удалить отдельный модуль.

    Управление проектом осуществляется кнопками на панели инструментов

    диспетчера проекта или командами всплывающего меню.

    Вызывается диспетчер командой Project Manager меню View главного окна

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

    диспетчера проекта. Возможность объединения групп или включения групп в

    другие группы отсутствует.

    В целом, параметры проекта доступны в диалоговом окне, которое открывается

    при выборе команды Project Options меню Project главного окна Delphi.

    Палитра компонентов

    Основная палитра компонентов Delphi имеет двенадцать страниц.

    Standard. Большинство компонентов на этой странице являются аналогами

    экранных элементов самой Windows. Меню, кнопки, полосы прокрутки — здесь

    есть все. Но компоненты Delphi обладают также некоторыми удобными

    дополнительными встроенными возможностям.

    Additional. Эта страница содержит более развитые компоненты. Например,

    компонент Outline удобен для отображения информации с иерархической

    структуройДанная страница также содержит компоненты, главное назначение

    которых — отображение графической информации. Компонент Image загружает и

    отображает растровые изображения, а компонент Shape позволяет рисовать

    графические примитивы - окружности, квадраты и т.д.

    System. Страница System содержит неотображаемые системные компоненты:

    Timer, MediaPlayer, компоненты, реализующие механизм DDE. Страница System

    также содержит компоненты, обрабатывающие обмен высокого уровня между

    программами посредством OLE (Object Linking and Embedding).

    Win32. Эта страница содержит компоненты, позволяющие созданным с помощью

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

    интерфейсе 32-разрядной Windows, как просмотр древовидных структур,

    просмотр списков, панель состояния, расширенный текстовый редактор и др.

    Dialogs. Windows 3.1 ввела в употребление стандартные диалоговые окна для

    операций над файлами, выбора шрифтов, цветов и т.д. Однако для

    использования их в обычной программе Windows может потребоваться написать

    немало вспомогательного кода. Страница Dialogs предоставляет программам

    Delphi простой доступ к этим стандартным диалоговым окнам.

    Data Access и Data Controls. Delphi использует механизм баз данных компании

    Borland (Borland Database Engine, BDE) для организации доступа к файлам баз

    данных различных форматов. Компоненты этих двух страниц облегчают

    программам Delphi использование сервиса баз данных, предоставляемого BDE,

    например многопользовательского считывания, записи, индексации и выдачи

    запросов для таблиц dBASE и Paradox.

    С использованием этих компонентов создание программы просмотра и

    редактирования базы данных почти не требует программирования.

    Win 3.1. На этой странице находятся компоненты Delphi 1.0, возможности

    которых перекрываются аналогичными компонентами Windows 95.

    Internet. Эта страница предоставляет компоненты для разработки приложений,

    Страницы: 1, 2, 3, 4, 5, 6, 7


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.