На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Обязательно выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Этот раздел предназначен для вопросов, посвященных разработке компонентов, а также для тестирования собственных бесплатных компонентов с открытым исходным кодом.

Здесь запрещается:
1. Размещать ссылки на какие-либо коммерческие компоненты, реализующие требуемую функциональность.
2. Обсуждать и тестировать коммерческие компоненты или компоненты с закрытым кодом.
3. Давать ссылки на сайты с исходным кодом компонентов. Все тестируемые исходные коды должы быть размещены на сайте ИСХОДНИКИ.RU.
Модераторы: Rouse_, DimaBr
  
> Узнать путь проекта
    для определенных целей мне нужно из компонента узнать путь к проекту/модулю (проект или модуль не имеет значение. главное что бы на текущий проект путь всегда был один и тот же)
    но что бы узнать я его мог в любом случае. источником опоры является сам компонент. + проектов может быть много. и компонентов. и это все не должно пресекается (исключение если два компонента лежат на одной форме)
    пс. звучит как тз :lol: . но я лучше сначала все по полочкам опишу
    для всего этого набросал функцию. но она не дает полноценный результат если ее вызвать из перегруженного метода Loaded (для первой инициализации настроек нужно. в Create нет смысла ибо в компонент не внесены данные из dfm, да и результат даст тоже ибо loaded вызывается позже).
    если на форме нажать Альт+Ф12 два раза то путь пустой. если бросить новый на форму то результат есть
    из чего я сделал вывод что когда "конструируется" вся форма то она прикрепляется к редактору в самом конце.
    ExpandedWrap disabled
      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;
    Какие у кого идейки найдутся по обходу этой проблемы?
    Если честно то мне бы хватило получения пути активного проекта, но прикол в том что их может быть открыто несколько и компонент может быть не в активном проекте.
      Может это подойдёт ?

      Не понятно в чём проблема, в моменте вызова функции или в получении пути к файлу
        Цитата DimaBr @
        Может это подойдёт ?

        не то. у меня подобный код. дело в том что этот код даст результат если ее вызвать в любой момент окромя конструктора.

        пс. а мне нужно при конструировании компонента этот путь.
          Почему же "окромя конструктора", если есть AOwner ?
            так он есть. и если я бросаю компонент на форму то оно работает.
            но если при активной форме нажать альт-ф12 два раза то будет перегружена вся форма. так сначала вызывается конструктор а потом она прикрепляется к "контейнеру" IOTAEditor и эта функция не дает результат.
            Когда только открываеш форму то она тоже дает пустуй результат (по вышеописанной причине)
            ща попробую это за счет экспертов решить

            Добавлено
            решил. засчет IOTAIDENotifier и события FileNotification
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0277 ]   [ 16 queries used ]   [ Generated: 28.04.24, 12:40 GMT ]