Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Название:Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание
…начиная с 1001. Смотрите другие файлы…
Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Unit1 использует Unit2. Unit2 содержит форму, компонент Memo и StatusBar для отображения каждого реализованного метода, для диагностических целей.
3. Создайте Unit2, содержащий форму с компонентами TMemo и TStatusBar. Форма используется для отображения жизнедеятельности в модуле Unit1.pas. Это шаг не является строго обязательным, он помогает понять что происходит в данный момент между клиентом автоматизации и сервером.
4. Создайте клиент автоматизации. В нашем случае модуль имеет имя FontCli, содержит метку, показывающую текущий шрифт и кнопку, устанавливающую MyFont на сервере.
unitProject1_TLB;
{ Данный файл содержит паскалевские декларации, импортированные из библиотеки типов. Данный файл записывается во время каждого импорта или обновления (refresh) в редакторе библиотеки типов. Любые изменения в данном файле будут потеряны в процессе очередного обновления. }
{ Библиотека Project1 }
{ Версия 1.0 }
interface
usesWindows, ActiveX, Classes, Graphics, OleCtrls, StdVCL;
constLIBID_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}']
functionGet_MyFont: IFontDisp; safecall;
procedureSet_MyFont( constValue: IFontDisp); safecall;
propertyMyFont: IFontDisp readGet_MyFont writeSet_MyFont;
end;
{ Объявление диспинтерфейса для дуального интерфейса IMyFontServer }
IMyFontServerDisp = dispinterface['{29C7AC95-0807-11D1-B2BA-0020AFF2F575}']
propertyMyFont: IFontDisp dispid1;
end;
{ MyFontServerObject }
CoMyFontServer = class
class functionCreate: IMyFontServer;
class functionCreateRemote( constMachineName: string): IMyFontServer;
end;
implementation
usesComObj;
class functionCoMyFontServer.Create: IMyFontServer;
begin
Result := CreateComObject(Class_MyFontServer) asIMyFontServer;
end;
class functionCoMyFontServer.CreateRemote( constMachineName: string): IMyFontServer;
begin
Result := CreateRemoteComObject(MachineName, Class_MyFontServer) asIMyFontServer;
end;
end.
{--------------------------------------------------------------------}
unitUnit1;
interface
usesComObj, Project1_TLB, ActiveX, Graphics;
typeTMyFontServer = class(TAutoObject, IMyFontServer)
private
FFont: TFont;
public
procedureInitialize; override;
destructorDestroy; override;
functionGet_MyFont: IFontDisp; safecall;
procedureSet_MyFont( constValue: IFontDisp); safecall;
end;
implementation
usesComServ, AxCtrls, Unit2;
procedureTMyFontServer.Initialize;
begin
inheritedInitialize;
FFont := TFont.Create;
end;
destructorTMyFontServer.Destroy;
begin
FFont.Free;
inheritedDestroy;
end;
functionTMyFontServer.Get_MyFont: IFontDisp;
begin
FFont.Assign(Form2.Label1.Font);
GetOleFont(FFont, Result);
end;
procedureTMyFontServer.Set_MyFont( constValue: IFontDisp);
begin
SetOleFont(FFont, Value);
Form2.Label1.Font.Assign(FFont);
end;
initialization
TAutoObjectFactory.Create(ComServer, TMyFontServer, Class_MyFontServer, ciMultiInstance);
end.
{--------------------------------------------------------------------}
unitUnit2;
interface
usesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
typeTForm2 = class(TForm)
Label1: TLabel;
end;
varForm2: TForm2;
implementation
{$R *.DFM}
end.
{--------------------------------------------------------------------}
unitFontCli1;
interface
usesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, StdVCL, Project1_TLB;
typeTForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
FontDialog1: TFontDialog;
procedureButton1Click(Sender: TObject);
procedureFormCreate(Sender: TObject);
public
MyFontServer: IMyFontServer;
end;
varForm1: TForm1;
implementation
usesActiveX, AxCtrls;
{$R *.DFM}
procedureTForm1.Button1Click(Sender: TObject);
varTemp: IFontDisp;
begin
if(FontDialog1.Execute) then begin
Label1.Font.Assign(FontDialog1.Font);
GetOleFont(Label1.Font, Temp);
MyFontServer.Set_MyFont(Temp);
end;
end;
procedureTForm1.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
Использование CHARTFX.VBX
Delphi 1
Хотя это можно было бы пообсуждать и здесь, но для ChartFX существует контекстно-зависимая подсказка. Киньте компонент на форму, выберите его и нажмите F1.
VBX в приложениях DELPHI: как распространять?
Delphi 1
Чтобы использовать любые элементы управления VBX с компилированным Delphi EXE-файлом, вам необходимо распространить BIVBX11.DLL (расположен в каталоге \WINDOWS\SYSTEM – Borland при установке копирует его туда).
Расскажите, как использовать ChartFX?
Nomadicсоветует:
Лyчше на простеньком примере.
unitChart;
.......................
withChartFX do begin
Visible := false;
{ Устанавливаем режим ввода значений }
Интервал:
Закладка: