Конференция "Компоненты" » автодобавление в uses. Кто ??
 
  • DevilDevil © (24.09.08 17:51) [0]
    Доброе время суток, уважаемые Мастера!!!

    Опять я со своими странными вопросами. На этот раз вопрос очень сложный, возможно, самый сложный, который я когда-либо задавал. Итак...

    Delphi - замечательный инструмент, который автоматиски (в момент компиляции, в момент сохранения, в момент....) добавляет необходимые юниты в uses. Скажите, на каком этапе и кем (чем) это происходит. Как я могу перехватить такой процесс.

    Вопрос закончен.
  • Поросенок Винни-Пух © (24.09.08 17:53) [1]
    Как я могу перехватить такой процесс.

    чтобы что сделать после этого?
  • Поросенок Винни-Пух © (24.09.08 17:55) [2]
    Скажите, на каком этапе и кем (чем) это происходит

    Очевидно тогда же когда и дфм модифицируется.
  • DevilDevil © (24.09.08 19:02) [3]
    > Поросенок Винни-Пух ©   (24.09.08 17:53) [1]

    > чтобы что сделать после этого?
    всё тебе расскажи!

    > Очевидно тогда же когда и дфм модифицируется.
    нет. Опытным путём было установлено, что во многих случаях. Даже если всё сохранено, нажимаешь Ctrl+F9 - возникает процесс
  • Поросенок Винни-Пух © (24.09.08 19:18) [4]
    это типа чтобы скомпилить приложение с дбгридом, но чтобы в экзешник dbgrid.dcu не попал?
  • DimaBr © (25.09.08 08:44) [5]
    Напиши заглушку, дабы не мучаться с экспетрами кода.
  • DimaBr © (25.09.08 12:19) [6]
    Иначе побороть среду думаю не сможешь
  • DevilDevil © (25.09.08 15:20) [7]
    > DimaBr ©   (25.09.08 08:44) [5]
    заглушкой не решишь, он всёравно будет видеть происхождение...

    Проделав опыты, прихожу к следующим выводам. ПРОЦЕСС просматривает все открытые модули, в которых есть "формы" (+датамодули+фреймы), просматривает все заюзанные компоненты по иерархии классов, вплоть (вроде) до TPersistent. В RTTI таких классов указан UnitName. Таким образом создаётся список "обязательных юнитов" для модуля. Все недостающие uses-юниты добавляются.

    ПРОЦЕСС возникает во Многих случаях. При сохранении, при компиляции, при закрытии модуля, ... и даже при CodeInsight.

    Как отловить ПРОЦЕСС ?
  • Поросенок Винни-Пух © (25.09.08 16:45) [8]
    зачем его ловить-то?
    модуль все равно в юзесе появится. либо ничего не скомпилируется.
  • DevilDevil © (25.09.08 17:19) [9]
    > Поросенок Винни-Пух ©   (25.09.08 16:45) [8]

    "зачем" - это вопрос десятый, вопрос топика не в том!
    Я, конечно, мог бы рассказать свою долгую историю про движок и подмену классов... но думаю - не нужно.

    > модуль все равно в юзесе появится. либо ничего не скомпилируется.
    Вообще говоря... Если ты создашь, например, модуль StdClasses, в который пропишешь все нужные типы и константы из модулей Classes, Controls, Graphics, Dialogs, ... :
    type
     TStream = Classes.TStream;


    то при наличии в uses модуля StdClasses, все классы будут видны. Но это отступление от темы.

    Вопрос открыт.
  • Поросенок Винни-Пух © (25.09.08 17:21) [10]
    ну понятно.
    парень спрашивает как небольно отпилить себе кисть левой руки и в этом и есть суть вопроса. хотя на самом деле ему надо освободится от наручников, и ключ при этом лежит под тумбочкой
  • lucky (30.09.08 21:30) [11]
    Удалено модератором
  • Наиль © (08.10.08 20:15) [12]
    > про движок и подмену классов...

    см. как это организовано в KOL, вернее в MCК.
  • DevilDevil © (09.10.08 15:05) [13]
    > Наиль ©   (08.10.08 20:15) [12]
    > см. как это организовано в KOL, вернее в MCК.


    там реализовано некрасиво: постоянные Ifdef-ы, в то время как не-KOL код не имеет НИКАКОЙ ценности при компиляции... Разве что "защита от автодобавления кода".
 
Конференция "Компоненты" » автодобавление в uses. Кто ??
Есть новые Нет новых   [134464   +62][b:0][p:0.001]