Главная страница
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.014 c
1-13190
Quasar
2003-05-25 01:31
2003.06.05
Вставка символов в позиции курсора в RichEdit


3-13045
Silver_
2003-05-16 16:46
2003.06.05
нельзя редактировать Detail5ADODataSet 5-го(!) уровня почему?


11-13109
Gandalf
2002-09-15 13:54
2003.06.05
Кол в сердце… своей программы!


11-13106
GROL
2002-09-14 00:09
2003.06.05
Размер Еxe увеличился


1-13163
KMI
2003-05-26 12:31
2003.06.05
Открытие файла в своем приложении