Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию    
    главная     хостинг     создание сайтов    
Поиск по сайту:  
Смотрите также
Языки программирования
C#
MS Visual C++
Borland C++
C++ Builder
Visual Basic
Quick Basic
Turbo Pascal
Delphi
JavaScript
Java
PHP
Perl
Assembler
AutoLisp
Fortran
Python
1C

Интернет-технологии
HTML
VRML
HTTP
CGI
FTP
Proxy
DNS
протоколы TCP/IP
Apache

Web-дизайн
HTML
Дизайн
VRML
PhotoShop
Cookie
CGI
SSI
CSS
ASP
PHP
Perl

Программирование игр
DirectDraw
DirectSound
Direct3D
OpenGL
3D-графика
Графика под DOS

Алгоритмы
Численные методы
Обработка данных

Системное программирование
Драйверы

Базы данных
MySQL
SQL

Другое

Хостинг


Друзья
demaker.ru
Реклама

Лучший хостинг. Аренда серверов




helloworld.ru

Delphi 4 — основные новинки и возможности

Алексей Федоров

Новая версия средства быстрой разработки Windows-приложений Delphi интересна не только своей новизной, но и тем, что это — продукт фирмы, выступающей уже под новым названием — INPRISE Corporation. Тем не менее знакомое всем название Borland сохраняется в виде тороговой марки, под которой объединены все средства разработки: Delphi, C++Builder и JBuilder.

Новинки в среде разработчика

В новой версии Delphi произошел ряд изменений и улучшений в среде разработчика. Среди них — “плавающие” окна, расширения функциональности, средства управления проектами, различные улучшения в редакторе и отладчике.

“Плавающие окна”

Главное окно Delphi 4 теперь состоит из ряда “плавающих” окон, каждое из которых может перемещаться по экрану. Это относится к панели инструментов, палитре компонентов и меню. Так, например, можно “растянуть” панель инструментов в один ряд и переместить палитру компонентов так, как это показано на следующем рисунке.
wpe1.jpg (26426 bytes)
Процесс перемещения компонентов главного окна прост и интуитивен, и мы не будем тратить время на его подробное описание. Отметим лишь то, что любой элемент, имеющий слева специальную полоску, которая называется move handle, может быть перемещен в любое место главного окна, а также размещен в виде отдельного окна. Кроме того, есть возможность отменить для любого окна docking-style. В общем, вы настраиваете среду максимально удобным для вас образом.

Code Explorer

Ряд полезных дополнений появился в редакторе кода. К ним относится, например, возможность автоматического создания шаблонов для методов, процедур и функций, опиcанных в секции объявления. Например, если мы введем новый метод Demo:

    type
    TForm1 = class(TForm)
    private
    { Private declarations }
    procedure Demo(S : String);
    public
    { Public declarations }
    end;

и подведем курсор к его описанию, то при нажатии комбинации клавиш Ctrl-Shift-C получим следующий шаблон в секции implementation:

    procedure TForm1.Demo(S: String);
    begin
    end;

Таким образом, сокращается время на выполнение ряда рутинных операций. Если мы объявим более одного метода:

    type
    TForm1 = class(TForm)
    private
    { Private declarations }
    procedure Demo(S : String);
    procedure Demo1(S : String);
    procedure Demo2(S : String);
    procedure Demo3(S : String);
    public
    { Public declarations }
    end;

то при выполнении указанной выше операции мы автоматически получим шаблоны для всех объявленных методов. Для перемещения между описаниями методов и их реализацией следует использовать комбинации клавиш Ctrl-Shift-UpArrow и Ctrl-Shift-DownArrow. Эта возможность распространяется также и на обычные процедуры и функции.

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

    type
    TForm1 = class(TForm)
    private
    { Private declarations }
    public
    { Public declarations }
    property DemoProp : String;
    end;

нажатие комбинации клавиш Ctrl-Shift-C приведет к автоматической генерации следующего кода:

    type
    TForm1 = class(TForm)
    private
    FDemoProp: String;
    procedure SetDemoProp(const Value: String);
    { Private declarations }
    public
    { Public declarations }
    property DemoProp : String read FDemoProp
    write SetDemoProp;
    end;

и создания следующего метода в секции реализации:

    procedure TForm1.SetDemoProp(const Value: String);
    begin
    FDemoProp := Value;
    end;

Данная технология называется Class Completion.

Module Explorer

Module Explorer — это окно, располагаемое по умолчанию слева от редактора кода. Иерархическое представление составных частей нашей программы — методов, процедур, функций, переменных и констант, используемых модулей позволяет легко перемещаться по исходному тексту.
wpe3.jpg (71089 bytes)
wpe4.jpg (36666 bytes)
Различные настройки Module Explorer задаются на вкладке Explorer в панели Environment Options, вызываемой по команде Tools | Environment Options.

Code browser

В редакторе кода, если держать нажатой клавишу Ctrl и перемещать курсор мыши по именам классов, свойств, методов и других идентификаторов, курсор мыши изменит свой внешний вид. Если теперь нажать кнопку мыши на выделенном идентификаторе, редактор кода перейдет в то место, в котором содержится объявление данного идентификатора и, при необходимости, откроет файл с иходным текстом.

Project Manager

Новая версия утилиты Project Manager поволяет объединять вместе несколько проектов. Это облегчает работу над проектами, которые содержат более одного исполняемого файла. Используется один исполняемый файл и несколько DLL или комбинация из нескольких DLL, ресурсов и исполняемых файлов.
wpe5.jpg (53358 bytes)
Как показано на приведенном выше рисунке, при работе с большим проектом довольно удобно присоединить окно ProjectManager к редактору кода — в этом случае вы сможете свободно перемещаться по элементам проекта (проектов) и функциональным блокам программы.

Добавлять к проекту новые элементы можно не командой File | New, а через нажатие правой кнопки мыши в группе проектов и выбор необходимого компонента.

В Delphi 4 введено понятие групы проектов как совокупности проектов исполнимых модулей (exe и dll), ресурсов и т.п. Файлы групп проектов сохраняются с расширением .BPG и представляют собой команды make:

    #———————————————————————————————
    VERSION = BWS.01
    #———————————————————————————————
    !ifndef ROOT
    ROOT = $(MAKEDIR)\..
    !endif
    #———————————————————————————————
    MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$**
    DCC = $(ROOT)\bin\dcc32.exe $**
    BRCC = $(ROOT)\bin\brcc32.exe $**
    #———————————————————————————————
    PROJECTS = Project1.exe
    #———————————————————————————————
    default: $(PROJECTS)
    #———————————————————————————————
    Project1.exe: Project1.dpr
    $(DCC)

При этом проект, как и ранее, представляет собой программу на языке Pascal:

    program Project1;
    uses
    Forms,
    Unit1 in ‘Unit1.pas’ {Form1};
    {$R *.RES}
    begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
    end

Отладчик

В Delphi 4.0 появился ряд полезных дополнений, помогающих облегчить процесс отладки разрабатываемых приложений. Выполните команду View | Debug Windows, и вы получите список различных окон, которые отображают информацию, полезную при отладке программ.
wpe6.jpg (12815 bytes)

Назначение этих окон перечислено в следующей таблице.

Окно Описание
Breakpoints Отображает список точек останова
Call Stack Отображает стек вызовов
Watches Отображает список контролируемых величин
Local Variables Отображает локальные переменные для текущей области видимости
Threads Отображает статус потоков
Modules Отображает список модулей
CPU Отображает состояние регистров центрального процессора

Давайте кратко рассмотрим использование некоторых из этих окон. Начнем с окна Modules, в котором отображается список модулей (DLL), используемых нашим приложением.

В левой верхней части окна перечислены используемые модули, в нижней — модули, из которых собрано наше приложение. В правой части перечислены процедуры и функции, реализованные в данном модуле. Отсюда вы можете перейти в окно просмотра дизассемблера и регистров процессора — CPU Window. Достаточно выбрать какую-либо процедуру или функцию и дважды щелкнуть по ее имени.
wpe8.jpg (45803 bytes)
Окно дизассемблера и регистров процессора позволяет отслеживать и модифицировать состояние регистров процессора и просматривать ассемблерный код выбранных процедур, функций и методов. Нажатие правой кнопки мыши обеспечивает доступ к набору команд: Run to Current, Toggle Breakpoint, Go to Address, Go to Current EIP, Follow, Caller, Previous, Search, View Source, Mixed, Change Thread и New EIP.
wpe9.jpg (70813 bytes)
Окно EventLog служит для просмотра протокола событий, происходящих в системе во время работы вашей программы. Это окно может показать процесс загрузки стандартных компонентов Windows, таких как OLEAUT32.DLL или KERNEL32.DLL, а также отобразить стандартные сообщения Windows, сообщения типа WM-MOUSEMOVE и сообщения, выводимые с помощью функции OutputDebugString.
wpeA.jpg (49179 bytes)
Например, если мы напишем в обработчике нажатия кнопки следующий код:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    OutputDebugString(‘Отладочное сообщение’);
    end;
    то сможем прочитать его в окне EventLog.

Это очень удобно при отладке приложений, особенно если использовать директивы условной компиляции $DEFINE и $IFDEF. Например:
wpeB.jpg (9689 bytes)

    {$DEFINE DEBUG}
    ...
    {$IFDEF DEBUG}
    // Если задан режим отладки
    ...
    OutputDebugString(‘Отладочное сообщение’);
    ...
    {$ENDIF}

Дополнительные возможности отладчика

В отладчике появилась возможность просмотра значений идентификаторов. Проще показать это на примере. Создайте новое приложение (File | New Application). Расположите в форме кнопку, в обработчике которой напишите следующий код:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    ShowMessage(‘Hello’);
    end;

Клавишей F5 установите точку останова на строке с вызовом метода ShowMessage.
wpeC.jpg (7435 bytes)
Теперь запустите приложение и нажмите кнопку. Программа остановится на точке останова. Прокрутите исходный текст программы до того места, где объявляется переменная Form1:

    var
    Form1: TForm1;

Установите курсор на Form1 и дважды щелкните мышью для того, чтобы выбрать слово Form1. Теперь нажмите правую кнопку мыши и в меню выберите команду Debug | Inspect. В результате этих действий на экране появится окно Debug Inspector.
wpeD.jpg (14804 bytes)
Как видно из приведенного рисунка, вкладки Data, Methods и Properties позволяют изучить значения величин (переменных, констант и свойств)и адреса методов. Если у нас используются какие-то компоненты (в данном примере TButton), то мы можем вызвать окно просмотра и для данного компонента.

Удаленный отладчик

Delphi поддерживает удаленную отладку EXE, DLL и пакетов, содержащих отладочную информацию. При удаленной отладке используются следующие компоненты:

  • Клиентская среда, предоставляющая пользовательский интерфейс для отладки (delphi32.exe).
  • Отладочный сервер на удаленной машине (borrdbg.exe). В функции сервера входит управление отлаживаемой программой и взаимодействие (через сетевое соединение) с клиентской средой. Отладочный сервер использует две специальные библиотеки — bordbk40.dll и dcc40.dll.

Для установки поддержки удаленной отладки следует запустить программу setup.exe из каталога RDEBUG на CD Delphi 4.0.

Расширения языка

В Delphi 4.0 появился ряд новых расширений языка, среди которых можно выделить следующие:

  • динамические массивы;
  • перегрузка методов;
  • параметры по умолчанию;
  • 64-битные целые;
  • 32-битные беззнаковые целые.

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

В дополнение к обычным статическим массивам, которые объявляются, например, как:

    myArray : Array[0..255] of Byte; // Статический массив

в Delphi 4.0 введена возможность объявления динамических массивов. В данном случае вы задаете лишь тип элементов массива и размерность самого массива, не указывая при этом число элементов:

myArray : Array of Byte; // Динамический массив

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

    SetLength(myArray, 16);

В результате вы получите массив, состоящий из 16 байт, с индексами от 0 до 15. Чтобы освободить память, отведенную под динамический массив, достаточно присвоить переменной значение nil:

    myArray := nil;

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

    var
    myArray, myCopy : Array of Byte;
    begin
    SetLength(myArray, 16);
    myArray[15] := $FF; // 255
    myCopy := myArray;
    myCopy[15] := $80; // 128
    end;

В результате работы данного кода значение myArray[15] будет не 255, как ожидается, а 128, так как myArray и myCopy используют одну и ту же область памяти.

При работе с динамическими массивами возможно использование функций Length (возвращает число элементов в массиве), High (возвращает самый большой индекс массива) и Low (возвращает самый маленький индекс массива). Например:

    var
    myArray : Array of Byte;
    I : Byte;
    begin
    SetLength(myArray, 16);
    for I := Low(myArray) to High(myArray) do
    begin
    myArray[I] := $FF;
    end;
    end;

Помимо создания одномерных динамических массивов в Delphi 4 возможно создание и многомерных динамических массивов. Например:

    var
    myArray : array of array of byte;
    I, J : Integer;
    begin
    SetLength(myArray, 16);
    for I := Low(myArray) to High(myArray) do
    begin
    SetLength(myArray [I], I);
    for J := Low(myArray[I]) to High(myArray[I]) do
    myArray[I,J] := I*J;
    end;
    end;

Перегрузка функций и методов

Возможность перегрузки функций и методов выла введена в Delphi 4.0 в первую очередь для обеспечения более простого взаимодействия между Delphi, C++Builder и JBuilder. Так, например, в С++ любой класс может иметь несколько методов с одинаковыми именами, каждый из которых отличается от другого только набором параметров. Введение перегрузки методов в Delphi позволяет обеспечить поддержку синтаксиса C++.

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

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

Такой подход делает ваш код более простым, его легче сопровождать и расширять. Давайте посмотрим, как это работает. Сначала напишем объявления двух наших методов, которые должны находиться в секции private:

    type
    TForm1 = class(TForm)
    ...
    private
    { Private declarations }
    function OverloadDemo(val : Byte) : string; overload;
    function OverloadDemo(val : Char) : string; overload;
    public
    { Public declarations }
    end;

Вот код, который реализует эти методы:

    function TForm1.OverloadDemo(val: Byte): string;
    begin
    ShowMessage(‘Параметр типа Byte = ‘+IntToStr(val));
    end;
    function TForm1.OverloadDemo(val: Char): string;
    begin
    ShowMessage(‘Параметр типа Char = ‘+val);
    end;

Затем добавим в форму две кнопки, в обработчике события onClick первой из них напишем вызов функции OverloadDemo с параметром типа Byte:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    OverloadDemo($ff)
    end;

а в обработчике второй — вызов функции OverloadDemo c параметром типа Char:

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    OverloadDemo(‘A’)
    end;

Запустим наше приложение и поочередно нажмем одну и другую кнопку. В первом случае мы получим сообщение “Параметр типа Byte = 255”, во втором — “Параметр типа Char = А”.
wpeF.jpg (24957 bytes)
Отметим, что если вы объявили виртуальный метод с ключевым словом overload, то вы также должны использовать ключевое слово reintroduce для того, чтобы переопределить этот метод в объектах-наследниках. Например:

    type
    TClass1 = class(TObject)
    function OverloadDemo (val: Byte) : string;
    overload; virtual;
    end;
    TClass2 = class(TClass1)
    function OverloadDemo(val : Char) : string;
    reintroduce; overload;
    end;
    ...
    SomeObject := TClass2.Create;
    // Вызывается TClass2.OverloadDemo
    SomeObject.OverloadDemo (‘A’);
    // Вызывается TClass1.OverloadDemo
    SomeObject.OverloadDemo ($ff);

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

С помощью параметров по умолчанию можно присваивать значения по умолчанию параметрам, передаваемым процедурам и функциям. Предположим у нас есть процедура, которая выводит на экран приветствие. Эта процедура объявлена следующим образом:

procedure Hello(Name : String = ‘Без имени’);

а ее код выглядит так:

    procedure TForm1.Hello(Name: String);
    begin
    ShowMessage(‘Здравствуйте, ‘ + Name);
    end;

Расположим в форме две кнопки — Hello1 и Hello2. В обработчике события onClick первой кнопки напишем следущий код:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Hello
    end;

а в обработчике второй — такой код:

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Hello(‘Алексей’)
    end;

wpe10.jpg (19234 bytes)

В первом случае процедура Hello вызывается без параметров и используется параметр по умолчанию. В результате на экране мы увидим сообщение “Здравствуйте, Без имени”. Во втором случае процедура Hello вызывается с указанием параметра — на экране мы увидим сообщение “Здравствуйте, Алексей”.

64-битные целые

Для поддержки целочисленных значений, которые могут иметь очень большие величины для представления в виде 32-битного типа LongInt, в Delphi 4 введен новый тип данных — Int64 (64-битные целые). Диапазон значений этого типа данных — от –263 до 263 –1. Функции High, Low, Succ, Pred, Inc, Dec, IntToStr, IntToHex, Round и Trunc поддерживают тип Int64. Для поддержки нового типа данных также введены две новые функции StrToInt64 и StrToInt64Def.

32-битные беззнаковые целые

В Delphi 4 введен новый тип данных LongWord, представляющий собой 32-битовые беззнаковые целые числа, находящиеся в диапазоне от 0 до 4 294 967 295. Тип данных Cardinal в Delphi 4 эквивалентен LongWord.

Ключевое слово Implements

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

    TSomeIClass = class(TInterfacedObject, IOne, ITwo)

При этом интерфейсы IOne и ITwo должны были быть реализованы внутри класса TSomeIClass. Теперь мы можем “разнести” реализацию интерфейсов по отдельным классам, написав следующее объявление класса TSomeIClass:

    TSomeIClass = class
    private
    FOne : TOne;
    FTwo : TTwo;
    published
    property One : TOne read FOne implements IOne;
    property Two : TTwo read FTwo implements ITwo;
    end;

В данном объявлении класса мы указываем, что интерфейсы IOne и ITwo реализуются в своих собственных классах TOne и TTwo, что намного нагляднее и проще для реализации. Продемонстрированный выше подход называется делегированием интерфейсов.

Обратите внимание, что интерфейсы Delphi являются неотъемлемой частью языка Object Pascal и в своей основе никак не связаны с моделью COM. При этом совместимость с моделью COM составляет 100%.

Расширения в библиотеке VCL

Ряд расширений и изменений коснулся и библиотеки Visual Component Library (VCL). Эти новинки рассматриваются ниже.

Методы AfterConstruction и BeforeDestruction

Класс TObject пополнился двумя методами — AfterConstruction и BeforeDestruction, кторые доступны всем классам, так как известно, что TObject является предком для всех классов, создаваемых в Delphi.

Как следует из их названия, метод AfterConstruction вызывается автоматически сразу же после после конструктора объекта, метод BeforeDestruction — перед деструктором. Введение этих методов вызвано тем, что в некоторых ситуациях нам требуется вызвать метод сразу же после конструктора и непосредственно перед деструктором.

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

    //—————————————————————//
    // Пример использования методов
    // AfterConstruction и BeforeDestruction
    //—————————————————————//
    program D4Demo;
    uses
    SysUtils, Dialogs;
    type
    TDemo = class
    constructor Create; virtual;
    destructor Destroy; override;
    procedure AfterConstruction; override;
    procedure BeforeDestruction; override;
    public
    S : String;
    end;
    { TDemo }
    procedure TDemo.AfterConstruction;
    begin
    Inherited;
    ShowMessage(S);
    end;
    procedure TDemo.BeforeDestruction;
    begin
    S := ‘Destructed...’;
    Inherited;
    end;
    constructor TDemo.Create;
    begin
    Inherited;
    S := ‘Constructed...’;
    end;
    destructor TDemo.Destroy;
    begin
    ShowMessage(S);
    Inherited;
    end;

    { Основная программа }
    var
    Demo : TDemo;
    begin
    Demo := TDemo.Create;
    Demo.Free;
    end.

Свойство Constraints для визуальных компонентов

Данное свойство позволяет задать минимальный и максимальный размер компонента. Свойство Constraints имеет тип TSizeConstraints, который содержит поля Control (для задания компонента, размеры которого устанавливаются) и MaxHeight, MaxWidth, MinHeight и MinWidth для непосредственного задания максимальных и минимальных значений высоты и ширины компонента.

Приведем небольшой пример использования свойства Constraints. Расположим в форме две кнопки (TButton) и компонент TMemo. В обработчике нажатия первой кнопки напишем следующий код:

    //
    // “Зафиксировать” размер компонента
    //
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    with Memo1 do
    begin
    Constraints.MinHeight := Height;
    Constraints.MinWidth := Width;
    Constraints.MaxHeight := Height;
    Constraints.MaxWidth := Width;
    end;
    end;


а в обработчике второй — такой код:

    //
    // Уменьшить ширину и высоту на 50 пискелов
    //
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    with Memo1 do
    begin
    Height := Height - 50;
    Width := Width - 50;
    end;
    end;

Если вы нажмете сначала первую кнопку, а затем вторую, изменения размера компонента TMemo не произойдет, так как он “зафиксирован” с помощью свойства Constraints. Если же после запуска программы вы сразу же нажмете вторую кнопку, размер компонента TMemo изменится.

Плавающие окна (docking windows)

В Delphi 4.0 появилась программная поддержка создания плавающих окон, которые могут “прикрепляться” к форме или другим компонентам. Ниже перечислены шаги, которые необходимо предпринять для того, чтобы преобразовать стандартную форму или компонент в площадку, куда можно “прикреплять” другие окна.

  1. Установите значение свойства DockSite в True.
  2. Установите значение свойства DragKind “плавающего” компонента в dkDock.
  3. Установите значение свойства DragMode “плавающего” компонента в dmAutomatic.
  4. Запустите приложение
  5. Теперь вы можете двигать “плавающие” компоненты.

Списки действий (TActionList)

Одной из новинок в Delphi 4.0 является введение понятия списков действий (action list) и соответствующих средств, обеспечивающих их поддержку. Данная тема заслуживает отдельного рассмотрения — этому будет посвящена статья в следующем номере КомпьютерПресс. Здесь же хочется отметить, что списки действий представляют собой специальные невизуальные компоненты, позволяющие группировать обработчики событий для других компонентов, включая формы и модули данных.

Новые компоненты

В Delphi 4.0 появился ряд новых интерфейсных элементов — компоненты TMonthCalendar, TPageScroller и TControlBar, назначение и использование которых рассматриваются ниже.

Компонент TMonthCalendar

Компонент TMonthCalendar (страница Win32 панели компонентов) представляет собой календарь, в котором пользователь может выбирать дату или диапазон дат. Давайте рассмотрим некоторые из свойств и методов этого компонента.

Свойство CalColors позволяет задать или изменить цвет фона всего компонента (BackColor), фона, на котором будет отображаться календарь (MonthBackColor), фона текста для дней (TextColor), текста дней недели (TitleBackColor), названия месяца (TitleTextColor) и текста для дней, не входящих в текущий месяц (TrailingTextColor). Обычно значения этих цветов задаются в момент разработки программы в ObjectInspector, но вы можете изменить их и программно. Ниже показано, как это сделать:

    procedure TForm1.Button1Click(Sender: TObject);
    var
    CC : TMonthCalColors;
    begin
    // Создать экземпляр TMonthCalColors
    CC := TMonthCalColors.Create(MonthCalendar1);
    // Задать цвет текста
    CC.TextColor := clWhite;
    // Уничтожить экземпляр
    CC.Free;
    end;

Свойство Date (тип TDate) содержит дату, выделенную в календаре. В момент запуска программы это свойство содержит текущую системную дату. Это свойство можно также использовать и для установки даты.

Свойство FirstDayOfWeek позволяет задать порядок следования дней недели в календаре. По умолчанию используются системные установки (dowLocaleDefault), но при необходимости это могут быть понедельник (dowMonday), вторник (dowTuesday)… воскресенье (dowSunday).

Свойства ShowToday и ShowTodayCircle позволяют указать, должен ли календарь отображать текущую дату и должна ли она быть выделена.

Также имеется возможность отображения номера недели — для этого используется свойство WeekNumbers.

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

    procedure TForm1.MonthCalendar1Click(Sender: TObject);
    begin
    {Показать выбранную дату}
    Edit1.Text := DateToStr(MonthCalendar1.Date);
    end;

Так как дата хранится в формате TDate, для вывода ее в виде текстовой строки необходимо выполнить преобразование — для этого мы используем функцию DateToStr.

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

Пример использования ряда свойств компонента TMonthCalendar показан ниже:
wpe12.jpg (45858 bytes)

    unit MCUnit;
    interface
    uses
    Windows, Messages, SysUtils, Classes, Graphics,
    Controls, Forms, Dialogs,
    StdCtrls, ComCtrls;
    type
    TForm1 = class(TForm)
    MonthCalendar1: TMonthCalendar;
    Edit1: TEdit;
    ComboBox1: TComboBox;
    DateTimePicker1: TDateTimePicker;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    procedure MonthCalendar1Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure DateTimePicker1Change(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure CheckBox2Click(Sender: TObject);
    procedure CheckBox3Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;
    var
    Form1: TForm1;
    implementation
    {$R *.DFM}
    procedure TForm1.MonthCalendar1Click(Sender: TObject);
    begin
    {Показать выбранную дату}
    Edit1.Text := DateToStr(MonthCalendar1.Date);
    end;
    procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
    {Изменить значение свойства FirstDayOfWeek}
    with ComboBox1 do
    begin
    MonthCalendar1.FirstDayOfWeek :=
    TCalDayOfWeek(ItemIndex);
    {Показать текущую дату}
    MonthCalendar1Click(Self);
    end;
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    {Выбрать первый элемент из списка}
    ComboBox1.ItemIndex := 0;
    end;
    procedure TForm1.DateTimePicker1Change(Sender: TObject);
    begin
    MonthCalendar1.Date := DateTimePicker1.Date;
    {Показать текущую дату}
    MonthCalendar1Click(Self);
    end;
    procedure TForm1.CheckBox1Click(Sender: TObject);
    begin
    {Включить/Отключить отображение номеров недель}
    MonthCalendar1.WeekNumbers :=
    (Sender As TCheckBox).Checked;
    end;
    procedure TForm1.CheckBox2Click(Sender: TObject);
    begin
    {Включить/Отключить отображение текущей даты}
    MonthCalendar1.ShowToday :=
    (Sender As TCheckBox).Checked;
    end;
    procedure TForm1.CheckBox3Click(Sender: TObject);
    begin
    {Включить/Отключить выделение текущей даты}
    MonthCalendar1.ShowTodayCircle:=
    (Sender As TCheckBox).Checked;
    end;
    end.

Примечание. Компонент TMonthCalendar игнорирует значение свойства BiDiMode и отображает дату в соответствии с текущими системными установками.

Компонент TPageScroller

Данный компонент (страница Win32 панели компонентов) аналогичен по функциональности компоненту TScrollBox, за исключением того, что он обеспечивает прокрутку только по одному направлению — по горизонтали (значение свойства Orientation равно soHorizontal) или по вертикали (значение свойства Orientation равно soVertical).

Свойство AutoScroll позволяет указать, будет ли осуществляться автоматическая прокрутка при попадании курсора мыши в область скроллера или нет.

Размер области скроллера задается свойством ButtonSize, а отступ границы этой области от содержимого — с помощью свойства Margin.

Использование данного компонента лучше всего показать на примере. Создайте новое приложение, разместите в нем компонент TPageScroller и установите значение его свойства Align равным alClient. Затем поместите в форму, например, компонент TMemo и запустите приложение. Измените размер окна приложения. Вы увидите, что справа (или слева) появилась область для скроллирования.
wpe13.jpg (30592 bytes)
Данный компонент используется как контейнер — в нем размещаются другие компоненты. Чаще всего вы будете использовать компонент TPageScroller для создания панелей инструментов. В этом случае вы сначала располагаете в форме компонент TPageScroller, затем в нем — компонент TPanel и соответствующие интерфейсные элементы — кнопки, списки и т.п. При изменении размера окна у вас появится доступ ко всем элементам панели — вы сможете скроллировать ее содержимое.

Компонент TControlBar

Этот компонент (страница Additional панели компонентов) служит в качестве “подложки” для элементов инструментальной панели. Отличием данного компонента от TPanel является то, что отдельные элементы могут перемещаться внутри него. Лучшим примером использования данного компонента является сама среда Delphi 4.0  посмотрите, как работают панели инструментов в верхней части экрана.
wpe14.jpg (29166 bytes)
На следующих рисунках показано, как можно использовать компонент TControlBar для размещения нескольких компонентов TPanel — эти компоненты могут перемещаться внутри TControlBar. Значение свойства AutoSize установлено в True.

Примечание. Для того чтобы панели (или другие элементы) могли перемещаться внутри компонента TControlBar, значение свойства DockSite должно быть установлено в True.

Новые компоненты для Internet

На смену компонентам ActiveX фирмы NetManage, обеспечивавшим создание Internet-приложений в предыдущих версиях Delphi, в версии 4.0 появились VCL-компоненты FastNet, разработанные фирмой NetMasters.
wpe15.jpg (13477 bytes)
Бесплатные обновления данных компонентов можно получить на Web-узле фирмы по адресу: http://www.netmastersllc.com/.

ActiveX и COM

При выполнении команды File | New… мы попадаем в диалоговую панель New, на вкладке ActiveX которой мы найдем несколько новых иконок, среди них — Automation Object для создания контроллеров Automation и COM Object для создания небольших COM-объектов, не поддерживающих Automation. Последние могут при необходимости влючать в себя библиотеку типов.
wpe16.jpg (25673 bytes)
Delphi 4 предоставляет разработчикам полную поддержку COM и текущих расширений этой модели в области многопоточности (MTS). Вам предоставляется полный спектр потоковых моделей: single, apartment, STA (Single Thread Apartment), free, MTA (Multi Thread Apartment) и both (сочетание apartment и free).
wpe17.jpg (21092 bytes)

Редактор библиотек типов позволяет просматривать и редактировать библиотеки типов либо в формате IDL, либо в Object Pascal (по умолчанию). Поддерживается экспорт библиотек типов либо в Microsoft IDL, либо в CORBA IDL.
wpe18.jpg (21280 bytes)

Поддержка MTS

Технология Microsoft Transaction Server (MTS) представляет собой попытку фирмы Microsoft превратить COM в некоторое подобие CORBA. Она является средой выполнения, работающей на сервере, и обеспечивает сервисы транзакций, защиту данных, управление ресурсами и внедрение распределенных COM-приложений на сервере.

В состав Delphi 4 Client/Server Suite входит полный набор средств, предназначенных для создания приложений, использующих сервисы MTS. Создание приложения начинается с выполнения команды File | New и выбора вкладки Multitier. Затем вы выбираете либо MTS Object, либо MTS Data Module. И в том, и в другом случае вам необходимо создать ActiveX Library, что произойдет автоматически при выборе соответствующего “мастера”.

Объект MTS представляет Automation с двойственным интерфейсом, реализующий интерфейс IObjectControl и обеспечивающий доступ к объекту, реализующему интерфейс IObjectContext. Эти два интерфейса являются ключевыми для объекта MTS.

Модуль данных MTS data module (TMtsDataModule) является таким же, как и объект MTS, но его предком является класс TRemoteDataModule, а не TMtsAutoObject. Структура объектов создается с помощью редактора библиотеки типов, где вы задает необходимые характеристики объекта — флаги, поддержку транзакций и т.п.

После того как MTS-объект создан, вы устанавливаете его с помощью команды Run | Install MTS Objects...

Поддержка CORBA

Помимо MTS Delphi 4 поддерживает создание объектов CORBA (Common Object Request Broker Architecture), базирующихся на стандарте OMG. CORBA-клиенты могут обращаться к CORBA-объектам, реализованным на удаленных серверах. Следует отметить, что в отличие от MTS CORBA не является Windows-специфичным протоколом и, таким образом, CORBA-клиенты могут взаимодействовать с объектами не на Windows-платформах.

Delphi 4 Client/Server Suite содержит ряд средств для создания CORBA-объектов. Вы начинаете работу с выполнения команды File | New и выбора вкладки Multitier. Затем вы выбираете либо CORBA Object, либо CORBA Data Module. Вы используете редактор библиотеки типов для задания основных характеристик объекта. Для того чтобы объекты могли “общаться” друг с другом, необходим специальный “мост”, называемый ORB (Object Request Broker). В состав Delphi для этих целей входит Inprise VisiBroker.

В следующей таблице перечислены основные классы, обеспечивающие поддержку технологии CORBA.

TcorbaComObjectFactory TCorbaConnection TCorbaDataModule
TcorbaDispatchStub TCorbaFactory TCorbaImplementation
TcorbaInterfaceIDManager TCorbaListManager TCorbaObjectFactory
TcorbaSkeleton TCorbaSkeletonManager TCorbaStub
TcorbaStubManager TCorbaVCLComponentFactory TORB

 

Управление базами данных

Компонент TTable теперь содержит новые редакторы, позволяющие изменить модель хранения данных. Задав значение свойства TableName, вы можете переименовать или даже удалить саму таблицу. Если вы задали имя несуществующей таблицы, вы можете, используя редакторы для свойств FieldDefs и Indexdefs, создать новую таблицу прямо в дизайнере форм.
wpe19.jpg (2683 bytes)
В состав Delphi 4 входит BDE 5, оспечивающий доступ к Access 97, расширенным типам полей Oracle 8, включая абстрактные типы данных (ADT), массивы, ссылки и вложенные таблицы. Для этого в библиотеке VCL реализованы новые классы — TADTField, TReferenceField, TDataSetField и TArrayField.

Компонент TDBGrid также поддерживает отображение ADT и вложенных таблиц.

Компоненты TQuery поддерживают запросы на языке SQL, которые можно создавать с помощью SQL Builder — средства, пришедшего на смену Visual Query Builder. Новый SQL Builder обеспечивает полную синхронизацию между текстом запроса на языке SQL и его визуальным представлением.

Создание отчетов

На странице QReport можно обнаружить несколько новых компонентов, среди которых — TQRTextFilter, TQRHTMLFilter и TQRCSVFilter. Эти компоненты позволяют сохранять отчеты не в формате QReport (файл с расширением *.qrp), но и в виде текстовых файлов, HTML-файлов или CSV-файлов.

Публикация данных в Internet

Для публикации данных в Internet в Delphi 4 входит специальное средство DB Web Application Wizard.
wpe1A.jpg (27222 bytes)
С его помощью можно создавать приложения для серверов, поддерживающих протоколы ISAPI/NSAPI, CGI- и Win-CGI-приложения, отображающие “живые” данные из выбранной вами базы данных.

В данном обзоре мы рассмотрели основные новинки и возможности Delphi 4. В следующей таблице перечислены функциональные возможности Delphi 4, отсутствующие в версии Standard, и основные отличия между версиями Professional и Client/Server.

  Pro C/S
Редактор App Browser * *
Code Explorer * *
“Мастер” Class Completion * *
ToolTip Symbol Insight * *
Утилита WinSight32 для мотиторинга сообщений Windows * *
Удаленная отладка процессов   *
Debug Inspector для просмотра свойств компонентов * *
DataWatch BreakPoints * *
“Мастер” Local Variables Watch * *
Исходные тексты библиотеки Visual Component Library * *
Package Collection Editor * *
Компонент Windows98 MonthCalendar * *
Компонент Windows98 PageScroller * *
Компонент ControlBar * *
Компонент TeeChart * *
Компонент Decision Cube CrossTab для многомерного анализа данных   *
ActiveForms * *
Создание компонентов ActiveX * *
Редактор Type Library Editor    
Поддержка MS IDL * *
Поддержка Struct и Union * *
Поддержка обработки событий в объектах Automation * *
“Мастер” COM Object * *
Поддержка формата TypeLib 2 * *
Создание приложений для Web-серверов   *
WebBridge для поддержки Netscape NSAPI и Microsoft ISAPI   *
WebModules   *
WebDispatch   *
WebDeploy   *
“Мастер” Web Application (Business Wizard)   *
Поддержка JPEG * *
Поддержка Internet Explorer и Netscape Navigator * *
Компоненты Internet Socket * *
Компоненты NetMasters Native Internet Client * *
Web Deployment * *
Поддержка ActiveForms * *
Файлы BDE в формате CAB * *
WebExtra: поддержка Fractal Image * *
Полная поддержка ODBC * *
Драйверы SQL Links для Oracle, Sybase, Informix, MS SQL Server, InterBase и DB2   *
Поддержка Informix v9   *
BDE API для прямого доступа BDE * *
DB Control Grid * *
Масштабируемый Data Dictionary * *
SQL Database Explorer   *
SQL Monitor   *
SQL Builder   *
Компонент InterBase Event Alerter * *
Local InterBase (лицензия на 1 пользователя) * *
InterBase NT (лицензия на 5 пользователей)   *
Поддержка Oracle 8   *
Remote DataBroker   *
Automatic Constraint Propagation   *
TransactionResolver   *
OLEnterprise   *
ObjectBroker   *
Расширения для MIDAS   *
Поддержка MTS   *
Поддержка CORBA   *
InstallShield Express * *
Open Tools API * *
Team Development Interface (Intersolv PVCS) * *
Intersolv PVCS Version Manager   *
“Мастер” Data Migration   *
“Мастер” Resource Project DLL * *
Редактор RC Resource String * *
Возможность редактирования форм (DFM) без исходного кода * *

Дополнительную информацию можно получить на Web-узле фирмы по адресу: http://www.inprise.com/delphi/

Одним из важнейших источников информации по Delphi, C++Builder и другим продуктам и технологиям Inprise являются группы новостей news-сервера forums.inprise.com (в сумме их более 120). Отличительной особенностью этих конференций является то, что вопросы, поднимаемые в этих конференциях, анализируются непосредственно специалистами Inprise, а в случае необходимости эти специалисты принимают активное участие в обсуждении поднимаемых проблем, наравне с постоянно действующей группой независимых консультантов — TeamB.

Ниже перечислены основные группы новостей, посвященные Delphi.

news:comp.lang.pascal.delphi.misc
news:comp.lang.pascal.delphi.components
news:comp.lang.pascal.delphi.components.misc
news:comp.lang.pascal.delphi.components.usage
news:comp.lang.pascal.delphi.components.writing
news:comp.lang.pascal.delphi.databases
news:comp.lang.pascal.delphi.advocacy
news:comp.lang.pascal.delphi.announce
news:alt.comp.lang.borland-delphi









helloworld.ru © 2001-2016
Все права защищены
Rambler's Top100 TopList Rambler's Top100