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

Реферат Курсовая Конспект

Procedure TForm1.ToolButton6Click(Sender: TObject); var

Procedure TForm1.ToolButton6Click(Sender: TObject); var - раздел Строительство, Пример создания ActiveX форм Postdata, Headers:olevariant; Begin Webbrowser1.execwb(Olecmdid_Print...

PostData, Headers:OLEvariant; begin WebBrowser1.ExecWB(OLECMDID_PRINT,OLECMDEXECOPT_DODEFAULT, PostData, Headers); end;

Здесь только одна строка, но очень сложная, поэтому я не стану ее объяснять. Скажу только, что в этой строке я посылаю команду через OLE ядру IE. Просто скопируй ее один к одному в свой исходник и поверь мне на слово. Просто это особенности браузера, в которые вникать просто нет смысла, всё равно такое ты наверно нигде больше не увидишь.

Теперь можешь нажать "F9", и твоя программа должна запуститься. Попробуй поиграть с ней. Неплохие ощущения? Закрывай свой браузер, остались последние штрихи! Твой браузер почти готов. Я только наведу небольшой марафет.

Для начала брось на форму StatusBar из закладки Win32 и измени у него свойство SimplePanel в true (по умолчанию false). Теперь выдели WebBrowser1 и щелкни по закладке Events в объектном инспекторе. Дважды кликни по строке OnStatusTextChange и напиши в созданной процедуре следующее:

procedure TForm1.WebBrowser1StatusTextChange(Sender: TObject; const Text: WideString); begin StatusBar1.SimpleText:=Text; end;

Здесь мы присваиваем переменную Text (в ней хранится текст подсказки), которую получили в качестве параметра обработчика в StatusBar1. Теперь ты сможешь видеть подсказки в строке состояния.

Давай добавим ещё индикатор загрузки. Для этого брось на форму ProgressBar из закладки Win32. Измени у него свойство Align на alBottom, чтобы он находился вдоль нижней границы формы. Снова выдели WebBrowser1 и щелкни по закладке Events в объектном инспекторе. Дважды щелкни по строке OnProgressChange и напиши в созданной процедуре:

procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress, ProgressMax: Integer);

begin ProgressBar1.Max:=ProgressMax; ProgressBar1.Position:=Progress;

end;

Здесь мы созданному компоненту ProgressBar1 (индикатор загрузки) присваиваем максимальное значение (ProgressMax) и текущее значение (Progress) полученные в качестве параметров.

Теперь надо украсить наши кнопки, а то они смотрятся как сам IE. Для этого брось на форму ImageList и произведи по нему двойной щелчок. Перед тобой откроется окно, как на рисунке 22.4.6. Сюда нужно добавить картинки размером 16х16. Для этого нажми кнопку "Add", и перед тобой откроется стандартное окно открытия файла. Найди картинку и нажми Открыть. Повтори эту процедуру 6 раз (6 картинок для 6-и кнопок). После всего этого нажми ОК.

Теперь выдели ToolBar1 и в объектном инспекторе измени свойство Images на ImageList1. На твоих кнопках должны появиться картинки. Если ты добавлял картинки не в том порядке, как они у тебя стоят на форме, то можешь пересортировать их с помощью свойства ImageIndex у кнопки. Например: щелкни по кнопке Стоять и измени ImageIndex на 0. На кнопке должна появиться картинка, указанная первой в ImageList1.

Можешь создать еще один ImageList, который подставляется в HotImages. В этом случае картинки из этого компонента будут подставляться на кнопку, когда ты наводишь на нее мышкой.

Все, косметический ремонт окончен. Дави на F9, и Delphi в последний раз создаст тебе окончательную версию. На рисунке 22.4.7 ты можешь увидеть результат сегодняшней работы.

Можешь пользоваться полноценным браузером в свое удовольствие. Конечно же, это не все возможности, которые можно получить из компонента WebBrowser1. Сюда еще очень многое можно добавить -главное, чтобы хватило воображения и умений. Но это уже специфические детали, и я их описывать здесь не буду, потому что сейчас у нас идёт совершенно другой рассказ.

На компакт диске, в директорииПримерыГлава 22WebBrawserты можешь увидеть пример этой программы.

 

22.5. Модель COM

одель COM (Component Object Model) – это независимая от языка программирования спецификация объектов. В спецификации COM объекты называют интерфейсами (потому что у них есть небольшие

отличия), но я буду использовать понятие объект, потому что оно мне ближе к телу. Да и нет смысла вводить новое понятие из-за того, что кому-то из Microsoft захотелось выделиться.

Прежде чем приступать к рассмотрению модели, хочу дать пару определений. Взгляни на приложение, написанное в предыдущей главе (наш собственный браузер интернета). Там мы писали программу, которая использует ActiveX компонент ядра IE. Так вот наше приложение называется клиентским, а ядро IE, к которому мы подключились называется COM сервером. Ты должен обязательно понимать эту разницу, когда будешь читать остальной текст этой главы.

Самое большое отличие объектов COM в том, что они реализовываются в виде отдельных файлов. Когда ты хочешь использовать этот объект, то должен подгрузить этот файл объекта.

Файл с объектом называют сервером COM. Такие сервера могут быть выполнены в виде динамических библиотек DLL или запускных EXE файлов. Если сервер реализован в виде динамической библиотеки, то его называют внутренним. Ну а если в виде запускного файла, то локальными (внешним). Локальный сервер функционирует в своём собственном адресном пространстве. Внутренний сервер загружается в адресное пространство клиентского процесса (твоей программы). COM сервера могут быть также и удалёнными, когда они выполняются на другой машине. В этом случае используется расширенная спецификация DCOM (Distributed COM).

Клиентское приложение, которое хочет загрузить COM сервер никогда не задумывается о том, где находиться сам сервер. Приложение может узнать реальное расположение (через реестр Windows), но это ему ненужно. За всё это отвечает операционная система. Ей нужно только передать GUID (globally unique identifier -глобально уникальный идентификатор) сервера, который нам нужен и ОС все остальные функции инициализации проведёт самостоятельно.

Что значит GUID? Это номер, который COM объект получает на этапе проектирования. Он генерируется случайным образом и никакие два объекта не смогут иметь одинаковые GUID. За уникальность отвечал сам Билл Гейтс, но при этом делал оговорку, что вероятность совпадения дух номеров GUIDвсё таки есть, хотя и ничтожно мала. А что же будет, если всё же эта вероятность сработает? Неужели вместо запрашиваемого ядра IE мы увидим ядро Excel? Лично я не знаю, и надеюсь, что ничего страшного всё же не произойдет.

Вот здесь я не буду дальше заводить разговор во внутренности технологии COM потому что они достаточно сложны и для разработки приложений абсолютно не нужны. Лучше остановимся и будем изучать то, что нам пригодиться на практике.

Все объекты модели COM происходят от IUnknown. Как видишь, в имена объектов COM начинаются с буквы I (имена объектов Delphi начинаются с Т), символизируя слово Interface. Объект IUnknown действует так же, как TObject для объектов Delphi. Это основа, от которого происходят все остальные объекты. В нём реализуются основные метода, которые могут понадобится в последствии для других объектов. В модели COM – это три метода:

QueryInterface – этот метод служит для получения информации об встроенных в COM объектах/интерфейсах. Когда тебе нужно загрузить какой-нибудь объект, то с помощью этого метода проверяется его доступность. Если метод подтверждает возможность использования указанного объекта, то его можно загружать.

_AddRef и _Release – эти два метода используются для создания и уничтожения объекта. Объекты COM похожи на динамические библиотеки. В память может быть загружена только одна версия и все клиенты будут обращаться к ней. Чтобы всё это реализовать, необходимо контролировать, сколько клиентов подключено к объекту, чтобы знать, когда можно уничтожать его из памяти.

Когда мы загружаем объект, то вызывается метод _AddRef, который увеличивает внутренний счётчик на единицу. При следующем обращении к объекту снова вызывается этот метод и снова счётчик увеличивается на 1. Когда какое-то приложение отключилось от объекта (вызван метод _Release), то счётчик уменьшается на 1 и если он равен 0, то объект можно выгружать из памяти, иначе с ним ещё кто-то работает и выгрузка невозможна.

Объект IUnknown объявлен в Delphi следующим образом:

IUnknown = interface ['{00000000-0000-0000-C000-000000000046}'] function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; function _AddRef: Integer; stdcall; function _Release: Integer; stdcall;

end;

Как видишь, в первой строке идёт имя нового интерфейса и после знака равно ставиться ключевое слово interface. Во второй строке, в квадратных скобках нужно указывать GUIDинтерфейса. Никогда не пиши его вручную. Когда ты будешь писать собственные COM объекты, то этот уникальный номер будет генерировать ОС.

Я показал объект IUnknown только для того, чтобы ты смог увидеть самый простейший COM объект. Теперь же давай посмотрим, как создаются COM объекты на практике.

Для создания СОМ объекта в Delphi нужно выбрать File->New->Other. Перед тобой откроется уже знакомое окно создания нового проекта. Здесь перейди на закладку ActiveX и посмотри, что тут тубе доступно (рисунок 22.5.1). Тут достаточно много разных типов COM объектов и я даже не собираюсь рассматривать их все. Тема COM – это отдельный разговор и если тебе захочется узнать большего, то желательно купить отдельную книгу. Я же дам только основы, чтобы тебе было легче потом читать специализированную литературу.

Если ты не будешь связывать свою жизнь только с COM, то моей информации тебе будет достаточно для написания приложений средней тяжести, потому что Delphi прячет большинство рутины, связанной с программированием COM объектов. Так что использование прямого программирования практически ненужно и я его не буду трогать.

 

22.6. Пример создания ActiveX форм

ервое, с чем мы познакомимся – Active Form. Это форма, на которой могут располагаться различные компоненты и элементы управления. Такая форма может быть встроена в любую другую программу, поддерживающую COM

технологию или даже выложена в сети Internet. Всё это я покажу на практике в этой главе.

Формы Active Form – это файлы с расширением OCX и представляющие собой самый настоящий COM объект. Большинство элементов управления получают расширение OCX, чтобы отличать эти файлы среди массы других файлов.

Для начала создадим новый проект. Для этого выбери File->New->Other и в появившемся окне перейди на закладку ActiveX. Здесь выбери пункт ActiveForm и нажми ОК. Перед тобой должно открыться окно, как на рисунке 22.6.1. В нём ты должен указать следующие поля:

New ActiveX Name – имя твоей ActiveX формы. Постарайся дать здесь разумное имя, потому что оно будет потом использоваться для отображения в системе. Не очень приятно будет смотреть на компонент с именем ActiveFormX.

Implementation Unit – имя исполнительного модуля.

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

Threading Model – для нас достаточно здесь значения по умолчанию.

Make Control Licensed – создать лицензию для компонента.

Include Version Information – включить в компонент информацию о версии.

Include About Box – включить окно «О программе».

Я поменял только имя компонента (SimpleActiveX) и проекта (SimpleActiveProj1). CheckBox-ы оставил без изменений, потому что не хочу иметь контроля версии или окна «О программе». Жми ОК и перед тобой появится привычная визуальная форма, на которой можно располагать свои собственные компоненты. Смело располагай на ней компоненты VCL и работай, как с привычным проектом. Ты можешь засунуть сюда целую программу по учёту заработной платы депутатов. Я не стал сильно извращаться, потому что я делаю простой пример. На рисунке 22.6.2 ты можешь увидит моё творение.

Визуальную часть я оставляю на тебя, потому что она не должна вызывать проблем. Я же расскажу из чего состоит наш проект. Открой менеджер проектов и посмотри на его содержимое (рисунок 22.6.3). Здесь в дереве находиться наш проект с именем SimpleActiveProj1.ocx, который состоит из двух файлов:

1. SimpleActiveImpl1 – это файл, в котором храниться наша форма.

2. SimpleActiveProj1.pas – это файл с описанием возможностей нашего проекта. Не советую в него лазить без особой надобности. Здесь очень много достаточно сложных вещей, поэтому лучше оставить его создание на совесть Delphi. Я же этот файл рассматривать не буду, потому что он пока тебе не нужен.

После того, как ты установил все компоненты, откомпилируй проект нажав Ctrl+F9. Откомпилированный OCX файл готов. Теперь надо зарегистрировать его в системе, чтобы можно было его протестировать. Я уже говорил, что при вызове COM объектов вся информация о нём находиться в реестре и всё необходимое попадает туда при регистрации. Для этого выбери register ActiveX Server из меню Run . Для регистрации можно так же выполнить в командной строке следующую команду:

– Конец работы –

Эта тема принадлежит разделу:

Пример создания ActiveX форм

Глава OLE COM ActiveX...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Procedure TForm1.ToolButton6Click(Sender: TObject); var

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Regsvr32.exe ИмяФайла
Можно переходить к тестированию. В качестве тестирования я создам HTML страничку и попробую загрузить форму с помощью IE. Для этого выбери Web Deployment Option из меню Project, и пер

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги