Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Ріс.2. Елемент управління RichEdit в редакторові бібліотеки типів




Інструкційна картка – завдання

Створення елементів управління ActiveX

  1. Розробка елементів управління ActiveX
  2. Створення ActiveX з компонентів VCL Delphi
  3. Створення ActiveX з форм

Розробка елементів управління ActiveX

Як такий майстер для створення елементів управління ActiveX в Delphi відсутній. Розробник зазвичай вибирає один з двох можливих шляхів:

- використання майстра перетворення будь-якого віконного компоненту (нащадка TWinControl) в елемент управління ActiveX. Для цього застосовується майстер, якого ви можете викликати за допомогою пункту головного меню File/New (Файл/новий), і перейшовши на вкладку ACTIVEX вибрати піктограму ActiveX Control;

- використання майстра перетворення форм в елемент ActiveX. Для цього ви можете викликати майстер, розташований на вкладці ActiveX (як в попередньому варіанті), при цьому вибравши піктограму ActiveF orm.

Створення ActiveX з компонентів VCL Delphi

Одній з можливостей створення елементу управління ActiveX в Delphi - це перетворення будь-якого віконного компоненту VCL Delphi в ActiveX.

Примітка

Не дивлячись на те, що майстер ActiveX Control не дає можливості автоматично створювати елементи управління ACTIVEX з компонентів, що не є нащадками TWinControl, розробник може створити такий елемент управління самостійно за допомогою системи розробки Delphi ACTIVEX (DAX).

Викличемо майстер ActiveX Control. З'явиться вікно майстра створення елементу ACTIVEX з віконного компоненту Delphi (Рис. 1).

В процесі використання даного майстра вам потрібно виконати наступне:

1. Вибрати компонент VCL з випадного списку V CL Class Name (Ім'я класу VCL).

Примітка

Як ви, ймовірно, відмітили, у випадному списку знаходяться далеко не всі компоненти VCL. У даний список внесені тільки ті компоненти, які задовольняють наступним вимогам: знаходяться в поточному пакеті, який використовується в процесі розробки (отже, знаходяться в палітрі компонентів); є нащадками компоненту TWinControl; не виключаються з даного списку за допомогою процедури RegisterNonActiveX.

Багато хто з компонентів виключений із списку через те, що вони або не можуть бути елементами управління ActiveX (наприклад, компонент TDBGrid, оскільки для його роботи потрібний інший VCL-класс TDataSource), або необхідно самостійно скоректувати їх перед запуском майстра, щоб вони могли функціонувати як елементи ActiveX (наприклад, TTreeView, оскільки вузли компоненту дуже складно представляти в ActiveX).

2. Вибрати нове ім'я ActiveX в полі для введення New ActiveX Name (Нове ім'я ActiveX), якщо вас не влаштовує ім'я, пропоноване Delphi автоматично.

3. Вибрати ім'я модуля реалізації створюваного елементу ActiveX в полі для введення Implementati on Unit (Модуль реалізації).

4. Вибрати ім'я проекту в полі для введення Project Name (Ім'я проекту).

5. Вибрати потокову модель у випадному списку Threading Model (Модель потоку).

6. Після цього ви можете встановити три додаткові опції:

Include About Box (Включити вікно "Про програму") - включити в проект діалогове вікно, яке міститиме інформацію про розробника. Дане діалогове вікно є звичайною формою Delphi;

Include Version Information (Включити інформацію про версію) - включити в проект інформацію про версію елементу управління ActiveX (даний пункт потрібний для деяких контейнерів, наприклад, створених в Visual Basic);

Make Control Licensed (Включити ліцензійну інформацію) - включити в проект ліцензійну інформацію (в разі комерційного розповсюдження елементу управління). В результаті використовувати даний елемент управління зможуть тільки ті розробники, які мають ліцензійний ключ, причому дане обмеження працюватиме у всій середі розробки (Delphi, Visual Basic і ін.). При установці даного прапорця разом з проектом елементу управління має згенерувати файл ліцензії, що має розширення LIC. Щоб дати можливість іншим розробникам використовувати цей ActiveX, вам доведеться передавати ліцензійним користувачам файл ліцензії разом з елементом управління ActiveX (що має розширення OCX).

 

Рис. 1. Майстер перетворення компонентів VCL Delphi в ActiveX

Після внесення необхідних значень до полів, майстер автоматично створить всі файли, які потрібні для підтримки даного елементу управління. До числа таких файлів входять: сам проект, бібліотека типів і файл реалізації. Звернете увагу на те, що всі елементи ActiveX є або бібліотеками DLL, або файлами OCX (що, в принципі, одне і те ж).

Розглянемо дії, які виконує майстер в процесі створення елементу управління ActiveX з компоненту:

- майстер визначає, в якому модулі міститься елемент управління VCL. Даний модуль передається компілятору, який створює спеціальну символьну інформацію для опису властивостей, подій і методів елементу управління VCL;

- генерується бібліотека типів для проекту;

- майстер аналізує всю символьну інформацію про елемент управління VCL і додає відповідні властивості і методи до інтерфейсу і в бібліотеку типів;

Примітка

Для визначення, чи личить дана властивість, метод або подія для включення в бібліотеку типів, майстер перевіряє, чи поєднаємо з автоматизацією типа властивості, його параметри, а також значення подій і методів, що повертаються. З автоматизацією сумісні наступні типи:Byte, Smallint, Integer, Single, Double, Currency, TDateTime, WideString, WordBool, PSafeArray, TDecimal, OleVariant, lUnknown, IDispatch. Окрім перерахованих, дозволені параметри типів TStrings, TPicture і TFont. Для даних типів майстер створить проміжні об'єкти, які дозволять їм бути інкапсульованими в IDispatch або Dispinterface.

- редактор бібліотеки типів генерує файл перетвореної бібліотеки типів відповідно до доданих властивостей, подій і методів;

- майстер створює файл реалізації елементу управління ActiveX. Даний файл містить елемент управління TActiveXcontroi. Крім того, майстер автоматично створює так звані пересилки (forwarders) властивостей і методів інтерфейсу. Пересилки направляють виклики методу з елементу управління ActiveX в елемент управління VCL, а події - з елементу управління VCL в елемент ActiveX.

Лістинг 1 містить код файлу проекту елементу управління ActiveX, створеного на основі компоненту TRichEdit.

Лістинг 1

library RichEditXControll;

uses

ComServ

RichEditXControllJTLB in 'RichEditXControllJTLB.pas',

RichEditlmpll in 'RichEditlmpll.pas' {RichEditX: CoClass};

{$E ocx}

exports

DllGetClassObject, DllCanUnloadNow, DllRegisterServer, DllUnregisterServer;

{$R *.TLB}

{$R *.RES}

begin

end.

Описувати даний лістинг не має особливого сенсу, оскільки його зміст достатній очевидно.

Лістинг 2 містить код реалізації елементу ActiveX.

Лістинг 2

unit RichEditlmpll;

interface

uses

Windows, ACTIVEX, Classes, Controls, Graphics, Menus, Forms, StdCtrls, ComServ, STDVCL, AXCtrls, RichEditXControllJTLB, ComCtrls;

type

TRichEditX = class(TActiveXControl, IRichEditX)

private

{ Private declarations }

FDelphiControl: TRichEdit;

FEvents: IRicnEditXEvents;

procedure ChangeEvent(Sender: TObject);

procedure KeyPressEvent(Sender: TObject; var Кеу: Char);

procedure ProtectChangeEvent(Sender: TObject; StartPos, EndPos:

Integer;

var AllowChange: Boolean);

procedure SaveClipboardEvent(Sender: TObject; NumObjects, NumChars: Integer; var SaveClipboard: Boolean);

procedure SelectionChangeEvent(Sender: TObject);

protected

{ Protected declarations }

procedure DefinePropertyPages(DefinePropertyPage: TDefinePropertyPage); override;

procedure EventSinkChanged(const EventSink: lUnknown); override;

procedure InitializeControl; override;

function Get_Alignment: TxAlignment; safecall;

function Get_BorderStyle: TxBorderStyle; safecall;

function Get_CanUndo: WordBool; safecall;

function Get_Color: OLE_COLOR; safecall;

function Get_Ctl3D: WordBool; safecall;

function Get_Cursor: Smallint; safecall;

function Get_DoubleBuffered: WordBool; safecall;

function Get_DragCursor: Smallint; safecall;

function Get_DragMode: TxDragMode; safecall;

function Get_Enabled: WordBool; safecall;

function Get_Font: IFontDisp; safecall;

function Get_HideScrollBars: WordBool; safecall;

function Get_HideSelection: WordBool; safecall;

function Get_ImeMode: TxImeMode; safecall;

function Get_ImeName: WideString; safecall;

function Get_Lines: IStrings; safecall;

function Get_MaxLength: Integer; safecall;

function Get_Modified: WordBool; safecall;

function Get_ParentColor: WordBool; safecall;

function Get_ParentCtl3D: WordBool; safecall;

function Get_PlainText: WordBool; safecall;

function Get_ReadOnly: WordBool; safecall;

function Get_ScrollBars: TxScrollStyle; safecall;

function Get_SelLength: Integer; safecall;

function Get_SelStart: Integer; safecall;

function Get_SelText: WideString; safecall;

function Get_Text: WideString; safecall;

function Get_Visible: WordBool; safecall;

function Get_VisibleDockClientCount: Integer; safecall;

function Get_WantReturns: WordBool; safecall;

function Get_WantTabs: WordBool; safecall;

function Get_WordWrap: WordBool; safecall;

procedure _Set_Font(const Value: IFontDisp); safecall;

procedure Set_Alignment(Value: TxAlignment); safecall;

procedure Set_BorderStyle(Value: TxBorderStyle); safecall;

procedure Set_Color(Value: OLE_COLOR); safecall;

procedure Set_Ctl3D(Value: WordBool); safecall;

procedure Set_Cursor(Value: Smallint); safecall;

procedure Set_DoubleBuffered(Value: WordBool); safecall;

procedure Set_DragCursor(Value: Smallint); safecall;

procedure Set_DragMode(Value: TxDragMode); safecall;

procedure Set_Enabled(Value: WordBool); safecall;

procedure Set_Font(var Value: IFontDisp); safecall;

procedure Set_HideScrollBars(Value: WordBool); safecall;

procedure Set_HideSelection(Value: WordBool); safecall;

procedure Set_ImeMode(Value: TxImeMode); safecall;

procedure Set_ImeName(const Value: WideString); safecall;

procedure Set_Lines(const Value: IStrings); safecall;

procedure Set_MaxLength(Value: Integer); safecall;

procedure Set_Modified (Value: WordBool); safecall;

procedure Set_ParentColor(Value: WordBool); safecall;

procedure Set_ParentCtl3D(Value: WordBool); safecall;

procedure Set_PlainText(Value: WordBool); safecall;

procedure Set_ReadOnly(Value: WordBool); safecall;

procedure Set_ScrollBars(Value: TxScrollStyle); safecall;

procedure Set_SelLength(Value: Integer); safecall;

procedure Set_SelStart(Value: Integer); safecall;

procedure Set_SelText(const Value: WideString); safecall;

procedure Set_Text(const Value: WideString); safecall;

procedure Set_Visible(Value: WordBool); safecall;

procedure Set_WantReturns(Value: WordBool); safecall;

procedure Set_WantTabs(Value: WordBool); safecall;

procedure Set_WordWrap(Value: WordBool); safecall;

end;

implementation

uses ComObj;

{ TRichEditX }

procedure TRichEditX.DefinePropertyPages(DefinePropertyPage: TDefinePropertyPage);

begin

{TODO: Визначите тут сторінки властивостей. Вони визначаються шляхом виклику методу DefinePropertyPage з ідентифікатором класу.

Наприклад, DefinePropertyPage(Class_RichEditXPage); }

end;

procedure TRichEditX.EventSinkChanged(const EventSink: lUnknown);

begin

FEvents:= EventSink as IRichEditXEvents;

end;

procedure TRichEditX.InitialiZeControl;

begin

FDelphiControl:=* Control as TRichEdit;

FDelphiControl.OnChange:= ChangeEvent;

FDelphiControl.OnKeyPress:= KeyPressEvent;

FDelphiControl.OnProtectChange:= ProtectChangeEvent;

FDelphiControl.OnSaveClipboard:= SaveClipboardEvent;

FDelphiControl.OnSelectionChange:= SelectionChangeEvent;

end;

function TRichEditX.Get_Alignment: TxAlignment;

begin

Result:= Ord(FDelphiControl.Alignment);

end;

function TRichEditX.Get_BorderStyle: TxBorderStyle;

begin

Result:= Ord(FDelphiControl.BorderStyle);

end;

function TRichEditX.Get_CanUndo: WordBool;

begin

Result:= FDelphiControl.CanUndo;

end;

function TRichEditX.Get_Color: OLE_COLOR;

begin

Result:= OLE_COLOR(FDelphiControl.Color);

end;

function TRichEditX.Get_Ctl3D: WordBool;

begin

Result:= FDelphiControl.Ctl3D;

end;

function TRichEditX.Get_Cursor: Smallint;

begin

Result:= Smallint(FDelphiControl.Cursor);

end;

function TRichEditX.Get_DoubleBuffered: WordBool;

begin

Result:= FDelphiControl.DoubleBuffered;

end;

function TRichEditX.Get_DragCursor: Smallint;

begin

Result:= Smallint(FDelphiControl.DragCursor);

end;

function TRichEditX.Get_DragMode: TxDragMode;

begin

Result:= Ord(FDelphiControl.DragMode);

end;

function TRichEditX.Get_Enabled: WordBool;

begin

Result:= FDelphiControl.Enabled;

end;

function TRichEditX.Get_Font: IFontDisp;

begin

GetOleFont(FDelphiControl.Font, Result);

end;

function TRichEditX.Get_HideScrollBars: WordBool;

begin

Result:= FDelphiControl.HideScrollBars;

end;

function TRichEditX.Get_HideSelection: WordBool;

begin

Result:= FDelphiControl.HideSelection;

end;

function TRichEditX.Get_ImeMode: TxImeMode;

begin

Result:= Ord(FDelphiControl.ImeMode);

end;

function TRichEditX.Get_ImeName: WideString;

begin

Result:= WideString(FDelphiControl.ImeName);

end;

function TRichEditX.Get_Lines: IStrings;

begin

GetOleStrings(FDelphiControl.Lines, Result);

end;

function TRichEditX.Get_MaxLength: Integer;

begin

Result:= FDelphiControl.MaxLength;

end;

function TRichEditX.Get_Modified: WordBool;

begin

Result:= FDelphiControl.Modified;

end;

function TRichEditX.Get_ParentColor: WordBool;

begin

Result:= FDelphiControl.ParentColor;

end;

function TRichEditX.Get_ParentCtl3D: WordBool;

begin

Result:= FDelphiControl.ParentCtlSD;

end;

function TRichEditX.Get_PlainText: WordBool;

begin

Result:= FDelphiControl.Plaintext;

end;

function TRichEditX.Get_ReadOnly: WordBool;

begin

Result:= FDelphiControl.Readonly;

end;

function TRichEditX.Get_ScrollBars: TxScrollStyle;

begin

Result:= Ord(FDelphiControl.ScrollBars);

end;

function TRichEditX.Get_SelLength: Integer;

begin

Result:= FDelphiControl.SelLength;

end;

function TRichEditX,Get_SelStart: Integer;

begin

Result:= FDelphiControl.SelStart;

end;

function TRichEditX.Get_SelText: WideString;

begin

Result:= WideString(FDelphiControl.SelText);

end;

function TRichEditX.Get_Text: WideString;

begin

Result:= WideString(FDelphiControl.Text);

end;

function TRichEditX.Get_Visible: WordBool;

begin

Result:= FDelphiControl.Visible;

end;

function TRichEditX.Get_VisibleDockClientCount: Integer;

begin

Result:= FDelphiControl.VisibleDockClientCount;

end;

function TRichEditX.Get_WantReturns: WordBool;

begin

Result:= FDelphiControl.WantReturns;

end;

function TRichEditX.Get_WantTabs: WordBool;

begin

Result:= FDelphiControl.WantTabs;

end;

function TRichEditX.Get_WordWrap: WordBool;

begin

Result:= FDelphiControl.Wordwrap;

end;

procedure TRichEditX._Set_Font(const Value: IFontDisp);

begin

SetOleFont(FDelphiControl.Font, Value);

end;

procedure TRichEditX.ChangeEvent(Sender: TObject);

begin

if FEvents <> nil then FEvents.OnChange;

end;

procedure TRichEditX.KeyPressEvent(Sender: TObject; var Кеу: Char);

var

TempKey: Smallint;

begin

TempKey:= Smallint(Кеу);

if FEvents <> nil then FEvents.OnKeyPress(TempKey);

Кеу:= Char(TempKey);

end;

procedure TRichEditX.ProtectChangeEvent(Sender: TObject; StartPos, EndPos: Integer; var AllowChange: Boolean);

var

TempAllowChange: WordBool;

begin

TempAllowChange:= WordBool(AllowChange);

if FEvents <> nil then FEvents.OnProtectChange(StartPos, EndPos, TempAllowChange);

AllowChange:= Boolean(TempAllowChange);

end;

procedure TRichEditX.SaveClipboardEvent(Sender: TObject; NumObjects, NumChars: Integer; var SaveClipboard: Boolean);

var

TempSaveClipboard: WordBool;

begin

TempSaveClipboard:= WordBool(SaveClipboard);

if FEvents <> nil then FEvents.OnSaveClipboard(NumObjects, NumChars, TempSaveClipboard); SaveClipboard:= Boolean(TempSaveClipboard);

end;

procedure TRichEditX.SelectionChangeEvent(Sender: TObject);

begin

if FEvents <> nil then FEvents.OnSelectionChange;

end;

procedure TRichEditX.Set_Alignment(Value: TxAlignment);

begin

FDelphiControl.Alignment:= TAlignment(Value);

end;

procedure TRichEditX.Set_BorderStyle(Value: TxBorderStyle);

begin

FDelphiControl.BorderStyle:= TBorderStyle(Value);

end;

procedure TRichEditX.Set_Color(Value: OLE_COLOR);

begin

FDelphiControl.Color:= TColor(Value);

end;

procedure TRichEditX.Set_Ctl3D(Value: WordBool);

begin

FDelphiControl.Ctl3D:= Value;

end;

procedure TRichEditX.Set_Cursor(Value: Smallint);

begin

FDelphiControl.Cursor:= TCursor(Value);

end;

procedure TRichEditX.Set_DoubleBuffered(Value: WordBool);

begin

FDelphiControl.DoubleBuffered:= Value;

end;

procedure TRichEditX.Set_DragCursor(Value: Smallint);

begin

FDelphiControl.DragCursor:= TCursor(Value);

end;

procedure TRichEditX.Set_DragMode(Value: TxDragMode);

begin

FDelphiControl.DragMode:= TDragMode(Value);

end;

procedure TRichEditX.Set_Enabled(Value: WordBool);

begin

FDelphiControl.Enabled:= Value;

end;

procedure TRichEditX.Set_Font(var Value: IFontDisp);

begin

SetOleFont(FDelphiControl.Font, Value);

end;

procedure TRichEditX.SetJHideScrollBars(Value: WordBool);

begin

FDelphiControl.HideScrollBars:= Value;

end;

procedure TRichEditX.Set_HideSelection(Value: WordBool);

begin

FDelphiControl.HideSelection:= Value;

end;

procedure TRichEditX.Set_ImeMode(Value: TxImeMode);

begin

FDelphiControl.ImeMode:= TImeMode(Value);

end;

procedure TRichEditX.Set_ImeName(const Value: WideString);

begin

FDelphiControl.ImeName:= TImeName(Value);

end;

procedure TRichEditX.Set_Lines(const Value: IStrings);

begin

SetOleStrings(FDelphiControl.Lines, Value);

end;

procedure TRichEditX.Set_MaxLength(Value: Integer);

begin

FDelphiControl.MaxLength:= Value;

end;

procedure TRichEditX.Set_Modified(Value: WordBool);

begin

FDelphiControl.Modified:= Value;

end;

procedure TRichEditX.Set_ParentColor(Value: WordBool);

begin

FDelphiControl.ParentColor:= Value;

end;

procedure TRichEditX.Set_ParentCtl3D(Value: WordBool);

begin

FDelphiControl.ParentCtl3D:= Value;

end;

procedure TRichEditX.Set_PlainText(Value: WordBool);

begin

FDelphiControl.PlainText:= Value;

end;

procedure TRichEditX.Set_ReadOnly(Value: WordBool);

begin

FDelphiControl.Readonly:= Value;

end;

procedure TRichEditX.Set_ScrollBars(Value: TxScrollStyle);

begin

FDelphiControl.ScrollBars:= TScrollStyle(Value);

end;

procedure TRichEditX.Set_SelLength(Value: Integer);

begin

FDelphiControl.SelLength:= Value;

end;

procedure TRichEditX.Set_SelStart(Value: Integer);

begin

FDelphiControl.SelStart:= Value;

end;

procedure TRichEditX.Set_SelText(const Value: WideString);

begin

FDelphiControl.SelText:= String(Value);

end;

procedure TRichEditX.Set_Text(const Value: WideString};

begin

FDelphiControl.Text:= TCaption(Value);

end;

procedure TRichEditX.Set_Visible(Value: WordBool);

begin

FDelphiControl.Visible:= Value;

end;

procedure TRichEditX.Set_WantReturns(Value: WordBool);

begin

FDelphiControl.WantReturns:= Value;

end;

procedure TRichEditX.Set_WantTabs(Value: WordBool);

begin

FDelphiControl.WantTabs:= Value;

end;

procedure TRichEditX.Set_WordWrap(Value: WordBool);

begin

FDelphiControl.Wordwrap:= Value;

end;

initialization

TActiveXControlFactory.Create (ComServer, TRichEditX,TRichEdit,Class_RichEditX

''

tmApartment);

end.

 

Описаний в даному файлі клас TRichEditx є нащадком TActiveXcontrol. Цей клас застосовується для установки відповідності між колишнім компонентом Delphi TRichEdit і контейнерами, в яких розміщуватиметься створений елемент управління.

 

Ріс.2. Елемент управління RichEdit в редакторові бібліотеки типів

На Рис. 2 показано вікно редактора бібліотеки типів для даного елементу управління ActiveX. Лістинг 3.9 містить код файлу бібліотеки типів.

Лістинг 3

unit RichEditXControllJTLB;

// Увага

// Типи, оголошені в цьому файлі, згенерували з даних

// бібліотеки типів. Якщо бібліотека типів явно або неявно (посилається

// на цю бібліотеку через іншу) реимпортирована або за допомогою команди

// 'Refresh' у вікні Type Library Editor активізована в час

// редагування бібліотеки типів, вміст даного файлу має бути

// регенеровано, а всі внесені уручну зміни можуть бути загублені.

*****************************************************

// PASTLWTR: $Revision: 1.88 $

// Файл створений 15.02.2001 18:30:46 з бібліотеки типів, описаної нижче.

*****************************************************

// Type Lib: C:\Program

Files\Borland\Delphi5\Projects\!!!\RichEditXControll.tlb (1)

// IIDXLCID: {B1F514E7-E8BO-49B5-A6C3-F7F4910CFF9D}0

// Helpfile:

// DepndLst:

// (1) v2.0 stdole (C:\WINDOWS\SYSTEM\stdole2.tlb)

// (2) v4.0 STDVCL (C:\WINDOWS\SYSTEM\STDVCL40.DLL)

*****************************************************

{$TYPEDADDRESS OFF} // Модуль має відкомпілюватися без перевірки

// типів покажчиків

interface

uses Windows, ACTIVEX, Classes, Graphics, OleServer, OleCtrls, STDVCL;

//***********************************************

// GUIDS оголошені в TypeLibrary. Використовуються наступні префікси:

// Type Libraries: LIBID_xxxx

// CoClasses: CLASS_xxxx

// DISPInterfaces: DIID_xxxx

// NON-DISP interfaces: IID_xxxx

//***********************************************

const

RichEditXControllMajorVersion = 1; RichEditXControllMinorVersion =0; '

LIBID_RichEditXControll: TGUID = '{B1F514E7-E8BO-49B5-A6C3-F7F4910CFF9D}';

IID_IRichEditX: TGUID = '{86F5C46C-CDA6-4279-8BF4-F69F1A051ED7}';

DIID_IRichEditXEvents: TGUID = '{21AB5F94-7D87-4FCO-AB5A-9BCE1D05AF8B} ';

CLASS_RichEditX: TGUID = '{7C731EEO-D98D-4040-8FE1-EOCB9E54C58B}';

//***********************************************

// Оголошення перерахувань, визначених в бібліотеці типів

//***********************************************

// Константи для TxAlignment

type

TxAlignment = TOleEnum;

const

taLeftJustify = $00000000;

taRightJustify = $00000001;

taCenter = $00000002;

// Константи для TxBorderStyle

type

TxBorderStyle = TOleEnum;

const

bsNone = $00000000;

bsSingle = $00000001;

// Константи для TxDragMode

type

TxDragMode = TOleEnum;

const

dmManual = $00000000;

dmAutomatic = $00000001;

// Константи для TxImeMode

type

TxImeMode = TOleEnum;

const

imDisable = $00000000;

imClose = $00000001;

imOpen = $00000002;

imDontCare = $00000003;

imSAlpha = $00000004;

imAlpha = $00000005;

imHira = $00000006;

imSKata = $00000007;

imKata = $00000008;

imChinese = $00000009;

imSHanguel = $OOOOOOOA;

imHanguel = $OOOOOOOB;

// Константи для TxScrollStyle

type

TxScrollStyle = TOleEnum;

const

ssNone = $00000000;

ssHorizontal = $00000001;

ssVertical = $00000002;

ssBoth = $00000003;

// Константи для TxMouseButton

type

TxMouseButton = TOleEnum;

const

mbLeft = $00000000;

mbRight = $00000001;

mbMiddle = $00000002;

type

// Попереднє оголошення типів, визначених в бібліотеці типів

//***********************************************

IRichEditX = interface;

IRichEditXDisp = dispinterface;

IRichEditXEvents = dispinterface;

//***********************************************

// Оголошення CoClasses, визначених в бібліотеці типів

//***********************************************

RichEditX = IRichEditX;

//***********************************************

// Оголошення структур, союзів і альянсів.

//***********************************************

PPUserTypel = AIFontDisp; {*}

//***********************************************

// Interface: IRichEditX

// Flags: (4416) Dual OleAutomation Dispatchable

// GUID: {86F5C46C-CDA6-4279-8BF4-F69F1A051ED7}

//***********************************************

IRichEditX = interface(IDispatch)

['{86F5C46C-CDA6-4279-8BF4-F69F1A051ED7}']

function Get_Alignment: TxAlignment; safecall;

procedure Set_Alignment(Value: TxAlignment); safecall;

function Get_BorderStyle: TxBorderStyle; safecall;

procedure Set_BorderStyle(Value: TxBorderStyle); safecall;

function Get_Color: OLE_COLOR; safecall;

procedure Set_Color(Value: OLE_COLOR); safecall;

function Get_Ctl3D: WordBool; safecall;

procedure Set_Ctl3D(Value: WordBool); safecall;

function Get_DragCursor: Smallint; safecall;

procedure Set__DragCursor'(Value: Smallint); safecall;

function Get_DragMode: TxDragMode; safecall;

procedure Set_DragMode(Value: TxDragMode); safecall;

function Get_Enabled: WordBool; safecall;

procedure Set_Enabled(Value: WordBool); safecall;

function Get_Font:.IFontDisp; safecall;

procedure _Set_Font(const Value: IFontDisp); safecall;

procedure Set_Font(var Value: IFontDisp); safecall;

function Get_HideSelection: WordBool; safecall;

procedure Set_HideSelection(Value: WordBool); safecall;

function Get_HideScrollBars: WordBool; safecall;

procedure Set_HideScrollBars(Value: WordBool); safecall;

function Get_ImeMode: TxImeMode; safecall;

procedure Set_ImeMode(Value: TxImeMode); safecall;

function Get_ImeName: WideString; safecall;

procedure Set_ImeName(const Value: WideString}; safecall;

function Get_Lines: IStririgs; safecall;

procedure Set_Lines(const Value: IStrings); safecall;

function Get_MaxLength: Integer; safecall;

procedure Set_MaxLength(Value: Integer); safecall;

function Get_ParentColor: WordBool; safecall;

procedure Set_ParentColor(Value: WordBool); safecall;

function Get_ParentCtl3D: WordBool; safecall;

procedure Set_ParentCtl3D(Value: WordBool); safecall;

function Get_PlainText: WordBool; safecall;

procedure Set_PlainText(Value: WordBool); safecall;

function Get_ReadOnly: WordBool; safecall;

procedure Set_ReadOnly(Value: WordBool); safecall;

function Get_ScrollBars: TxScrollStyle; safecall;

procedure Set_ScrollBars(Value: TxScrollStyle); safecall;

function Get_Visible: WordBool; safecall;

procedure Set_Visible(Value: WordBool); safecall;

function Get_WantTabs: WordBool; safecall;

procedure Set_WantTabs(Value: WordBool); safecall;

function Get_WantReturns: WordBool; safecall;

procedure Set_WantReturns(Value: WordBool); safecall;

function Get_WordWrap: WordBool; safecall;

procedure Set_WordWrap(Value: WordBool); safecall;

function Get_CanUndo: WordBool; safecall;

function Get_Modified: WordBool; safecall;

procedure Set_Modifled(Value: WordBool); safecall;

function Get_SelLength: Integer; safecall;

procedure Set_SelLength(Value: Integer); safecall;

function Get_SelStart: Integer; safecall;

procedure Set_SelStart(Value: Integer); safecall;

function Get_SelText: WideString; safecall;

procedure Set_SelText(const Value: WideString); safecall;

function GetJText: WideString; safecall;

procedure Set_Text(const Value:.WideString); safecall;

function Get_DoubleBuffered: WordBool; safecall;

procedure Set_DoubleBuffered(Value: WordBool); safecall;

function Get_VisibleDockClientCount: Integer; safecall;

function Get_Cursor: Smallint; safecall;

procedure Set_Cursor(Value: Smallint); safecall;

property Alignment: TxAlignment read Get_Alignment write Set_Alignment;

property BorderStyle: TxBorderStyle read Get_BorderStyle write Set_BorderStyle;

property Color: OLE_COLOR read Get_Color write Set_Color;

property CTLSD: WordBool read Get_Ctl3D write Set_Ctl3D;

property DragCursor: Smallint read Get_DragCursor write Set_DragCursor;

property DragMode: TxDragMode read Get_DragMode write Set_DragMode;

property Enabled: WordBool read Get_Enabled write Set_Enabled;

property Font: IFontDisp read Get_Font write _Set_Font;

property HideSelection: WordBool read Get_HideSelection write Set_HideSelection;

property HideScrollBars: WordBool read Get_HideScrollBars write Set_HideScrollBars;

property ImeMode: TxImeMode read Get_ImeMode write Set_ImeMode;

property ImeName: WideString read Get_ImeName write Set_ImeName;

property Lines: IStrings read Get_Lines write Set_Lines;

property MaxLength: Integer read Get_MaxLength write Set_MaxLength;

property ParentColor: WordBool read Get_ParentColor write Set_ParentColor;

property ParentCtlSD: WordBool read Get_ParentCtl3D write Set_ParentCtl3D;

property PlainText: WordBool read Get_PlainText write Set_PlainText;

property Readonly: WordBool read Get_ReadOnly write Set_ReadOnly;

property ScrollBars: TxScrollStyle read Get_ScrollBars write Set_ScrollBars;

property Visible: WordBool read Get_Visible write Set_Visible;

property WantTabs: WordBool read Get_WantTabs write Set_WantTabs;

property WantReturns: WordBool read Get_WantReturns write SetJWantReturns;

property Wordwrap: WordBool read Get_WordWrap write Set_WordWrap;

property CanUndo: WordBool read Get_CanUndo;

property Modified: WordBool read Get__Modified write Set_Modified;

property SelLength: Integer read Get_SelLength write Set_SelLength;

property SelStart: Integer read Get_SelStart write Set_SelStart;

property SelText: WideString read Get_SelText write Set_SelText;

property Text: WideString read Get_Text write Set_Text;

property DoubleBuffered: WordBool read Get_DoubleBuffered write Set_DoubleBuffered;

property VisibleDockClientCount: Integer read Get_VisibleDockClientCoxint;

property Cursor: Smallint read Get_Cursor write Set_Cursor;

end;

//***********************************************

// Displntf: IRichEditXDisp

// Flags: (4416) Dual OleAutomation Dispatchable

// GUID: {86F5C46C-CDA6-4279-8BF4-F69F1A051ED7}

//***********************************************

IRichEditXDisp = dispinterface

['{86F5C46C-CDA6-4279-8BF4-F69F1A051ED7}']

property Alignment: TxAlignment dispid 1;

property BorderStyle: TxBorderStyle dispid 2;

property Color: OLE_COLOR dispid -501;

property Ctl3D: WordBool dispid 3;

property DragCursor: Smallint dispid 4;

property DragMode: TxDragMode dispid 5;

property Enabled: WordBool dispid -514;

property Font: IFontDisp dispid -512;

property HideSelection: WordBool dispid 6;

property HideScrollBars: WordBool dispid 7;

property ImeMode: TxImeMode dispid 8;

property ImeName: WideString dispid 9;

property Lines: IStrings dispid 10;

property MaxLength: Integer dispid 11;

property ParentColor: WordBool dispid 12;

property ParentCtl3D: WordBool dispid 13;

property PlainText: WordBool dispid 14;

property Readonly: WordBool dispid 15;

property ScrollBars: TxScrollStyle dispid 16;

property Visible: WordBool dispid 17;

property WantTabs: WordBool dispid 18;

property WantReturns: WordBool dispid 19;

property Wordwrap: WordBool dispid 20;

property CanUndo: WordBool readonly dispid 34;

property Modified: WordBool dispid 35;

property SelLength: Integer dispid 36;

property SelStart: Integer dispid 37;

property SelText: WideString dispid 38;

property Text: WideString dispid -517;

property DoubleBuffered: WordBool dispid 39;

property VisibleDockClientCount: Integer readonly dispid 40;

property Cursor: Smallint dispid 49;

end;

//***********************************************

// Displntf: IRichEditXEvents

// Flags: (0)

// QUID: {21AB5F94-7D87-4FCO-AB5A-9BCE1D05AF8B}

//***********************************************

IRichEditXEvents = dispinterface

['{21AB5F94-7D87-4FCO-AB5A-9BCE1D05AF8B}']

procedure OnChange; dispid 1;

procedure OnKeyPress(var Кеу: Smallint); dispid 8;

procedure OnProtectChange(StartPos: Integer; EndPos: Integer; var AllowChange: WordBool); dispid 16;

procedure OnSaveClipboardfNumObjects: Integer; NumChars: Integer; var SaveClipboard: WordBool); dispid 18;

procedure OnSelectionChange; dispid 19;

end;

 

// Оголошення класу OLE Control Proxy

// Control Name TRichEditX

// Help String RichEditX Control

// Default Interface IRichEditX

// Def. Intf. DISP? No

// Event Interface IRichEditXEvents

// TypeFlags (34) CanCreate Control

//***********************************************

TRichEditXOnKeyPress = procedure(Sender: TObject; var Кеу: Smallint) of object;

TRichEditXOnProtectChange = procedure(Sender: TObject; StartPos: Integer; EndPos: Integer;

var AllowChange: WordBool) of object;

TRichEditXOnSaveClipboard = procedure(Sender: TObject; NumObjects: Integer; NumChars-: Integer;

var SaveClipboard: WordBool) of object;

TRichEditX = class(Telecontrol)

private

FOnChange: TNotifyEvent;

FOnKeyPress: TRichEditXOnKeyPress;

FOnProtectChange: TRichEditXOnProtectChange;

FOnSaveClipboard: TRichEditXOnSaveClipboard;

FOnSelectionChange: TNotifyEvent;

FIntf: IRichEditX;

function GetControlInterface: IRichEditX;

protected

procedure CreateControl;

procedure InitControlData; override/function Get_Lines: IStrings;

procedure Set_Lines(const Value: IStrings);

public

property Controllnterface: IRichEditX read GetControlInterface;

property Defaultlnterface: IRichEditX read GetControlInterface;

property CanUndo: WordBool index 34 read GetWordBoolProp;

property Modified: WordBool index 35 read GetWordBoolProp write SetWordBoolProp;

property SelLength: Integer index 36 read GetlntegerProp write SetlntegerProp;

property SelStart: Integer index 37 read GetlntegerProp write SetlntegerProp;

property SelText: WideString index 38 read GetWideStringProp write SetWideStringProp;

property Text: WideString index -517 read GetWideStringProp write SetWideStringProp;

property DoubleBuffered: WordBool index 39 read GetWordBoolProp write SetWordBoolProp;

property VisibleDockClientCount: Integer index 40 read GetlntegerProp;

published

property Alignment: TOleEnum index 1 read GetTOleEnumProp write SetTOleEnumProp stored False;

property BorderStyle: TOleEnum index 2 read GetTOleEnumProp write SetTOleEnumProp stored False;

property Color: TColor index -501 read GetTColorProp write SetTColorProp stored False;

property Ctl3D: WordBool index 3 read GetWordBoolProp write SetWordBoolProp stored False;

property DragCursor: Smallint index 4 read GetSmallintProp write SetSmallintProp stored False property DragMode: TOleEnum index 5 read GetTOleEnumProp write SetTOleEnumProp stored False;

property Enabled: WordBool index -514 read GetWordBoolProp write SetWordBoolProp stored False;

property Font: TFont index -512 read GetTFontProp write SetTFontProp stored False;

property HideSelection; WordBool index 6 read GetWordBoolProp write SetWordBoolProp stored False;

property HideScrollBars: WordBool index 7 read GetWordBoolProp write SetWordBoolProp stored False;

property ImeMode: TOleEnum index 8 read GetTOleEnumProp write SetTOleEnumProp stored False;

property ImeName: WideString index 9 read GetWideStringProp write SetWideStringProp stored False;

property Lines: IStrings read Get_Lines write Set_Lines stored False property MaxLength: Integer index 11 read GetlntegerProp write SetlntegerProp stored False

property ParentColor: WordBool index 12 read GetWordBoolProp write SetWordBoolProp stored False;

property ParentCtlSD: WordBool index 13 read GetWordBoolProp write SetWordBoolProp stored False;

property PlainText: WordBool index 14 read GetWordBoolProp write SetWordBoolProp stored False;

property Readonly: WordBool index 15 read GetWordBoolProp write SetWordBoolProp stored False;

property ScrollBars: TOleEnum index 16 read GetTOleEnumProp write SetTOleEnumProp stored False;

property Visible: WordBool index 17 read GetWordBoolProp write SetWordBoolProp stored False;

property WantTabs: WordBool index 18 read GetWordBoolProp write SetWordBoolProp stored False;

property WantReturns: WordBool index 19 read GetWordBoolProp write SetWordBoolProp stored False;

property Wordwrap: WordBool index 20 read GetWordBoolProp write SetWordBoolProp stored False;

property Cursor: Smallint index 49 read GetSmallintProp write SetSmallintProp stored False;

property OnChange: TNotifyEvent read FOnChange write FOnChange;

property OnKeyPress: TRichEditXOnKeyPress read FOnKeyPress write FOnKeyPress;

property OnProtectChange: TRichEditXOnProtectChange read FOnProtectChange write FOnProtectChange;

property OnSaveClipboard: TRichEditXOnSaveClipboard read FOnSaveClipboard write FOnSaveClipboard;

property OnSelectionChange: TNotifyEvent read FOnSelectionChange write FOnSelectionChange;

end;

procedure Register; implementation uses ComObj;

procedure TRichEditX.InitControlData; const

CEventDispIDs: array [0..4] of DWORD = (

$00000001, $00000008, $00000010, $00000012, $00000013); CTFontlDs: array [0..0] of DWORD = (

$FFFFFEOO); CControlData: TControlData2 = (

CLASSID: '{7C731EEO-D98D-4040-8FE1-EOCB9E54C58B}';

EVENTHD: '{21AB5F94-7D87-4FCO-AB5A-9BCE1D05AF8B}';

EventCount: 5;

EventDispIDs: @CEventDispIDs;

LicenseKey: nil (*HR:$80040154*);

Flags: $00000020;

Version: 401;

FontCount: 1;

FontlDs: @CTFontIDs);

begin

ControlData:= @CControlData;

TControlData2(CControlData).FirstEventOfs:= Cardinal(SSFOnChange) - Cardinal(Self);

end;

procedure TRichEditX.CreateControl;

procedure DoCreate;

begin

FIntf:= lUnknown(OleObject) as IRichEditX;

end;

begin

if FIntf = nil then DoCreate;

end;

function TRichEditX.GetControlInterface: IRichEditX;

begin

CreateControl;

Result:= FIntf;

end;

function TRichEditX.Get_Lines: IStrings;

begin

Result:= DefaultInterface.Get_Lines;

end;

procedure TRichEditX.Set_Lines(const Value: IStrings);

begin

Defaultlnterface.Set_Lines(Value);

end;

procedure Register;

begin

RegisterComponents('ACTIVEX'[TRichEditX]);

end;

end.

Як ви можете бачити, приведені вище лістинги мають достатньо великий розмір. Але той факт, що Delphi бере на себе таку велику роботу, дозволяє навіть непрофесіоналові в розробці елементів управління ActiveX створювати свої ActiveX за допомогою майстра. Майстер в даному випадку генерує повністю функціональний елемент управління ActiveX з інтерфейсами, бібліотекою типів і подіями, при цьому розробникові не потрібно вводити власний код.

Для установки даного елементу управління в палітру компонентів Delphi потрібно зробити наступне:

1. Відкомпілювати проект за допомогою пункту головного меню Project/Compile <ім'я проекту> (Проєкт/компіліровать <ім'я проекту>), при цьому буде створена бібліотека OCX.

2. За допомогою пункту головного меню Component/Import ActiveX Control (Компонент/Імпорт елементу управління ActiveX) відкрити вікно імпорту нового елементу ActiveX.

3. У діалоговому вікні імпорту ActiveX натискувати кнопку Add (Додати), перейти в каталог, що містить створений файл OCX, і вибрати його подвійним клацанням, елемент управління з'явиться в списку діалогового вікна імпорту ActiveX.

4. Вибрати даний елемент управління в списку і натискувати кнопку Install (Встановити).

5. Вибрати файл пакету і натискувати кнопку ОК.

Після виконання даної послідовності кроків в палітрі компонентів Delphi з'явиться ваш елемент управління ActiveX.

Слід зауважити, що створення елементів управління ActiveX із стандартних компонентів Delphi застосовується дуже рідко. Ви можете використовувати дану процедуру перетворення компоненту в ActiveX до самостійно створеного компоненту, що значно розширить його функціональність і дозволить використовувати ваш компонент розробниками в іншій середі програмування.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных