Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

Программирование на Delphi

ent =  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  помимо  модулей  и  форм  могут  присутствовать
различные  служебные  файлы.  Среди  них  важное  место   
12345След.
скачать работу

Программирование на Delphi

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ