Constructor create(aOwner:tComponent;Text:String);overload;

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

Constructor create(aOwner:tComponent;Name:String);overload;

Пример для функций:

function Divide(x, y:real):Real;overload;

begin

Result:=x/y;

end;

function Divide(x, y:integer):Integer;overload;

begin

Result:=x div y;

end;

5.14. Параметры по умолчанию

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

Name: Type=value;

При вызове параметры по умолчанию могут быть опущены. Например, если взять заголовок процедуры заполнения массива числом, передаваемым в качестве параметра:

Procedure FillArray(A:array of integer;V:integer=1);

Тогда вызов этой процедуры можно производить так:

FillArray(myArray,1);

Либо, что то же,

FillArray(myArray);

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

Технология Drag and Drop

Особенности разработки DLL

Работа программ с DLL (Dynamic Link Library) поддерживается операционной системой, а не компилятором какого-либо языка программирования. Они представляют собой универсальный механизм использования в программах библиотек - набора процедур и функций. Разные DLL могут быть написаны на различных языках программирования, что обычно не мешает их использованию в программах, написанных на другом языке программирования.

DLL не в состоянии поставлять в программу переменные, константы и типы. В результате DLL не могут экспортировать в программу объекты – для этого в Object PASCAL используются пакеты. DLL подключаются к программе в момент ее исполнения, т. е. динамически. Значительным преимуществом DLL является то, что если несколько программ используют одну и ту же DLL, в памяти будет лишь один экземпляр разделяемого программами кода. При необходимости DLL могут динамически загружаться и выгружаться из памяти программным путем.

НЕ нашли? Не то? Что вы ищете?

Для создания DLL в Object Pascal введено зарезервированное слово Library, которым должен начинаться текст библиотеки. За словом Library следует ее идентификатор, но в отличие от модуля работа с DLL определяется именем DLL-файла, а не идентификатором, следующим за Library.

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

Сразу за заголовком списываемой в библиотеке экспортируемой процедуры или функции должно следовать зарезервированное слово Export, которое позволяет DLL - подпрограмме использовать сегмент стека вызвавшей ее программы.

В разделе описаний DLL могут объявляться типы (в том числе и классы), константы и переменные, но они остаются скрытыми от вызывающей программы и могут использоваться только внутри DLL. В разделе описаний помимо стандартных для обычной программы объявлений используется специальный раздел объявления экспортируемых подпрограмм. Этот раздел начинается зарезервированным словом Exports, за которым через запятую перечисляются имена и индексы экспортируемых подпрограмм, описанных до того и помеченных директивой Export:

Library Lib;

Function Funct1 (x : real) : Real; Export;

begin

end;

Procedure Proc1 ; Export;

begin

end;

Exports

Funct1 index 1, Proc1 index2;

begin

end.

Индекс присваивается процедуре автоматически по порядку ее появления в списках Exports: первая получает индекс 0, следующая 1 и т. д. Можно явно указать индекс добавив за ее именем в списке Exports слово index и целое число без знака в диапазоне от 1 до 32767. Можно определить внешнее имя экспортируемой процедуры отличное от ее идентификатора. Для этого в списке Exports добавляется слово name и внешнее имя в кавычках:

Exports

Funct1 index 1 name ‘myFunct’;

Внешние имена критичны к регистру букв.

Вызывающая программа может ссылаться или на имя экспортируемой подпрограммы, или на ее индекс. При вызове по имени программа просматривает имена в таблице имен в поисках нужного. Так как имена могут состоять из длинных наборов символов и самих имен в таблице может быть много, процесс поиска имени существенно медленнее, чем процесс поиска индекса. Поэтому желательно ссылаться не на имя, а на индекс. Затраты времени на поиск процедуры по имени можно заметно сократить, если указать в списке Exports слово resident:

Exports

Funct1 index 1 name ‘MyFunct’ resident;

Т. к. в этом случае информация о процедуре сохраняется в памяти во все время использования библиотеки.

Для использования процедур из DLL необходимо описать их как внешние, добавив за словом External имя библиотеки и если надо индекс или имя :

Procedure Proc1 ; External ‘MyDLL1’;

Function Func1 (x: real) : real; External ‘MyDLL1’ index1;

Function MyFunct (x:real): real ; External ‘MyDLL1’ name ‘Funct1’;

Описанный способ связывания DLL с основной программой называется статическим. При этом библиотеки загружаются в память одновременно с загрузкой самой программы.

Программа может загружать и высвобождать DLL (динамически) с помощью функций: LoadLibrary, GetProcAddress и FreeLibrary.

begin //Процедура с динамической загрузкой DLL

var : DLLHandler:LongInt;

Handler := LoadLibrary(‘MyDLL1.dll’);

if DLLHandler = 0 then

begin

ShowMessage (‘DLL не найдена’);

Halt(1);

end;

{ определяем адреса процедур функций от первой до третьей по индексу, четвертой– по имени. При вызове по индексу младшее слово PChar содержит индекс, делаем приведение типов: }

@ Funct1 := GetProcAddress (Handler, Pchar (LongInt(1))) ; //Настройка дескриптора DLL

@ SubC := GetProcAddress (Handler, Pchar (LongInt(2))) ;

@ MulC := GetProcAddress (Handler, Pchar (LongInt(3))) ;

@ Proc1 := GetProcAddress (Handler,’Proc1’) ;

FreeLibrary (DLLHandler) // Освобождаем библиотеку

end;

5.17. Технологии DDE и OLE

5.18. Технология ActiveX

Подпроцессы (Threads)

Для создания дополнительного подпроцесса в программах Delphy предназначен специальный модуль (в репозитории он представлен пиктограммой Thread Object). При выборе этого модуля Delphi запрашивает имя класса, который будет дочерним для основополагающего класса TThread. Класс TThread содержит абстрактный метод Execute, который должен исполняться в подпроцессе и обязан перекрываться в потомке.

Методы и свойства объектов из библиотеки визуальных компонентов могут использоваться только в рамках вызова метода Synchronize, например:

Procedure MyThread. Execute;

begin

Synchronize (UpdateCaption );

end;

где метод UpdateCaption может быть, например, таким:

Procedure MyThread. UpdateCaption;

begin

Form1.Caption := ‘Новый текст метки’;

end;

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

Пример перекрытия абстрактного метода Execute в потомке tMyThread:

Type tMyThread=

class(tThread)

private

myField1:…;

myField2:…;

protected

procedure Execute;override;

procedure MyVisualMethod;virtual;

public

constructor create(параметры); (если нужны)

end;

var ThreadsRunning:integer;

procedure tMyThread. execute;

begin

Synchronized MyVisualMethod;

end;

procedure tMyThread, create(параметр);

begin

inberited create(false);

FreeOnTerminate:=true;

end;

procedure tMyThread. myVisualMethod;

begin

Form1.label2.caption:=…;

If Terminated then Exit;

end;

procedure Form1.StartButtonClick(Sender:tObject);

begin

aThread1:=tMyThread. create(…);

Inc(ThreadsRunning);

aThread1.onTerminate:=ThreadDone;

StartButton. enabled:=false;

aTread2:=tMyThread. reate(…);

Inc(ThreadsRunning);

aThread2.onTerminate:=ThreadDone;

….

end;

procedure Form1.ThreadDone(Sender:tObject);

begin

Dec(ThreadsRunning);

Label1.caption:=IntToStr(ThreadsRunning);

if ThreadsRunning=0 then

StartButton. enabled:=true

end;

procedure Form1.Stop1ButtonClick(Sender:tObject);

begin

aThread1.Terminate

end;

5.20. Использование библиотек OpenGL и GLU

5.21. Создание программистом собственного компонента

Литература

. Delphi 6. Учебный курс.- М.:"Нолидж", 2001.- 608 с. , . Delphi 4. Среда визуального программирования.-СПб.:БХВ – Санкт-Петербург, 1999. – 816 с. , . Программирование в среде Delphi: Учебное пособие в 4-х частях. М.: ДИАЛОГ-МИФИ, 1997-1998. . OpenGL. Графика в проектах Delphi. - СПб.:БНВ-Санкт-Петербург, 2000.-352 с. и др. Переход на Kylix для Delphi-программистов./Пер. с англ. СПб: "Питер" – 2002.- 304 с. и др. Borland Kylix. Руководство разработчика./Пер. с англ.: "Вильямс" - 2002, 880 с. Г. Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на C++, 2-е изд./Пер. с англ.-М., Бином, СПб, 2000.-560 с. Д. Чеппел. Технологии ActiveX и OLE./Пер. с англ.-М.:"Русская Редакция”,1997.-320 с. . Основы объектно-ориентированного программирования на языке Си++.-М.:Горячая линия-Телеком, Радио и связь, 1999.-208 с.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16