Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Бип из системно... 65535
Пример работы с... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
21 ошибка прогр... 65535
Гостевая книга ... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Содержание сайт... 65535
Invision Power ... 65535
Программируемая... 65535
Оператор выбора... 65535
Модуль Forms 65535
Реклама
Сейчас на сайте
Гостей: 3
На сайте нет зарегистрированных пользователей

Пользователей: 13,152
новичок: Chavo
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Расчет мер близости на отношениях на Delphi + Пояснительная записка
Моделирование информационно-поисковой библиографической системы на gpss ...
Файл записей с выводом обратного заголовка на Turbo Pascal

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Управление свойством Font через сервер автоматизации
Данный документ предназначен главным образом тем программистам, кто использует OLE/COM и хочет встроить объект Font (типа Delphi-го TFont) в свой сервер автоматизации. Интерфейс IFontDisp для COM будет иметь ту же функциональность, что и Delphi-ий TFont. Например, если у вас имеется клиент автоматизации, содержащий объект со свойством Font, и в сервере автоматизации для изменения атрибутов текста вы хотите иметь те же методы (наприр, имя шрифта, жирное или наклонное начертание). Для хранения и управления шрифтом сервер автоматизации может применять реализацию интерфейса IFontDisp.

Приведенный ниже демонстрационный проект содержит элементы и шаги, необходимые для реализации интерфейса IFontDisp в сервере автоматизации COM, и осуществление взаимодействия между клиентом автоматизации COM и интерфейсом. Ниже вы найдете полный листинг исходных модулей, и некоторые комментарии относительно проекта.

Демонстрационный проект содержит следующие модули:

Project1_TLB: Паскалевская обертка для библиотеки типов, содержащей определение интерфейса.

Unit1: Реализация интерфейса: код, содержащий описание свойств интерфейса и реализующий его методы.

Unit2: Главная форма сервера автоматизации. Данный модуль не является обязательным, но он в ходе тестирования обеспечивает обратную связь, так что мы можем видеть как отрабатываются вызовы наших методов.

FontCli: Клиент автоматизации, получающий ссылку на интерфейс, и использующий его методы.

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

Выберите пункт меню File|New|ActiveX|Automation Object и в Мастере Automation Object Wizard выберите в качестве имени класса MyFontServer. Создайте единственное свойство с именем MyFont и типом IFontDisp. Для получения дополнительной информции смотри Developer's Guide, chapter 42 (руководство разработчика, глава 42), там подробно описана работа с библиотеками типов и создание интерфейсов в редакторе библиотеки типов.
В предыдущем шаге при добавлении интерфейса с помошью редактора библиотеки типов вы должны были получить паскалевский модуль-обертку (в нашем примере модуль имеет имя Unit1). Unit1 будет содержать обертку реализаций методов получения и назначения свойства MyFont. На данном этапе вы обеспечите хранение значений свойства MyFont в форме FFont (TFont) и добавите код реализации, наполняющий функциональностью методы получения и установки (get/set).
Unit1 использует Unit2. Unit2 содержит форму, компонент Memo и StatusBar для отображения каждого реализованного метода, для диагностических целей.

Создайте Unit2, содержащий форму с компонентами TMemo и TStatusBar. Форма используется для отображения жизнедеятельности в модуле Unit1.pas. Это шаг не является строго обязательным, он помогает понять что происходит в данный момент между клиентом автоматизации и сервером.
Создайте клиент автоматизации. В нашем случае модуль имеет имя FontCli, содержит метку, показывающую текущий шрифт и кнопку, устанавливающую MyFont на сервере.


unit Project1_TLB;

{ Данный файл содержит паскалевские декларации, импортированные из
библиотеки типов. Данный файл записывается во время каждого импорта
или обновления (refresh) в редакторе библиотеки типов. Любые изменения
в данном файле будут потеряны в процессе очередного обновления. }

{ Библиотека Project1 }
{ Версия 1.0 }

interface

uses Windows, ActiveX, Classes, Graphics, OleCtrls, StdVCL;

const

LIBID_Project1: TGUID = '{29C7AC94-0807-11D1-B2BA-0020AFF2F575}';

const

{ GUID'ы класса компоненты }

Class_MyFontServer: TGUID = '{29C7AC96-0807-11D1-B2BA-0020AFF2F575}';

type

{ Предварительные объявления: Интерфейсы }

IMyFontServer = interface;
IMyFontServerDisp = dispinterface;

{ Предварительные объявления: CoClasse'ы }

MyFontServer = IMyFontServer;

{ Диспинтерфейс для объекта MyFontServer }

IMyFontServer = interface(IDispatch)
['{29C7AC95-0807-11D1-B2BA-0020AFF2F575}']
function Get_MyFont: IFontDisp; safecall;
procedure Set_MyFont(const Value: IFontDisp); safecall;
property MyFont: IFontDisp read Get_MyFont write Set_MyFont;
end;

{ Объявление диспинтерфейса для дуального интерфейса IMyFontServer }

IMyFontServerDisp = dispinterface
['{29C7AC95-0807-11D1-B2BA-0020AFF2F575}']
property MyFont: IFontDisp dispid 1;
end;

{ MyFontServerObject }

CoMyFontServer = class
class function Create: IMyFontServer;
class function CreateRemote(const MachineName: string): IMyFontServer;
end;

implementation

uses ComObj;

class function CoMyFontServer.Create: IMyFontServer;
begin

Result := CreateComObject(Class_MyFontServer) as IMyFontServer;
end;

class function CoMyFontServer.CreateRemote(const MachineName: string):

IMyFontServer;
begin

Result := CreateRemoteComObject(MachineName, Class_MyFontServer) as
IMyFontServer;
end;

end.

{--------------------------------------------------------------------}

unit Unit1;

interface

uses

ComObj, Project1_TLB, ActiveX, Graphics;

type

TMyFontServer = class(TAutoObject, IMyFontServer)
private
FFont: TFont;
public
procedure Initialize; override;
destructor Destroy; override;
function Get_MyFont: IFontDisp; safecall;
procedure Set_MyFont(const Value: IFontDisp); safecall;
end;

implementation

uses ComServ, AxCtrls, Unit2;

procedure TMyFontServer.Initialize;
begin

inherited Initialize;
FFont := TFont.Create;
end;

destructor TMyFontServer.Destroy;
begin

FFont.Free;
inherited Destroy;
end;

function TMyFontServer.Get_MyFont: IFontDisp;
begin

FFont.Assign(Form2.Label1.Font);
GetOleFont(FFont, Result);
end;

procedure TMyFontServer.Set_MyFont(const Value: IFontDisp);
begin

SetOleFont(FFont, Value);
Form2.Label1.Font.Assign(FFont);
end;

initialization

TAutoObjectFactory.Create(ComServer, TMyFontServer, Class_MyFontServer,
ciMultiInstance);
end.

{--------------------------------------------------------------------}

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type

TForm2 = class(TForm)
Label1: TLabel;
end;

var

Form2: TForm2;

implementation

{$R *.DFM}

end.

{--------------------------------------------------------------------}

unit FontCli1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, StdVCL, Project1_TLB;

type

TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
FontDialog1: TFontDialog;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
public
MyFontServer: IMyFontServer;
end;

var

Form1: TForm1;

implementation

uses ActiveX, AxCtrls;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var

Temp: IFontDisp;
begin

if (FontDialog1.Execute) then
begin
Label1.Font.Assign(FontDialog1.Font);
GetOleFont(Label1.Font, Temp);
MyFontServer.Set_MyFont(Temp);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

MyFontServer := CoMyFontServer.Create;
end;

end.




Так для чего нам Unit1, создающий реализацию интерфейса? Интерфейс Ole, такой как, например, IFontDisp, может считаться соглашением о том, что свойства и функции будут определены в заданном формате, а функции будут реализованы как определено (для получения дополнительной информации смотри Руководство Разработчика, главу 36, "An Overview of COM" (Обзор COM). Тот факт, что интерфейс определен, не означает, что он реализован. Например, чтобы заставить определенный вами интерфейс IFontDisp быть полезным, необходимо обеспечить хранение шрифта и механизм добавления и извлечения информации об атрибутах шрифта, таких, как имя шрифта, наклонное начертание, размер и пр.

Примечание:

GetOleFont и SetOleFont определены в AxCtrls.pas. IFontDisp определен в ActiveX.pas
Опубликовал Kest Ноябрь 14 2008 00:53:54 · 0 Комментариев · 6734 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
JBlabel3D
Сложный калькулятор
PrevInst
100 компонентов о...
Мониторинг сервер...
Пятнашки и крести...
ИНТЕРНЕТ ПРОГРАММ...
PDJ_Anima
Игра в крестики н...
Пример работы с р...
CS:Source - монит...
Info
Handles
32 урока по Delphi
Аватары в комме...
PHP 5. Полное рук...
Панель Календарь
Blib [Исходник на...
RbControls
WinPopup

Топ загрузок
Приложение Клие... 100682
Delphi 7 Enterp... 95268
Converter AMR<-... 20187
GPSS World Stud... 16686
Borland C++Buil... 13901
Borland Delphi ... 9711
Turbo Pascal fo... 7229
Калькулятор [Ис... 5596
Visual Studio 2... 5127
FreeSMS v1.3.1 3621
Случайные статьи
Чтобы гарантироват...
Создание настраива...
Массивы, указатели...
Иерархические стру...
1.1. Набросок решения
Глоссарий продолжение
SMB-подпись гарант...
емый контроллер), ...
Проектирование алг...
Ключевые слова
Символы для формат...
7.1. Словарь в в...
Сценарий главы: ко...
TRACE (НАЧАТЬ ТРАС...
Возможность исполь...
Управление риском
Вьетнам. Достоприм...
Подключение общего...
DsAuthors. Компьют...
Установка и настро...
Блок конца изображ...
В примере использу...
Выделение структур...
Достаточность
В программе предпо...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?