Павел Исаев
Delphi 8 для Microsoft .NET Framework - это интегрированная среда разработки (Integrated Development Environment), выполняющаяся на платформе Microsoft .NET и поддерживающая полный цикл жизни разработки приложений. Интерфейс среды сильно отличается от интерфейсов предыдущих версий, например от Delphi 7. Ниже мы рассмотрим создание различных типов приложений с помощью этого средства разработки.
Создание простейшего приложения Windows Forms
- Выберите опции меню File=>New=>Windows Forms Application.
- Если необходимо, можно изменить размеры формы приложения при помощи стрелок конструктора форм (Design) -
- Выберите в форме Tool Palette элемент управления Button и положите его на форму приложения. Если необходимо, измените размеры экземпляра и его свойство Text.
- Дважды щелкните по экземпляру элемента управления Button, помещенному на форму. Управление передастся кодовому редактору Code Editor, который сгенерирует каркас процедуры.
- В редакторе кода введите код: MessageBox.Show('Здравствуй, разработчик!');
- Сохраните и выполните проект, в результате чего вы увидите на экране монитора окно приложения.

После нажатия кнопки "Здравствуй, мир!" вы получите форму.

При создании приложений для платформы Windows может быть выбрана опция VCL (Visual Component Library) Forms Application, которая специально оставлена для совместимости с предыдущими версиями Delphi. Как и в приложении типа Windows Forms Application, на рабочем столе интегрированной среды разработки появится конструктор форм. Обратите внимание, что свойства и события различны для экземпляров объектов классов Form1 и TWinForm (в этом имени видим расхождение с правилами, принятыми в Delphi, - так обычно обозначаются типы) вроде TForm1 и System.Windows.Forms.Form, выполняющих аналогичные функции. При создании новых проектов мы рекомендуем использовать Windows Forms Application, как более соответствующий платформе. Среда разработки автоматически загружает необходимый конструктор форм и палитру инструментов в зависимости от выбора типа приложения.
Создание простейшего приложения VCL Forms Application
Сценарий создания приложения типа Windows VCL Application таков:
- Выберите опции меню File=>New=>Windows VCL Application.
- Если необходимо, можно изменить размеры формы приложения при помощи стрелок конструктора форм (
).
- Выберите с формы Tool Palette компонент Button и поместите его на форму приложения, изменив в случае необходимости размеры экземпляра и его свойство Caption.
- Дважды щелкните по экземпляру Button, положенному на форму. Управление передастся кодовому редактору Code Editor, который сгенерирует каркас процедуры.
- Вручную введите код: ShowMessage('Здравствуй, разработчик!');
- После сохранения и выполнения проекта на экране монитора вы увидите окно приложения.

В результате нажатия кнопки "Здравствуй, мир!" будет получена форма.

Как видно из вышеприведенных форм приложений, несмотря на мелкие отличия, в целом функциональность одинаковая. Отметим также, что в процессе конструирования приложений наборы компонентов, доступных для использования, также различаются. Кроме того, в Delphi 8 имеются и некоторые иные, по сравнению с Delphi 7, языковые конструкции, которые представлены в таблице.
Основные различия в синтаксисе языков Delphi 7 и Delphi 8:
Delphi 7 |
Delphi 8 |
Real48 |
Double |
Absolute, Addr, @ |
Не поддерживается |
GetMem, FreeMem, ReAllocMem |
New, Dispose или динамический массив |
Тип object |
Тип class |
File of любого типа, включая записи |
Streams, serialization, базы данных |
Inline assembly или asm с ключевыми словами |
Не поддерживается |
ExitProc |
Не поддерживается |
FillChar, Move |
Переопределение переменных в цикле |
PChar |
String или StringBuilder (тип String в .NET не эффективен для операций конкатенации. Используйте тип StringBuilder) |
ADO, WebBroker, InternetExpress, WebSnap и поддержка XML, связанная с компонентами TXMLTransform |
Не поддерживается |
Компоненты с закладки System: OLEContainer, DdeClientConv, DdeClientItem, DdeServerConv, DdeServerItem |
Не поддерживается |
Создание консольных приложений
Простейшее консольное приложение создается следующим образом:
- Выберите опции меню File=>New=>Other=>Delphi for .Net Projects Console Application. Форма доступа к мастерам проектов различного типа по сравнению с Delphi 7 изменилась - она приобрела вид, аналогичный форме Visual Studio .NET.

- В секции реализации автоматически сгенерированного каркаса приложения вставьте код:
WriteLn ('Hello, Delphi! - Today is ' + DateToStr (Now));
- Сохраните и выполните проект, и на экране монитора вы увидите окно приложения.

Ниже приведен пример консольного приложения, которое благодаря директивам {$IFDEF} будет одинаково хорошо работать после компиляции на Delphi for .NET, Delphi 7 или Kylix 3, выдавая соответствующую строку:
program HelloWorld;
{$APPTYPE CONSOLE}
begin
{$IFDEF CLR} // Delphi for .NET
writeln('Hello, .NET world!');
{$ENDIF}
{$IFDEF WIN32} // Delphi 7
writeln('Hello, Win32 world!');
{$ENDIF}
{$IFDEF LINUX} // Kylix
writeln('Hello, Linux world!');
{$ENDIF}
ReadLn; //чтобы задержать выполнение
end.
Следующий пример - консольное приложение, работающее с файлами:
1. Выберите опцию меню File=>New=>Other=>Delphi for .Net Projects Console Application.
2. В секции реализации автоматически сгенерированного каркаса приложения вставьте код.
var
FT: TextFile;
…..
WriteLn ('Демонстрашка работы с файлами!');
AssignFile(FT, 'file-text.txt');
ReWrite(FT);
WriteLn(FT, 'Hello, developer!');
CloseFile(FT);
…..
3. После сохранения и выполнения проекта на экране монитора появится окно приложения.

Отметим два момента, связанных с этим приложением.
Во-первых, хотя в документации ничего не говорится о невозможности работы с нетипизированными файлами, конструкция FB: file of word; не компилируется, а выдается ошибка "Unsupported language feature: typed or untyped file".
Во-вторых, оператор writeln успешно выводит на экран строку на русском языке, но при аналогичной попытке вывода в файл кодовая страница полученного текста оказывается другой. При работе же с текстовыми файлами проблем с кодовыми страницами нет.
Создание приложений с базами данных
Ниже приводится сценарий, описывающий построение ADO.NET-приложения, использующего шаблон Windows Forms Application и новую технологию BDP.NET, которая включает компоненты, необходимые для конструирования приложений с базами данных:
- Выберите опции меню File=>New=>Windows Forms Application.
- Перенесите экземпляр компонента BdpDataAdapter на форму с формы Tool Palette из раздела Borland Data Provider. При этом в Object Inspector появятся свойства этого класса. В отличие от предыдущих версий Delphi, невизуальные компоненты представлены не пиктограммой на форме приложения, а в специально отведенном окне среды разработки.

- В Object Inspector выберите Configure Data Adapter, после чего появится мастер Data Adapter Configuration. Если необходимо, выберите закладку Command, на ней - окно с выпадающим списком Connection, а из списка - элемент New connection.

В результате этих действий появится новое диалоговое окно Connection Editor. Альтернативой является использование Data Explorer, в котором свойство Connection устанавливается автоматически.

Выбрав из списка Connection СУБД необходимого вида (в нашем случае InterBase - "IBConn1"), задайте в Connection Setting свойство Database (в случае InterBase - полный путь к файлу с таблицей). При необходимости можно изменить свойства UserName и Password. Нажав кнопку Test, можно проверить правильность соединения с базой. После нажатия клавиши OK в окнах Tables и Columns формы Data Adapter Configuration появятся список таблиц и доступные поля базы данных соответственно. На закладке Select наберите строку, например для БД InterBase с именем employee.gdb запрос "select * from SALES". Выбрав закладку Preview Data и нажав кнопку Refresh, вы увидите в поле типа Memo значение полей выбранной таблицы. Выберите закладку DataSet, а в ней - кнопку выбора New DataSet и нажмите OK.
- После этого в окне конструктора появятся экземпляры компонентов DataSet и bdpConnection.
- Выберите экземпляр компонента bdpDataAdapter и его свойству Active присвойте значение True.
- Поместите на форму экземпляр компонента DataGrid, его свойство DataSource установите равным DataSet1. При этом с помощью функции Auto Format можно изменить форму представления таблицы на экране.
- Активизируйте свойство DataMember компонента DataGrid при помощи раскрывающегося списка возможных таблиц из БД. При этом на форме появляется представление данных.
- Сохранив и выполнив проект, на экране своего монитора вы увидите окно приложения.
При переносе приложения на другой компьютер важно, чтобы база данных employee.gdb лежала в определенном месте (например, d:/data) - иначе потребуется переопределять экземпляр компонента bdpConnection1.
Выравнивание таблицы относительно формы можно осуществить с помощью свойств Anchor и Dock.
При добавлении к проекту ссылок командой Add Reference… не допускается наличие пробелов в пути.
Создание приложений ASP .NET
Замечание. Если вы хотите инсталлировать Delphi 8 с целью создания приложений ASP .NET, то на компьютере уже должны быть установлены службы Internet Information Services. Если ISI были установлены после Delphi 8, то для корректной работы ASP .NET-приложения следует ввести команду:
aspnet_regiis.exe /i
Для создания приложений ASP .NET:
- Выберите опции меню File=>New=>ASP.NET Web Application, после чего появится диалог: New Item.

Задав в нем значение поля Name, определите имя и место расположения нового приложения. Нажав кнопку View Server Option, вы получите возможность ввода дополнительных параметров.

Для большинства ASP .NET-проектов расширение не требуется - достаточно нажать кнопку OK.
- Выберите с формы Tool Palette=>Web Controls компонент Button и положите его на форму приложения, изменив, если это необходимо, размеры экземпляра. Если нужно изменить название на кнопке, перейдите в Object Inspector, выберите свойство Тext и назначьте ему значение, например 'Hello, world!'.
- Дважды щелкните по экземпляру Button, помещенному на форму. Управление передастся редактору Code Editor, который сгенерирует каркас процедуры.
- Вручную введите код:
Inc(mycount);
button1.Text := ' Hello, developer!';
button1.Text := button1.Text + ' ENTER N'+IntToStr(mycount);
Предварительно в области описания глобальных переменных модуля WebForms1.pas следует определить переменную mycount.
- После сохранения и выполнения проекта на экране появится окно приложения. Обращение к приложению производится в при помощи браузера Microsoft Internet Еxplorer по команде http://localhost/helloworld/webform1.aspx.

При конструировании этого приложения проявились две функциональные особенности, свойственные технологии ASP .NET, которые отсутствовали в технологиях разработки Web-приложений до Delphi 8. Первая - ASP .NET позволяет создавать только DLL-приложения, но при этом в случае совмещения отладки через IIS и отладки в среде разработки не требуются постоянные вызовы утилиты iisreset.exe для обеспечения возможности трансляции очередной версии динамической библиотеки.
Вторая - в то же время в случае определения глобальной переменной, так как это было сделано в рассматриваемом проекте, при повторном вызове ресурса сохраняется ее предыдущее значение, а его сброс можно осуществить только применением утилит типа iisreset.exe.
Для переноса данного проекта на другую машину необходимо скопировать директорию HelloWorld в соответствующую директорию, описанную в IIS как виртуальный каталог.

Нажав кнопку Create, нужно сделать упомянутую директорию каталогом приложения (на рисунке выше приведено окно для свойств директории HelloWolrd в ОС Windows 2000 Advanced Server). После выполнения этих действий Web-приложение может быть вызвано на локальной машине командой http://localhost/HelloWorld/WebForm1.aspx или на любой другой машине, доступной с помощью протокола TCP/IP командой http://<имя компьютера>t/HelloWorld/WebForm1.aspx. Оба случая соответственно представлены на приведенных ниже рисунках.


Приведенный пример демонстрирует работу распределенных приложений с общей памятью, которой в нашем случае является переменная mycount.
Создание приложений ASP .NET с базами данных
Ниже приведен пример ASP.NET-приложения, обеспечивающего доступ к данным БД, редактирование и внесение изменений в поля БД. Доступ к данным обеспечивается Borland Data Provider (BDP) для ADO.NET.
- Выберите опции меню File=>New=>ASP.NET Web Application - появится диалог New ASP.NET Application, в котором надо заполнить поле Name. Значения остальных полей следует оставить принятыми по умолчанию.

В результате новый проект будет называться D8DBSAMPLE и располагаться в директории c:\inetpub\wwwroot\D8DBSAMPLE. А результат выполнения проекта можно будет посмотреть, дав команду браузеру http://localhost/D8DBSAMPLE/WebForm1.aspx.
Среда Delphi 8 for .NET теперь не использует конструктор HTML-страниц - вместо этого существует ASP.NET Web-форма, позволяющая использовать палитры компонентов Components, Data Components, Borland Data Provider, DB Web, Enterprise Core Objects, HTML Elements и Web Controls для различных категорий. Для работы с БД можно использовать Borland Data Provider, DB Web и Web Controls. Начнем с Borland Data Provider.
- Закладка Data Explorer всегда доступна в среде Delphi 8 for .NET. Мы будем работать с БД InterBase и ее таблицей EMPLOYEE.

Дважды щелкнув на таблице, вы увидите ее на форме в процессе конструирования.
- Если перенести на форму EMPLOYEE с Data Explorer, появятся экземпляры невизуальных компонентов BdpConnection1 и BdpDataAdapter1: первый обеспечивает соединение с сервером базы данных InterBase, второй отвечает за работу с данными таблицы EMPLOYEE БД InterBase и за обмен с кэшированными наборами данных класса DataSet.
- Далее следует щелкнуть мышью по экземпляру BdpDataAdapter1 и выбрать команду Configure the DataAdapter на палитре Object Inspector, что приведет к появлению окна Data Adapter Configuration.

- Используя списки Tables и Columns, можно выбрать комплект необходимых для вывода полей из таблицы. С помощью закладок SELECT, UPDATE, INSERT и DELETE посредством команд SQL можно пополнить коллекцию полей. Затем нужно перейти на закладку DataSet и установить опцию New DataSet, определяющую форму выходного набора данных. После закрытия диалогового окна Data Adapter Configuration в окне невизуальных компонентов появится экземпляр DataSet1.

- Свойству Active экземпляра объекта BdpDataAdapter1 присвойте значение Тrue, щелкнув по экземпляру и перейдя на палитру Object Inspector.
- Выберите с формы Tool Palette=>Web Controls компонент DataGrid и положите его на форму приложения. Если необходимо, измените размеры экземпляра.
- Для экземпляра DataGrid 1 установите свойство DataSource равным DataSet1, а свойство DataMember равным EMPLOYEE, выбрав их из ниспадающих списков. Прототип таблицы вывода появится в окне конструирования, но не с реальными значениями полей, а с некими заменителями ("abc" - для полей строкового типа, "2003-12-29 00:00:00" - для полей типа дата и т.п.).
- Можно также определить автоматическое форматирование таблицы при помощи диалогового окна Auto Format (например, Professional 1).
- Выбор команды Property Builder с палитры Object Inspector приводит к появлению диалога Data Grid properties, в котором можно изменить ключевое поле.

- Выберите команду Column и отмените опцию Create columns automatically at run-time.

- Выберите команду Paging.

|
|
Создание и применение Web-сервисов
Web-сервисы создаются аналогично ASP.NET-приложениям.
Создание Web-сервиса
- Выберите опции меню File=>New=>Other. New Item - появится диалог, в котором надо выбрать иконку ASP.NET Web Service Application. В результате новый проект будет называться FirstWebServiceApplication и располагаться в директории c:\inetpub\wwwroot\FirstWebServiceApplication.


- Результат выполнения проекта можно будет посмотреть, набрав в браузере команду http://localhost/FirstWebServiceApplication/WebService1.asmx.
- Раскрыв тело модуля WebService1.pas (такое имя присваивается по умолчанию), добавьте в описание типов текст за оператором [WebMethod] (только методы, следующие за этим оператором, являются удаленно доступными) следующий текст: function Mult(p1, p2: integer): integer - это описание нашей функции, доступ к которой предоставляется через механизм сервисов.
- Тело функции будет иметь такой вид:
function TWebService1.Mult(p1, p2: integer): integer;
begin
Result := p1 * p2;
end;
- Откомпилировав проект, сразу же можно обратиться к нему с помощью стандартного клиентского приложения, задав приведенный выше URL-адрес.

Выбрав функцию, предоставляемую приложением (в нашем случае единственную - Mult), задав значение фактических параметров и нажав кнопку Invoke, получим результат в виде XML-файла.


- Необходимо отметить, что средства среды разработки Web-сервисов, предоставляемые Delphi 8, стали гораздо более удобными по сравнению с реализованными в Delphi 7, причем они аналогичны по технологическому решению тем, что предоставляются средой разработки Visual .NET.
|
|
Создание клиента для Web-сервиса
Теперь можно создать клиентское приложение, использующее этот же сервис.
- Для этого создайте Windows Forms Application и к нему при помощи команд Project=>Add Web Reference добавьте ссылку на Web-сервис.

- Введите в окне запросов http://localhost/FirstWebServiceApplication/WebService1.asmx и нажмите кнопку Add reference, которая теперь стала доступной. Нажав на нее, вы создадите новый модуль localhost.WebService1, поддерживающий интерфейс между объектами Web-сервиса и вашим приложением. В модуле приложения, где предполагается применять эти функции, в операторе uses необходимо добавить описание этого модуля. В данном случае это модуль FirstWebClientApplication, причем добавление должно быть в секции интерфейса, так как класс TWebService1 используется внутри класса TWinForm.


- Поместив на форму необходимые компоненты и добавив для события нажатия кнопки код
procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs);
begin
Label1.Text := IntToStr(FirstService.Mult(StrToInt(TextBox1.Text),
StrToInt(TextBox2.Text)));
end;
вы получите клиентское приложение, обеспечивающее за счет Web-сервиса умножение двух целых чисел.

Дополнительная информация