Добавление Delphi компонента в Гедымин
SYSDBA (обсуждение | вклад) |
Alexander (обсуждение | вклад) (→Создание класса оболочки) |
||
| Строка 43: | Строка 43: | ||
=== Создание класса оболочки === | === Создание класса оболочки === | ||
| − | Класс-оболочка реализует созданный нами интерфейс. | + | Класс-оболочка реализует созданный нами интерфейс. Оболочки стандартных компонент хранятся в модуле gedemin\property\obj_WrapperDelphiClasses.pas. Оболочка для нашего гипотетического класса могла бы выглядеть следующим образом: |
TwrpMyLabel = class(TwrpLabel, IgsMyLabel) | TwrpMyLabel = class(TwrpLabel, IgsMyLabel) | ||
Версия 22:14, 8 мая 2007
В платформу Гедымин встроено несколько сотен уже готовых визуальных и невизуальных компонентов. При необходимости можно добавить свои компоненты. Для этого придется взять с сайта исходный код платформы, внести в него изменения и перекомпилировать.
Предположим, что у нас есть компонент TMyLabel, наследованный от TLabel. Данный компонент позволяет выводить текст под любым углом и даже обводить его одинарной или двойной рамкой. Компонент расширяет родительский TLabel методом Flash, который на долю секунды отрисовывает текст в инвертированном цвете. Ниже приводится определение соответсвующего класса:
type // тип рамки вокруг текста: нет, одинарная или двойная TBorderType = (btNone, btSingle, btDouble); TMyLabel = class(TLabel) private FBorderType: TBorderType; FAngle: Integer; published procedure Flash; property BorderType: TBorderType read FBorderType; property Angle: Integer read FAngle write FAngle; end;
Наша задача: добавить компонент TMyLabel в Гедымин так, чтобы можно было создавать экземпляры из макросов вызовом:
Designer.CreateObject(Owner, "TMyLabel", name)
а также, чтобы пиктограммка компонента появилась на палитре компонентов в дизайнере экранных форм.
Содержание |
Добавление интерфейса в библиотеку типов
Первым шагом следует открыть из Делфи библиотеку типов gedemin/report/gedemin.tlb и добавить в нее новый интерфейс IgsMyLabel:
Интерфейс следует наполнить необходимыми методами и свойствами:
Далее, следует создать CoClass с именем gs_gsMyLabel и добавить в список поддерживаемых интерфейсов IgsMyLabel:
На этом следует закончить работу с библиотекой типов и сохранить сделанные изменения. В процессе сохранения могут появиться предупреждения, но на них не стоит обращать внимание.
Создание класса оболочки
Класс-оболочка реализует созданный нами интерфейс. Оболочки стандартных компонент хранятся в модуле gedemin\property\obj_WrapperDelphiClasses.pas. Оболочка для нашего гипотетического класса могла бы выглядеть следующим образом:
TwrpMyLabel = class(TwrpLabel, IgsMyLabel) private function GetMyLabel: TMyLabel; protected function Get_Angle: Integer; safecall; procedure Set_Angle(Value: Integer); safecall; function Get_BorderStyle: Integer; safecall; procedure Set_BorderStyle(Value: Integer); safecall; procedure Flash; safecall; end; ... function TwrpMyLabel.GetMyLabel: TMyLabel; begin Result := GetObject as TMyLabel; end; function TwrpMyLabel.Get_Angle: Integer; begin Result := GetObject.Angle; end; procedure TwrpMyLabel.Set_Angle(Value: Integer); begin GetMyLabel.Angle := Value; end; function TwrpMyLabel.Get_BorderStyle: Integer; begin Result := Integer(GetObject.BorderStyle); end; procedure TwrpMyLabel.Set_BorderStyle(Value: Integer); begin GetMyLabel.BorderStyle := TBorderStyle(Value); end; procedure TwrpMyLabel.Flash; begin GetMyLabel.Flash; end;
Регистрация класса
Осталось зарегистрировать класс, чтобы он стал виден из макросов. Соответствующий вызов функции RegisterGdcOLEClass лучше всего располагать в initialization секции юнита:
RegisterGdcOLEClass(TMyLabel, TwrpMyLabel, ComServer.TypeLib, IID_IgsMyLabel);
Регистрация компонентов в дизайнере форм
Для того, чтобы подключенная нами компонента стала видна на одной из вкладок палитры компонентов в дизайнере форм, следует зайти в юнит dlg_gsResizer_Palette_unit.pas из папки designer и в секции initialization найти вызов процедуры RegisterNewClass для нужной вкладки и добавить в массив класс -- TMyLabel.
Перекомпиляция Гедымина
Для того, чтобы изменения вступили в силу, следует перекомпилировать модуль gedemin.exe.