Главная страница
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.017 c
4-13512
Shirson
2003-04-07 09:01
2003.06.05
Проблема с GlobalHandle.


6-13361
Kickboxing
2003-04-02 13:45
2003.06.05
Информация об удаленном ПК


1-13246
Kudatsky
2003-05-23 09:45
2003.06.05
Ошибка при работе с Excel


1-13114
Apachi
2003-05-23 09:52
2003.06.05
Дочерние окна


1-13138
Intell
2003-05-25 22:13
2003.06.05
Как осуществить чтение из ресурса?