Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.10.06;
Скачать: CL | DM;

Вниз

Трабла с директивой   Найти похожие ветки 

 
О-Сознание   (2013-03-12 17:40) [0]

В отдельном юните есть директива, если её включить, то подсоединяются другие модули.

Во многих проектах эта директива не нужна, я её просто закомментирую:


// {$DEFINE USE_PNG}



А в некоторых она нужна и я её постоянно расскомментирую.
Объявление директивы в главном модуле ни к чему не приводит.

Как сделать удобное управление этой директивой из главного модуля? (Unit1.pas)


 
Медвежонок Пятачок ©   (2013-03-12 17:44) [1]

размножить где требуется

ифдеф особый случай
андеф пнг
ендиф

особый случай задефайнить в опциях проекта.


 
О-Сознание   (2013-03-17 23:59) [2]


> Медвежонок Пятачок ©   (12.03.13 17:44) [1]


Что-то я не понял, зачем делать $UNDEF?
Зачем делать изменение в опциях, есть другой вариант?


 
Медвежонок Пятачок ©   (2013-03-18 00:06) [3]

>Во многих проектах эта директива не нужна,....


 
О-Сознание   (2013-03-18 01:10) [4]

Давайте по порядку.
Сделано так:



unit MyGraph;

{$DEFINE USE_PNG}

interface

implementation

uses
 {$IFDEF USE_PNG}
 MyPng,
 {$ENDIF}

 Classes;



И как сделать включение/отключение USE_PNG в Unit1?


 
Sapersky   (2013-03-18 01:20) [5]

Заменить {$DEFINE USE_PNG} на {$I UsePng.inc}
Создать файл UsePng.inc в папке проекта, в нём прописать {$DEFINE USE_PNG} или не прописывать, по необходимости. У каждого проекта этот UsePng.inc может быть свой.


 
Германн ©   (2013-03-18 01:34) [6]


> О-Сознание   (12.03.13 17:40)
>
> В отдельном юните есть директива

А зачем эта директива находится в "отдельном юните"?
Знаю только одну настоятельную причину такого расположения директив условной компиляции.


 
О-Сознание   (2013-03-18 02:30) [7]


> Германн ©   (18.03.13 01:34) [6]
>
>
> > О-Сознание   (12.03.13 17:40)
> >
> > В отдельном юните есть директива
>
> А зачем эта директива находится в "отдельном юните"?


А где её объявлять?


 
Германн ©   (2013-03-18 02:38) [8]


> А где её объявлять?
>  

Да много где. В опциях проекта, в файлах исходников (причём тут возможна масса вариантов). Ты приведи реальный пример, тогда можно будет перевести разговор/обсуждение на реальные решения.


 
О-Сознание   (2013-03-18 02:41) [9]

Создаю новый проект.
Подключаю MyGraph.

Объявляю директиву.

Компилирую, PNG при загрузке выдает ошибку.


 
Sapersky   (2013-03-18 02:51) [10]


> В опциях проекта

Вроде бы это работает только если файл (для которого директива) добавлен в проект, а не просто указан в uses. Ну можно и добавлять, конечно.


 
О-Сознание   (2013-03-19 20:01) [11]


> Sapersky   (18.03.13 01:20) [5]
>
> Заменить {$DEFINE USE_PNG} на {$I UsePng.inc}


Работает.
Но проекты где Png не нужно начинают просить UsePng.inc.

Тоже муторно.


 
Дмитрий С ©   (2013-03-19 20:51) [12]


> О-Сознание   (19.03.13 20:01) [11]
>

В опциях проекта пропиши
Delphi Compiler -> Conditional defines.

Не забудь выбрать Target = All configurations


 
Sapersky   (2013-03-19 21:01) [13]

Проверил дефайны в свойствах проекта - работает только если файл, которому нужен дефайн, находится в папке проекта.
Разве что в новых версиях это исправили (проверял на D5).


 
Дмитрий С ©   (2013-03-19 21:24) [14]


> Sapersky   (19.03.13 21:01) [13]

Пробовал build делать?


 
Sapersky   (2013-03-19 21:38) [15]

Да, билд помог, спасибо.


 
О-Сознание   (2013-03-19 23:34) [16]


> Дмитрий С ©   (19.03.13 20:51) [12]


В Project -> Options и в других местах, такого не нашёл.


 
Дмитрий С ©   (2013-03-20 11:54) [17]


> О-Сознание   (19.03.13 23:34) [16]
>

Версия дельфи какая?


 
О-Сознание   (2013-03-20 14:40) [18]


> Дмитрий С ©   (20.03.13 11:54) [17]


D7


 
Sapersky   (2013-03-20 17:41) [19]

D5:
http://s2.ipicture.ru/uploads/20130320/YEHRS5VS.png


 
О-Сознание   (2013-03-21 00:40) [20]

И что это даёт?
Те дефайны которые мы укажем в "Conditional defines" будут просто глобальными на все проекты.


 
Германн ©   (2013-03-21 02:12) [21]


> О-Сознание   (21.03.13 00:40) [20]
>
> И что это даёт?
> Те дефайны которые мы укажем в "Conditional defines" будут
> просто глобальными на все проекты.
>  

Это диалог Project Options. Так что эти дефайны будут действовать только в данном конкретном проекте.


 
Cobalt ©   (2013-03-21 17:25) [22]

директивы работают только там, где они объявлены.
объявил в модуле - действуют на модуль. на соседний модуль не действуют (если в нем не объявил)
объявил в проекте - действует на все модули проекта


 
О-Сознание   (2013-03-31 22:31) [23]


> Cobalt ©   (21.03.13 17:25) [22]
> объявил в проекте - действует на все модули проекта


Неа.

Так как же быть?
.inc - файлы в каждом проекте делать?


 
Германн ©   (2013-04-01 02:23) [24]


> Так как же быть?

Разобраться детально.
Что нужно, зачем нужно и как нужно.


 
О-Сознание   (2013-04-01 16:58) [25]


> Германн ©   (01.04.13 02:23) [24]
>
>
> > Так как же быть?
>
> Разобраться детально.
> Что нужно, зачем нужно и как нужно.


Дык я ж объяснил почему не подходят приведённые решения.


 
han_malign   (2013-04-03 10:25) [26]

unit myPng;

{.$DEFINE USE_PNG}

interface

{$IFDEF USE_PNG}
const pngVer = 1.7;
{$ELSE}
const pngVer = 0;
{$ENDIF}

{$IFDEF USE_PNG}
...
implementation
...
{$ENDIF}
end;


unit MyGraph;
...
implementation
uses myPng;
{$IF pngVer > 0}
  {$MESSAGE HINT "PNG Used"}
{$ELSE}
  {$MESSAGE WARN "PNG not implemented"}
{$IFEND}
...
  {$IF pngVer >= 1.1}myPng.doSomethingV11(...);{$IFEND}
...
end;


//uses myPng;
{$IF declared(pngVer)}
  {$IF pngVer > 1}
     {$MESSAGE HINT "PNG v1.X Used"}
  {$ELSE}
     {$MESSAGE ERROR "PNG - unexpected version"}
  {$IFEND}
{$ELSE}
  {$MESSAGE WARN "PNG not implemented"}
{$ENDIF}


 
имя   (2013-04-04 01:45) [27]

Удалено модератором


 
О-Сознание   (2013-04-28 22:42) [28]

Вопрос ещё не решен.
Все методы предложенные выше - не подходят, уже объяснял почему.


 
Юрий Зотов ©   (2013-04-28 23:14) [29]


> О-Сознание   (28.04.13 22:42) [28]
> Все методы предложенные выше - не подходят

Этого не может быть. Значит Вы что-то делаете не так.

1. Уберите {$DEFINE USE_PNG} отовсюду.
2. Все {$I UsePng.inc} тоже уберите отвсюду. И файл UsePng.inc убейте.
3. В опциях тех проектов, где это надо, пропишите USE_PNG.
4. Из опций тех проектов, где это не надо, уберите USE_PNG.
5. Перебилдите все проекты (обязательно полный build, а не compile).


 
sniknik ©   (2013-04-29 11:08) [30]

ты случаем не оппонент Rouse_ которому предложили поработать со своей же идеологией?
http://delphimaster.net/view/15-1366649723/

;))


 
О-Сознание   (2013-04-29 23:44) [31]


> Юрий Зотов ©   (28.04.13 23:14) [29]


Это тоже самое, что подкладывать где нужно UsePng.inc.


> sniknik ©   (29.04.13 11:08) [30]
>
> ты случаем не оппонент Rouse_ которому предложили поработать
> со своей же идеологией?


Не помню, чтобы я там отмечался.


 
sniknik ©   (2013-04-30 07:54) [32]

> Не помню, чтобы я там отмечался.
а зачем там? он спорил с кем то с работы/"внешнего мира", а не просто создал тему чтобы поспорить с кем то здесь...



Страницы: 1 вся ветка

Текущий архив: 2013.10.06;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.012 c
15-1367181002
Юрий
2013-04-29 00:30
2013.10.06
С днем рождения ! 29 апреля 2013 понедельник


15-1366378587
Книжколюб
2013-04-19 17:36
2013.10.06
Кто-нибудь пользуется электронными книгами на базе E-Ink ?


2-1358698446
Pcrepair
2013-01-20 20:14
2013.10.06
контрол имеющий пару строка-число


2-1358365235
lordalexander
2013-01-16 23:40
2013.10.06
не могу понять почему ошибка


15-1366807381
O'ShinW
2013-04-24 16:43
2013.10.06
Способности человека. Летучая мышь / Смерш