Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2010, 11:16   #1
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию Версии Delphi

Устанавливаю старинный компонент в D2009, в нем есть такие строки
Код:
 {!!! функция MakeObjectInstance перенесена из модуля Forms в модуль Classes
 начиная с дельфи 6!!!}
 {$IFDEF DELPHI6_UP}
  FHeaderInstance := Classes.MakeObjectInstance(HeaderWndProc);
 {$ELSE}
  //FHeaderInstance := Forms.MakeObjectInstance(HeaderWndProc);
 {$ENDIF}
Закомментированная строк не компилируется в D2009, поэтому и закомментировал ее.
Вопросы:
1. Что такое DELPHI6_UP? Константа?
2. Почему тогда в D7 компилировалось? Она ведь тоже выше 6-й и функция уже перенесена в Classes.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 22.06.2010, 11:41   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Константа?
Это не совсем константа. Это условие компиляции.
Если я где-то вверху укажу
{$DEFINE DELPHI6_UP} то все что :
{$IFDEF DELPHI6_UP}
Между этим условием будет компилятором компилится
{$ELSE}
иначе если я этот DEFINE не напишу в коде компилится будет эта часть
Именно компилится а не выполнятся.
{$ENDIF}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.06.2010, 12:24   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Так так так... D2009 пытается компилить после ELSE, с чего бы это? Он не понимает что такое DELPHI6_UP?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 22.06.2010, 12:26   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Он не понимает что такое DELPHI6_UP?
Посмотри выше по коду оно определено это DELPHI6_UP?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.06.2010, 12:52   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от mutabor Посмотреть сообщение
Он не понимает что такое DELPHI6_UP?
Эта вещь вводиться искусственно. Вот допустим, написан код на Дельфи 5, но тип, писавший это подозревает о заковыках в Дельфи 6 и вставил такое условие компиляции.
Далее он компилировал компилировал и накомпилировал на Дельфи 5. А потому взял да и апгрейдился до 6-й версии. А проект сопровождать надо? Надо. Вот он его и сопровождает. Просто дописывает строчку типа
Код:
{$DEFINE DELPHI6_UP}
Этого достаточно для корректной версии проекта в новой версии. Кстати, по этому принципу построены некоторые профилировщики - они вставляют такие вот условия компиляции. Когда надо померить скорость функций в проге - программер пишет определенное матерное слово и тогда прога помимо непосредственной работы еще и сбрасывает информации о времени затраченной на выполнении. А когда нужен релиз, он это слово комментит
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 22.06.2010 в 12:55.
Utkin вне форума Ответить с цитированием
Старый 22.06.2010, 13:02   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Посмотри выше по коду оно определено это DELPHI6_UP?
Нет. Видимо это где-то есть в недрах VCL.

Посмотрел для примера в другом компоненте, там иначе версию определяют, вот выдрал кусок оттуда:
Код:
// Delphi 9.x (Delphi 2005)
{$IFDEF VER170}
  {$DEFINE VER17_PLUS}
  {$DEFINE VER_OK}
{$ENDIF}

// Delphi 10.x (Delphi 2006)
{$IFDEF VER180}
  {$DEFINE VER18_PLUS}
  {$DEFINE VER_OK}
{$ENDIF}

// Delphi 2007
// Note: D2007/win32 defines VER180 and VER185. D2007/.NET defines VER190
{$IFDEF VER185}
  {$DEFINE VER185_PLUS}
  {$DEFINE VER_OK}
{$ENDIF}
{$IFDEF VER190}
  {$DEFINE VER19_PLUS}
  {$DEFINE VER_OK}
{$ENDIF}

// Delphi 2008 (Tiburуn)
{$IFDEF VER200}
  {$DEFINE VER20_PLUS}
  {$DEFINE VER_OK}
{$ENDIF}
А хотя, для конкретной версии можно убрать вообще проверку и не париться, просто интересно хоть ознакомиться, что это за дефайны и с чем их едят.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 22.06.2010, 13:04   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Эта вещь вводиться искусственно. Вот допустим, написан код на Дельфи 5, но тип, писавший это подозревает о заковыках в Дельфи 6 и вставил такое условие компиляции.
Т.е. чтобы заработало, мне нужно выше указать что сейчас именно DELPHI6_UP? Как это сделать?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 22.06.2010, 13:17   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Стилет же написал:
Код:
{$DEFINE DELPHI6_UP}
Где-нибудь в начале проги. Имейте ввиду, что обычно так указывается какая-нибудь фигня зависящая от конкретной версии, то есть оно может не работать в следующих и предыдущих версиях.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 22.06.2010, 13:35   #9
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Спасибо, все понятно. Поищу в нете как дефайнами пользоваться, а то я уже наглеть начал
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 22.06.2010, 14:09   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а то я уже наглеть начал
Ну, дружище, ты это можешь в хелпе Делфи почитать, там все описано, кратко но понятно
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Версии Delphi Fellics{новичок} Софт 17 12.10.2010 21:52
Версии Си L_M Общие вопросы C/C++ 1 14.05.2008 22:53
Выбор версии Delphi Febreze Общие вопросы Delphi 15 24.04.2008 23:45
Не подскажете название последний версии Delphi? X-Юзер Софт 13 12.03.2008 14:46
Версии Delphi!!! Oleg Romanchuk Свободное общение 2 22.08.2007 10:53