Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.05;
Скачать: CL | DM;

Вниз

OTA Expert   Найти похожие ветки 

 
Mike_Goblin ©   (2003-05-24 16:50) [0]

Написал эксперт OTA, генерирующий некоторый код.
TmmRepositoryWizard = class(
TNotifierObject,
IOTAWizard,
IOTARepositoryWizard,
IOTARepositoryWizard60,
IOTAFormWizard,
IOTACreator,
IOTAModuleCreator)
Все хорошо кроме одной мелочи:
Иконка эксперта доступна лишь когда не открыт ни один проект, при создании проекта (File/New/Application) она пропадает.
Вопрос как объяснить IDE что эксперт должен быть доступен и при открытом проекте?
Среда D7
Заранее спасибо


 
Юрий Зотов ©   (2003-05-24 20:44) [1]

1. Что возвращает GetPage?

2. Не уверен, но, IMHO, подозрительно выглядит наследование от TNotifierObject.

3. Вот так все прекрасно работает:

TMyFormWizard = class(
TInterfacedObject,
IOTAWIzard,
IOTARepositoryWizard,
IOTAFormWizard)

Эксперт лежит на странице New и генерит код новых форм, а также делает еще кой-какие операции. При этом нотификатор, IOTACreator и IOTAModuleCreator реализованы отдельными классами.


 
Mike_Goblin ©   (2003-05-24 21:37) [2]

1. GetPage возвращает название новой закладки (не хочется в стандартные класть), может в этом проблема?

2. вряд ли
3. >При этом нотификатор, IOTACreator и IOTAModuleCreator >реализованы отдельными классами.
можно подбробнее чуть чуть? про реализацию нотификатора и креаторов отдельными классах - в примерах такого не заметил



 
Юрий Зотов ©   (2003-05-24 23:56) [3]

> Mike_Goblin © (24.05.03 21:37)

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

=================================

type
TMyWizard = class(TInterfacedObject, IOTAWIzard, IOTARepositoryWizard, IOTAFormWizard)
private
FNotifierIndex: integer;
public
constructor Create;
destructor Destroy; override;
procedure Execute;
end;

constructor TMyWizard.Create;
begin
inherited;
FNotifierIndex := (BorlandIDEServices as IOTAServices).AddNotifier(TMyNotifier.Create)
end;

destructor TMyWizard.Destroy;
begin
(BorlandIDEServices as IOTAServices).RemoveNotifier(FNotifierIndex);
inherited
end;

procedure TMyWizard.Execute;
begin
...
(BorlandIDEServices as IOTAModuleServices).CreateModule(TMyModuleCreator.Create(...));
...
end;

=====================

type
TMyNotifier = class(TInterfacedObject, IOTAIDENotifier)
public
procedure FileNotification(NotifyCode: TOTAFileNotification; const FileName: string; var Cancel: Boolean);
end;

=====================

type
TMyModuleCreator = class(TInterfacedObject, IOTACreator, IOTAModuleCreator)
public
function NewImplSource(const ModuleIdent, FormIdent, AncestorIdent: string): IOTAFile;
end;

function TMyModuleCreator.NewImplSource(const ModuleIdent, FormIdent, AncestorIdent: string): IOTAFile;
var
Source: string;
begin
Source := ...;
Result := TMyFormFile.Create(Source)
end;

==============================

type
TMyFormFile = class(TInterfacedObject, IOTAFile)
private
FSource: string;
public
constructor Create(const Source: string);
function GetSource: string;
end;

constructor TMyFormFile.Create(const Source: string);
begin
inherited Create;
FSource := Source
end;

function TMyFormFile.GetSource: string;
begin
Result := FSource
end;



Страницы: 1 вся ветка

Текущий архив: 2003.06.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
6-13351
cypher
2003-04-04 00:51
2003.06.05
автоматизация регистрации


11-13102
Alexander
2002-09-08 10:17
2003.06.05
Нужны функции для работы с датами DecodeDate & EncodeDate.


14-13474
panov
2003-05-14 21:27
2003.06.05
---|Ветка была без названия|---


14-13365
MalkoLinge
2003-05-16 12:35
2003.06.05
OFF line Прога для чтения форумов


1-13286
XobBIT
2003-05-21 16:52
2003.06.05
вопрос про работу с разными Interface ами