Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.139.50] |
|
Сообщ.
#1
,
|
|
|
для определенных целей мне нужно из компонента узнать путь к проекту/модулю (проект или модуль не имеет значение. главное что бы на текущий проект путь всегда был один и тот же)
но что бы узнать я его мог в любом случае. источником опоры является сам компонент. + проектов может быть много. и компонентов. и это все не должно пресекается (исключение если два компонента лежат на одной форме) пс. звучит как тз . но я лучше сначала все по полочкам опишу для всего этого набросал функцию. но она не дает полноценный результат если ее вызвать из перегруженного метода Loaded (для первой инициализации настроек нужно. в Create нет смысла ибо в компонент не внесены данные из dfm, да и результат даст тоже ибо loaded вызывается позже). если на форме нажать Альт+Ф12 два раза то путь пустой. если бросить новый на форму то результат есть из чего я сделал вывод что когда "конструируется" вся форма то она прикрепляется к редактору в самом конце. function GetPath(Comp: TComponent): String; var OTAComponent: IOTAComponent; i, j: integer; Editor: IOTAEditor; FormEditor: IOTAFormEditor; ModuleServices: IOTAModuleServices; Module: IOTAModule; begin Result:=''; if Supports(BorlandIDEServices, IOTAModuleServices, ModuleServices) then begin for i := 0 to ModuleServices.ModuleCount - 1 do begin Module := ModuleServices.Modules[i]; for j := 0 to Module.GetModuleFileCount - 1 do begin Editor := Module.GetModuleFileEditor(j); if Supports(Editor,IOTAFormEditor, FormEditor) then begin OTAComponent := FormEditor.FindComponent(Comp.Name); if Assigned(OTAComponent) and (OTAComponent.GetComponentHandle = Comp) then begin Result := Module.FileName; Exit; end; end; end; end; end; end; Если честно то мне бы хватило получения пути активного проекта, но прикол в том что их может быть открыто несколько и компонент может быть не в активном проекте. |
Сообщ.
#2
,
|
|
|
Может это подойдёт ?
Не понятно в чём проблема, в моменте вызова функции или в получении пути к файлу |
Сообщ.
#3
,
|
|
|
Цитата DimaBr @ Может это подойдёт ? не то. у меня подобный код. дело в том что этот код даст результат если ее вызвать в любой момент окромя конструктора. пс. а мне нужно при конструировании компонента этот путь. |
Сообщ.
#4
,
|
|
|
Почему же "окромя конструктора", если есть AOwner ?
|
Сообщ.
#5
,
|
|
|
так он есть. и если я бросаю компонент на форму то оно работает.
но если при активной форме нажать альт-ф12 два раза то будет перегружена вся форма. так сначала вызывается конструктор а потом она прикрепляется к "контейнеру" IOTAEditor и эта функция не дает результат. Когда только открываеш форму то она тоже дает пустуй результат (по вышеописанной причине) ща попробую это за счет экспертов решить Добавлено решил. засчет IOTAIDENotifier и события FileNotification |