Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.10.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
О-Сознание   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.004 c
2-1358661812
N.Cage
2013-01-20 10:03
2013.10.06
Как убрать символы переноса в ячейке StringGrid


2-1358341960
McLotos
2013-01-16 17:12
2013.10.06
Разбросать результат SQL-запроса по переменным


15-1366947804
Genry_
2013-04-26 07:43
2013.10.06
Oracle between


15-1355480016
azlk52
2012-12-14 14:13
2013.10.06
Запрет приложение вконтакте


2-1358414836
O'ShinW
2013-01-17 13:27
2013.10.06
Моргает ListView.(D7)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский