Текущий архив: 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.46 MB
Время: 0.008 c