Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: -0.418 c
1-13197
Спрашивающий
2003-05-27 01:27
2003.06.05
RichEdit быстрое перемещение строк из конца в начало


4-13514
Павел
2003-04-07 07:22
2003.06.05
Стиль окна


8-13343
NAlexey
2003-02-21 12:04
2003.06.05
Transparent и BitBlt?


1-13319
Flex
2003-05-25 01:39
2003.06.05
Как получить фокус ввода, при exception?


7-13486
ws
2003-04-03 16:19
2003.06.05
Как программно отличить виртуальный CDROM от реального?




   Наверх