Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/34: Рейтинг темы: голосов - 34, средняя оценка - 4.79
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6808 / 2048 / 238
Регистрация: 14.12.2014
Сообщений: 4,297
Записей в блоге: 12

DEFINE-ы для разных версий Delphi (пользуйтесь!)

21.10.2016, 11:33. Показов 7257. Ответов 8

Студворк — интернет-сервис помощи студентам
Сделал большой include-файл с define'ами, определяемыми в зависимости от версии Delphi.
Информация собрана из различных источников, часть их них перепроверены и откорректированы.

Зачем это нужно? Например, вы пишете прогу или модуль, которые, во-первых, должны компилиться на разных версиях Delphi, во-вторых, использовать новые возможности.
Собственно, example'ы (немного утрированные) также представлены в архиве.

В случае каких-либо косяков или дополнений – пишите

Привожу описание (сам код см. в архиве):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// *** THIS INCLUDE IS DESIGNED FOR DELPHI COMPILERS VERSION 6 AND ABOVE !!! \\\ It outputs "__YOU_NEED_AT_LEAST_DELPHI_6_OR_ABOVE_TO_COMPILE_THIS__" error line to code for earler compiler versions! //
// *** This include cannot be used with Delphi 8 and 2007 for .NET compilers and will show fatal message in these cases !!!                                                                            //
// *** It's recommended to include this file right after "program" or "interface" keywords and other $DEFINE's declarations.                                                                           //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ===============
// CHANGES HISTORY
// ===============
// v1.00 beta (04.10.2016)
// [!] The first version of the include :)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// This include defines symbols "IsDelphiXXX" and "DelphiXXX" where XXX is 6, 7, 2005, 2006, 2007, 2009, 2010, XE (and XE1), XE2..XE8, Seattle (and 10), Berlin (and 101).
// Symbol "IsDelphiXXX" is defined for exact version, "DelphiXXX" for specified and all above versions (e.g. "IsDelphi7" defined only for Delphi 7, "Delphi7" defined for Delphi 7 and above).
// Sumbols "NoDelphiXXX" means using earler version of compiler (you can also check it for incompatibility of exact compiler version). Equals to {$IFNDEF DelphiXXX}.
// Symbols "MOBILE" and "DESKTOP" are defined for mobile and desktop compilers. Symbols "IOS32" and "IOS64" are defined for 32 and 64-bit iOS platforms.
// Symbol "ANSI" is defined if "UNICODE" symbol is not defined.
// The following symbols are defined to indicate features (directives, attributes, types, etc.) support (see defines below for comments):
// * DelphiBerlin/Delphi101: Android601, UnsafeForAll, VolForAll (and VolatileForAll), WeakForAll, (and also UnsafeVolWeakForAll), MobUtf8String, MobRawByteString, Extended16 (for OS X only),
//     HelpNoPvtAcc (and HelpersNoPrivateAccess);
// * DelphiSeattle/Delphi10: Android511, iOS84;
// * DelphiXE8: FixedIntTypes, DblSizeLongTypes (for 64-bit iOS only), UnitScopedFQN (and UnitScopedFullyQualNames);
// * DelphiXE7: NewDynArrayOps, ParallelLib, NewCompIntr (and NewCompilerIntrin);
// * DelphiXE6: NewMobHPPEMIT;
// * DelphiXE5: ClassOpOverl (and ClassOperatorOverload - both for NextGen compiler);
// * DelphiXE4: Volatile, Weak, Ref, NoOldStrings (for iOS only), ARCModel, ZeroBasedStrings, ExtCompat (and ExtendedCompatibility);
// * DelphiXE3: RecHelpers, AtomicIntrin;
// * DelphiXE2: UnitScopeNames, CrossPlatformRTL, PackedByteAlign, Extended8 (for Win64 only);
// * DelphiXE/DelphiXE1: Align16, CodeAlign, StrongLinkTypes, RegExp, IngoreStringChecks;
// * Delphi2010: EnhancedRTTI, Attributes, Delayed, ClassConstr, ExtraInterfaceOps;
// * Delphi2009: DefaultIntrin, Generics, SmartPointers, AnonymMethods, NestedExcepts, PointerMath, ExitParam, TMonitor, DeprecatedText;
// * Delphi2007: [no symbols];
// * Delphi2006: RecMethods, OpOverl (and OperatorOverload), ClassVars, FastMM;
// * Delphi2005: ForIn, Inline, DynArrayInit, NestedTypes, NestedConst, ClassProperty, Unsafe, UnicodeIds, UsesWildcards, Region, ClassHelpers, Static, Strict, Sealed, Final,
//     AbsClass (and AbstractClasses), Experimental, ArrPropOverl (and ArrayPropertyOverload), MethodInfo;
// * Delphi7: WarnUnsafeCode, TFmtSetOverl (and TFormatSettingsOverloads).
// * Delphi6 and below: [no symbols].
// If some symbol is not defined "NoXXX" symbol is defined (NoForIn, NoInline, NoStatic, NoClassHelpers etc., except build-in but including NoMOBILE, NoDESKTOP, NoIOS32, NoIOS64, NoANSI, NoUNICODE).
// So you can use these symbols with $IFNDEF even if this file may be not included and you prefer to use some feature (e.g. {$IFNDEF NoInline}inline;{$ENDIF} instead of {$IFDEF Inline}inline;{$ENDIF}).
// p.s. "NoOldStrings" symbol is inverted to "OldStrings". Be careful to use {$IFDEF OldStrings} if this include file may be absent because this define will be absent too.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// You may define one or more symbols "NeedDelphiXXX", "OnlyDelphiXXX" or "NotAboveDelphiXXX", "NotForDelphiXXX", "TestWarnings", "TesedDelphiXXX" and "DesignedForDelphiXXX" BEFORE including this file:
// * "NeedDelphiXXX" is used to prevent compilation by earler Delphi version (compiler will show fatal message); you shouldn't use "NeedDelphi6" because this include works only with Delphi 6 and above.
// * "OnlyDelphiXXX" is used to indicate that code can be compiled ONLY by Delphi version you need (compiler will show fatal message for other compiler versions);
// * "NotAboveDelphiXXX" is used to prevent compilation by later Delphi version (compiler will show fatal message);
// * "NotForDelphiXXX" is used to indicate incompatibility with some Delphi version (compiler will show fatal message for this compiler version);
// * "TestWarnings" with one or more "TestedDelphiXXX" are used to show warning messages for Delphi version compilers that are not well-tested with this code;
// * "DesignedForDelphiXXX" is used to indicate compiler version this code is best designed for (compiler will show warning messages for other versions);
//    you may define also "TestedDelphiXXX" symbols (without "TestWarnings") to soften this warning message to hint.
// You may also define one of the following symbols: NeedMobile, NeedDesktop, NeedMSWindows (or NeedWindows), NeedWin32, NeedWin64, NeedMacOS, NeedMacOS32, NeedMacOS64, NeedIOS, NeedIOS32, NeedIOS64,
// NeedAndroid, NeedLinux, NeedLinux32, NeedPosix, NeedPosix32, NeedCPU32bits (or NeedCPU32), NeedCPU64bits (or NeedCPU64), NeedCPU386, NeedCPUx86, NeedCPUx64, NeedCPUARM, NeedCPUARM32, NeedCPUARM64,
// NeedAssembler, NeedUnicode (or NeedUnicodeStrings), NeedAnsi (or NeedAnsiStrings), NeedOldStrings, NeedNextGen to show fatal message if such feature is not supported.
// You may replace "Need" prefix by "Recommend" (e.g. "RecommendAnsi") to show recommendation warning message (instead of fatal message) if such feature is not supported.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// p.s. Information is collected from [url]http://docwiki.embarcadero.com/[/url] and [url]https://stackoverflow.com/questions/8460037/list-of-delphi-language-features-and-version-in-which-they-were-introduced-depre[/url] //
// Additional information is collected from [url]http://www.interface.ru/home.asp?artId=6763[/url], [url]http://citforum.ru/programming/delphi/delphi2005[/url] and other (marked as "info from another Internet resource"). //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Один из примеров использования:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
program DelphiVerExample2;
{$APPTYPE CONSOLE}
// This is a second example of "DelphiVerDef7x.inc" include using.
 
{$DEFINE NeedDelphi7}  // You need at least Delphi 7 compiler version,
{$DEFINE NeedWindows}  // This code can be compiled only for Windows.
{$I DelphiVerDef7x.inc}
{$IFNDEF DelphiVerDef7x100}{$MESSAGE FATAL 'DelphiVerDef7x.inc file is not included or incompatible version !!!'}{$ENDIF}
 
{$IFDEF UnitScopeNames}
uses System.SysUtils;
{$ELSE}
uses SysUtils;
{$ENDIF}
 
procedure WriteRes(const S: String); {$IFDEF Inline}inline;{$ENDIF}
begin
  WriteLn('You''ve entered ' + S)
end;  // AddN
 
var
  S: String;
  N: Extended;
  D: TDateTime;
{$IFDEF ForIn}
  Ch: Char;
  Ok: Boolean;
{$ENDIF}
begin
  Write('Enter number, date/time or some string: ');
  ReadLn(S);
 
{$IFDEF ForIn}
  Ok := False;
  for Ch in '., ' do
  begin
    Ok := TryStrToFloat(S, N);
    if Ok then Break;
    {$IFDEF DelphiXE}FormatSettings.{$ENDIF}DecimalSeparator := Ch
  end;
  if Ok then
{$ELSE}
  DecimalSeparator := '.';
  if TryStrToFloat(S, N) then
{$ENDIF}
    if Frac(N) = 0 then WriteRes('an integer number.')
    else WriteRes('a floating point number.')
  else
 
  begin
{$IFDEF ForIn}
    Ok := False;
    for Ch in '.-/ ' do
    begin
      Ok := TryStrToDateTime(S, D);
      if Ok then Break;
      {$IFDEF DelphiXE}FormatSettings.{$ENDIF}DateSeparator := Ch
    end;
    if Ok then
{$ELSE}
    if TryStrToDateTime(S, D) then
{$ENDIF}
      WriteRes('a date/time.')
      else WriteRes('some string.')
  end
end.
Вложения
Тип файла: zip DelphiVerDef7x.zip (11.9 Кб, 34 просмотров)
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2016, 11:33
Ответы с готовыми решениями:

Host для разных версий CLR
Доброго времени суток, уважаемые форумчане! Имеется User Control, разработанный на .NET 3.5. Его необходимо использовать в качестве...

Разрешение на создание файла для разных версий ОС
Почему то не создаётся текстовый фаил в эмуляторе 4.4.2 не в каком каталоге ни не сд карте ни в памяти I/System.out: Ошибка...

Разные формулы для разных версий MS Office
Народ привет! Такая проблема, в вордовском файле my.doc есть формулы набранные в ворде 2007 и формулы набранные в ворде 2003. ...

8
21.10.2016, 11:58

Не по теме:

Такой код нормально ни читать ни поддерживать. Для этого делают ветки.

0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6808 / 2048 / 238
Регистрация: 14.12.2014
Сообщений: 4,297
Записей в блоге: 12
21.10.2016, 12:47  [ТС]
Example'ы несколько утрированные, как я уже говорил. Конечно, такое использование {$IFDEF ForIn} сомнительно (хотя, кому-то и это может пригодиться).
Но скажем, использовать {$IFDEF Inline} или {$IFDEF UnitScopeNames} можно быть очень полезно и не нарушит читабельность кода.
Также можно делать проверку минимальной версии Delphi, типа ОС, разрядности и т.п. (чтобы получать не сообщения компилятора об ошибке в [такой-то] строчке кода, а видеть симпатичное предупреждение о том, что нужна версия [такая-то]).
И т.д.
0
0 / 0 / 0
Регистрация: 27.11.2016
Сообщений: 3
27.11.2016, 15:37
Добавьте на какой-нибудь github. Интересный файл, удобно подсмотреть с какой версии нужная штука работает например.
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6808 / 2048 / 238
Регистрация: 14.12.2014
Сообщений: 4,297
Записей в блоге: 12
28.11.2016, 14:07  [ТС]
Ruzzz, там есть ссылка в самом inc-файле: http://xk7.ru/p/d/u
0
0 / 0 / 0
Регистрация: 27.11.2016
Сообщений: 3
03.12.2016, 17:52
Jin X, на выходных решил поизучать ваш файл и всевозможные ссылки на статьи «Что нового в версии..». И решил таки по-велосипедить. Исправил некоторе неточности (например в делфи нет SmartPointers в таком виде как например в С++, просто появилась возможность их легко реализовать), обдумал и немного изменил именование. Но самое главное оставил только объявления новых возможностей, как можно укоротив файл. Возможно вы согласитесь разделить свой на две части - основная, и доп-ная, и мы можем с вами вместе реализовать основной. Все таки вместе веселее ) А возможно, что скорее всего вас вполне устраивает ваш вариант. Если что могу подробно описать что и как я решил оставить в основной части. Вам огромное спасибо за файл, благодаря ему я таки изучил историю изменений :)

https://github.com/Ruzzz/DelphiDefs
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6808 / 2048 / 238
Регистрация: 14.12.2014
Сообщений: 4,297
Записей в блоге: 12
04.12.2016, 09:45  [ТС]
Цитата Сообщение от Ruzzz Посмотреть сообщение
Исправил некоторе неточности (например в делфи нет SmartPointers в таком виде как например в С++, просто появилась возможность их легко реализовать)
А можно список этих неточностей?

Цитата Сообщение от Ruzzz Посмотреть сообщение
Возможно вы согласитесь разделить свой на две части - основная, и доп-ная, и мы можем с вами вместе реализовать основной.
Имеется в виду, что в одном будет список фич, а в другом - проверка этих фич и версии (NeedDelphi2007, NeedWindows, RecommendDesktop) и т.п.?
Ruzzz, вообще, идея хорошая. Я даже думал сделать 3 версии:
• Большой файл со всеми фичами
• Разделённый на 2 части
• Разделённый на 2 части сокращённый (основной - без No-вариантов, дополнительный – без Recommend, DesignedFor, Tested, Only, NotFor, т.е. только Need и NotAbove)

По поводу названий символов - х/з. Я думал о вариантах с подчёркиванием и с HAS, но выбрал более короткие (для удобства). Делать ещё 1 вариант с такими названиями... не слишком много файлов получится (10 штук)?
0
0 / 0 / 0
Регистрация: 27.11.2016
Сообщений: 3
04.12.2016, 12:32
Честно говоря я сам все сомневаюсь по поводу делать ли две версии WordWord и WORD_WORD. Но все же склоняюсь что будет лучше иметь обе версии в виде alias, так как любимый стиль у каждого свой. Хотя первый вариант короче.
Я отпишусь позже по всем пунктам подробнее.
Еще CompilerVersion не работает в dpk.

Добавлено через 1 минуту
Еще я добавил в файл TODO некоторые вопросы.
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6808 / 2048 / 238
Регистрация: 14.12.2014
Сообщений: 4,297
Записей в блоге: 12
05.12.2016, 11:36  [ТС]
Цитата Сообщение от Ruzzz Посмотреть сообщение
Честно говоря я сам все сомневаюсь по поводу делать ли две версии WordWord и WORD_WORD. Но все же склоняюсь что будет лучше иметь обе версии в виде alias, так как любимый стиль у каждого свой. Хотя первый вариант короче.
А я вот склоняюсь к тому, чтобы сделать оба варианта, но отдельно (чтобы не загромождать файл).
Т.е. как-то так:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CLASSIC_NAMES\ - classical symbol names (like HAS_INLINE, DELPHI7_UP)
  FULL\ - full version (with NO_XXX, ONLY_XXX and NOT_FOR_XXX, DESIGNED_FOR_XXX, RECOMMEND_XXX, TEST_WARNINGS and TESTED_XXX symbols support)
    DELPHI_VER_DEFS_EX.INC - all defines in one file (both features and checks)
    DELPHI_VER_FEAT_EX.INC - features defines only
    DELPHI_VER_CHK_EX.INC - platform and features checks only
  BRIEF\ - brief version (without NO_XXX, ONLY_XXX and NOT_FOR_XXX, DESIGNED_FOR_XXX, RECOMMEND_XXX, TEST_WARNINGS and TESTED_XXX symbols support)
    DELPHI_VER_DEFS.INC - all defines in one file (both features and checks)
    DELPHI_VER_FEAT.INC - features defines only
    DELPHI_VER_CHK.INC - platform and features checks only
 
ShortNames\ - short symbol names (like Inlines, Delphi7up)
  Full\ - full version (with NoXXX, OnlyXXX and NotForXXX, DesignedForXXX, RecommendXXX, TestWarnings and TestedXXX symbols support)
    DelphiVerDefsEx.inc - all defines in one file (both features and checks)
    DelphiVerFeatEx.inc - features defines only
    DelphiVerChkEx.inc - platform and features checks only
  Brief\ - brief version (without NoXXX, OnlyXXX and NotForXXX, DesignedForXXX, RecommendXXX, TestWarnings and TestedXXX symbols support)
    DelphiVerDefs.inc - all defines in one file (both features and checks)
    DelphiVerFeat.inc - features defines only
    DelphiVerChk.inc - platform and features checks only
 
Old\ - old versions
  1.00\
    DelphiVerDef7x.inc
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.12.2016, 11:36
Помогаю со студенческими работами здесь

Разный код для разных версий Windows (XP/WIN7)
День добрый. Как в Дельфи пишут обычно код для разных версий Windows? Желательно через препроцессор, так как я хочу статически...

Запуск Cmake для разных версий Microsoft Visual Studio
Я запускаю cmake через батник следующим образом "c:\Program Files\CMake\bin\cmake.exe" ^ -H. ^ -Boutput_64 ^ ...

Тестирование через Visual Studio для разных версий Windows
Подскажите каким образом можно протестировать работоспособность приложения для разных Windows(XP, server 2003, 8 ,10, server 2008, server...

Acronis True Image можно ли использовать для разных версий Windows
Здравствуйте. Скажите пожалуйста если я записал образ Acronis True Image на диск в системе winxp или windows 7. Можно ли использовать его...

Google maps метод поиска фрагмента карт на разметке для разных версий Android
Столкнулся с такой проблемой. в андройде 6 работает один метод поиска фрагмента карт на разметке а в 5 и ранее - другой. //api 21+ ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru