Переходим от delphi 4 к delphi 5


Содержание

Миграция проекта с delphi 7 на delphi 5

24.05.2020, 11:23

Перенос проекта с Delphi 10.1 Berlin на Delphi 10.2 Tokyo
Проект программы сделан в Delphi 10.1. При открытии его в Delphi 10.2, компилятор ругается на.

Подскажите, какие файлы после сборки проекта отвечают за восстановление проекта .dpr в Delphi 7
Подскажите, какие файлы после сборки проекта отвечают за восстановление .dpr в Delphi 7, если он в.

Что лучше брать Delphi XE2, Delphi XE, Delphi 7?
Привет форумчане! У меня вопрос: что лучше брать Delphi XE2, Delphi XE, Delphi 7? Как вообще.

Delphi тип проекта
Возникла идея создать небольшую библиотеку. Для удобства хочу добавить кнопку в меню File -> New ->.

открытие проекта в delphi
вчера создал проект в delphi xe 5 ,там всего 2 формы и кнопки, и применил другой стиль формы.

Блог GunSmoker-а

. when altering one’s mind becomes as easy as programming a computer, what does it mean to be human.

3 июля 2010 г.

Как настроить Delphi 2010, чтобы она выглядела как Delphi 7

Я не собираюсь обсуждать, какой интерфейс лучше — умалчиваемый в Delphi 2010 или old-school Delphi 7 (лично я предпочитаю новый), но я хочу показать, как вы можете настроить Delphi 2010 так, чтобы она выглядела и «чувствовалась» как Delphi 7.

Один из самых частых затыков при обновлении версии Delphi — незнакомый интерфейс. Человек вроде уже и хочет обновиться (всякие вкусности пощупать, часто — поддержку Windows Vista/Windows 7), но. родная 7-ка ближе к телу. Что ж, с этой статьёй у вас будет на одну причину меньше использовать Delphi 7 (а желающие всё же остаться на Delphi 7 читают тут).

Итак, по-умолчанию 2010-я студия имеет такой вид:

Ниже я приведу набор шагов, которые нужно сделать, чтобы «превратить» Delphi 2010 в Delphi 7. Заметьте, что не все из перечисленных шагов нужно выполнять на вашей конкретной конфигурации — это зависит от ваших настроек. Некоторые шаги могут быть у вас уже сделаны.

1. Отстыковка окон.

Первое, что мы сделаем — отстыкуем окна. Для этого вы можете щёлкнуть на любом окне и сбросить галочку «Dockable»:

После этого окно отстыковывается от главного окна и будет плавать отдельно. В принципе, даже необязательно снимать галку: просто схватили блок за заголовок — и тащите. Он сам отстыкуется. Вот вид окна Delphi после отстыковки инспектора объектов:

Вы можете руками отстыковать все окна. Или вы можете просто переключиться на предопределённый шаблон раскладки окон (такой шаблон называется Desktop-ом или рабочим столом). Для этого разверните список рабочих столов в главном окне и выберите рабочий стол «Classic undocked»:

Если вы не видите этой панели — вы можете переключиться на другой рабочий стол через меню («View»/»Desktops»/»Classic undocked»):

В результате у вас должно получиться что-то такое:

Как видите, все окна плавают — всего в два щелчка мыши!

2. Отстыковка дизайнера форм.

Второе, что мы сделаем — отстыкуем дизайнер форм, ведь отстыковать его методом, указанным выше, нельзя. Для этого мы идём в опции IDE («Tools»/»Options»):

В появившемся окне сбрасываем галочку «Embedded designer» в разделе «Environment Options»/»VCL Designer»:

После сброса галочки среда попросит у вас перезапуск:

Закрываем все окна и перезапускаем Delphi. После перезапуска дизайнер форм будет плавающим окном:

Окей, щелчков здесь было больше и нам потребовался перезапуск IDE. Но всё равно не сложно.

Примечание: Начиная с Delphi XE3, опция «Embedded designer» скрыта из настроек среды, но её всё ещё можно изменить вручную, отредактировав ключ реестра HKEY_CURRENT_USER\Software\Embarcadero\BDS\10.0\Form Design (10.0 — это для XE3), изменив значение Embedded Designer в False . Учтите только, что FireMonkey поддерживает только интегрированный дизайнер.

3. Палитра компонент.

Далее — включение палитры компонент «как в Delphi 7». Во-первых закройте плавающее окошко «Tool Palette» (вернуть обратно его можно из меню «View»/»Tool Palette»), затем щёлкните правой кнопкой по главному окну и выберите палитру «Component»:

Кстати, если панельки «Desktop» вы у себя не нашли (помните, выше, когда мы переключались на «Classic undocked»?), то вы также можете включить её тут — щёлкайте по пункту «Desktop». В любом случае, в итоге вы получаете свою палитру компонентов «в стиле Delphi 7»:

Три щелчка — и любимая палитра компонент снова с вами.

4. Переключение сортировки в инспекторе объектов.

Последний шаг — инспектор объектов. В принципе, нельзя сказать, что это специфично для Delphi 2010 — в Delphi 7 у инспектора объектов тоже было два варианта отображения. Но, на всякий случай, я упомяну про это тут.

Вы можете переключаться между двумя видами инспектора объектов, щёлкая правой кнопкой по нему и выбирая «Arrange»/»be Category» или «Arrange»/»by Name»:

Вот вид инспектора с сортировкой по категориям:

А вот с сортировкой по именам:

Выберите вид, к которому вы привыкли в Delphi 7.

5. Устанавливаем справку из D7 в D2010.

Ещё одна претензия к Delphi 2010 — её изменившаяся справочная система. Позвольте мне снова остаться в стороне от вопроса что лучше — я просто покажу, как вы можете встроить свою любимую справку от Delphi 7 в Delphi 2010.

Для этого есть два способа:

  1. Минимальная интеграция — открытие справки отдельной командой.
  2. Максимальная интеграция — подмена штатной справки.

Первый способ проще и он не требует сторонних решений, плюс вы не теряете существующую функциональность. Но и по удобству он ниже: вам придётся вызывать справку отдельной командой.

Способ два посложнее, вам также понадобится скачать сторонний эксперт, но зато вы можете подменить встроенную справку. К сожалению, при этом вы лишаетесь справки по диалоговым окнам и прочим изменившимся за это время вещам. Впрочем, никто не запрещает вам вызывать встроенную справку руками через меню Help.

Итак, способ первый: скопируйте файлы справки от Delphi 7 на вашу машину (куда — не суть важно, главное, чтобы в записываемую папку). Далее, идите в меню настройки утилит «Tools»/»Configure tools»:

В открывшемся окне щёлкайте по кнопке «Add» для добавления новой утилиты:

После этого открывается окно создания команды вызова новой утилиты. Вводите такую информацию:

  • Title — любое. Это имя команды будет показываться в меню.
  • Program — «winhlp32.exe». Если вы работаете на Windows Vista или выше, вам нужно доустановить поддержку устаревшего формата справки, как указано в этой статье.
  • Working dir — каталог, куда вы положили файлы от справки Delphi 7.
  • Parameters — «-k $CURTOKEN d7.hlp». Вы также можете указать полный путь к D7.hlp (включая каталог, только не забудьте про кавычки, если ваш путь содержит пробелы), если у вас возникают проблемы с открытием справки. $CURTOKEN — это текущее слово в редакторе Delphi (раскройте список Macros, чтобы увидеть другие варианты). А «-k» — указание на открытие справки по слову в индексе. В принципе, вы можете убрать эту часть, оставив только имя файла справки.

После сохранения команды, вы теперь можете вызывать справку Delphi, выбирая её из меню:

Что касается способа два, то вам также нужно скопировать файлы справки Delphi 7 на свою машину (кто-бы сомневался!). Кроме того, вам также нужно доустановить поддержку справки WinHelp, если вы работаете в Vista или выше.

После подготовки вам нужно скачать с CodeCentral эксперт (расширение) к IDE для интеграции справки. Вот вариант 1. Вот вариант 2. Они весьма похожи и ставятся примерно одинаково, но мне больше понравился второй — он и покрасивше и позволяет использовать кнопку F1. Поэтому я буду описывать процесс для второго эксперта, но первый ставится полностью аналогично — надеюсь, вы сумеете при желании разобраться с ним самостоятельно по аналогии.

Для качала распакуйте скачанный архив. Лучше всего распаковывать в свою папку с проектами или вроде того. Далее, запускаете Delphi 2010 и открываете пакет из папки Packages. Варианта для Delphi 2010 там нет, но это не имеет значения — просто открывайте вариант для самой последней версии Delphi. Вот открытый пакет в менеджере проектов Delphi 2010:

Далее щёлкайте по нему правой кнопкой и выбирайте Install:

При этом эксперт будет скомпилирован и установлен в IDE. Всё, можете закрывать все файлы (сохранив изменения). Файлы с диска, понятно, удалять не надо :)

Теперь осталось только настроить эксперт. Для этого открываем меню «Help»/»Delphi Help Expert»:

Откроется окно настроек, где вы можете задать аж три разных вида справки!

Тут вообще всё тривиально: есть три типа справки — CHM, HLP и интернет. Вы можете указать источник для любой справки и забиндить любую справку на любую из комбинаций кнопок: F1, Ctrl + F1, Shift + F1, Alt +F1. Достаточно просто.

К примеру, на снимке экрана выше я указал открывать справку от Delphi 7 по кнопке F1, а по Ctrl + F1 — открывать справку по Delphi в интернете (вот вам строка для Copy&Paste: «http://www.google.ru/search?q=%s+site:http://docwiki.embarcadero.com/»). docwiki.embarcadero.com — это Вики для продуктов Embarcadero. Т.е. пополняемая сообществом справка. Более полный вариант обычной справки.

Итак, когда вы всё настроили, закрывайте окно настроек и жмите F1. Бац, вылезает справка Delphi 7. Если при этом вы стояли в редакторе кода на каком-то слове, то это слово будет указано в индексе (в этом примере я стоял на TRegistry):

Если же вы нажмёте Ctrl + F1, то откроется ваш браузер по-умолчанию с online-справкой (пример с тем же TRegistry):

Итак, последняя преграда пала перед нашим натиском :)

Бонус-примечание: если вы хотите ещё больше возможностей со справкой и чувствуете, что вы уже не совсем начинающий — вы можете установить этот навороченный IDE Expert, вместо простых экспертов, упомянутых выше. Для него есть даже видео-инструкция. Посмотрите, не пожалеете: будете потом облизываться и срочно его себе поставите :D (лично я поставил себе именно его)

6. Прочие финты ушами.

В заключение хотелось ещё сказать, что вы можете стыковать любые окна с любыми другими в любых комбинациях. Чтобы окно можно было пристыковать — оно должно быть «Dockable». Помните, мы снимали такую галочку в первом пункте? Вот, если хотите пристыковать окно — её надо установить, если она не стоит. А если вы двигаете окно, и оно очень некстати хочет пристыковаться — зажмите Ctrl.

Кроме стыковки вы также можете «приколоть» окно к другому, на манер панелек в Photoshop. Для этого перетащите окно на закладку панели в другом окне. А если закладок у вас на экране нет — то кидайте одно окно на центр другого (если кидать на сторону — оно пристыкуется вместо прикалывания). К примеру, бывает достаточно удобно совместить все вспомогательные окна в одно окно:

Когда я ещё сидел на Delphi 7, я именно так и делал.

7. Итог.

Итак, мы смогли «сделать из Delphi 2010 Delphi 7» и сделать это достаточно просто. Никаких сторонних прибамбасов — всё штатными средствами (окей: кроме справки). Ну а теперь, найдите 10 отличий (фоновый рисунок не считается! :D ):

История Delphi

Что такое delphi? Делфи — это высокоуровневый, императивный язык программирования (диалект Object Pascal) со строгой типизацией переменных.

По данным Tiobe Index, наибольшая популярность делфи наблюдалась в октябре 2001 года, когда этот замечательный язык программирования занимал шестую строчку в рейтинге самых популярных языков программирования

На этой странице представлено краткое описание всех версий Delphi. История Delphi начинается с 1995 года и насчитывает более 20 различных версий. Сегодня Delphi поддерживает разработку под Windows, Linux, Mac OS, iOS и Android.

Borland Delphi (Delphi 1)

Дата выхода: 14 февраля 1995 года

Слоган: Delphi и Delphi Client/Server являются единственными средствами разработки, которые обеспечивают быструю разработку приложений (RAD), преимущества визуального компонент-ориентированного дизайна, мощность оптимизации родного компилятора и масштабируемые клиент/серверные решения.

Внешний вид IDE:

Надо сказать, что Delphi 1 можно назвать без преувеличения «единственной и неповторимой» так как в этой версии Delphi можно было собирать приложения только под 16-ти разрядную версию Windows 3.1.

Delphi 2

Дата выхода: 10 февраля 1996 года

Слоган версии: «Простота VB с Силой C++»

В Delphi 2 была реализована поддержка 32-разрядной версии Windows (Win 95), обеспечена ещё более продвинутая быстрая разработка приложений (RAD). Тогда же в Delphi появилась поддержка OLE Automation, вариантных типов, long string и т.д.

Вид IDE Delphi 2:

Project Manager Delphi 2:

Delphi 3

Дата выхода: 5 августа 1997 года

Слоган: Наиболее полный набор визуальных, высокопроизводительных, клиент и серверных инструментов разработки для создания распределенных корпоративных и веб-приложений.

Так, если Delphi 2.0 позиционировалась как инструмент для создания высокопроизводительных приложений для работы с базами данных, то новая версия — Delphi 3 имела уже в своем составе новые компоненты, реализующие работу с сетевыми протоколами: HTTP, SMTP, POP3 и т.д. Все новые компоненты для работы с Сетью расположились на вкладке Internet палитры компонентов Delphi. Надо сказать, что часть тех компонентов дожили и до сегодняшнего дня, например, PageProducer.

Внешний вид IDE Delphi 3:

Delphi 4

Дата выхода: 16 июня 1998 года

Delphi 4 представляет собой полный набор профессиональных и клиент/сервер средств разработки для создания высокопроизводительных решений.

В Delphi 4 реализованы механизмы Drag&Drop, Drag&Dock для компонентов. Новые функции, включенные AppBrowser, динамические массивы, перегрузка методов, поддержка Windows 98, улучшенная OLE и COM поддержка, а также расширенная поддержку баз данных.

Можно сказать, что для достаточно большой аудитории программистов, работающих в Delphi эта версия наравне с более поздней Delphi 7 стала самой любимой и неизменной IDE, так как сочетала в себе скорость, качество и быстроту разработки наряду с минимальными затратами финансовых средств.

Внешний вид IDE Delphi 4:

Delphi 5

Дата выхода: 10 августа 1999 года

Слоган: высокопродуктивная разработка приложений для Интернет.

Delphi 5 преподнесла разработчикам достаточно много новых возможностей и функций. Так, например, в Delphi 5 впервые была реализована поддержка различных макетов рабочего стола (Layouts), была реализована поддержка фреймов, инструменты для перевода интерфейса приложений на другие языки. По части Интернет-технологий, помимо прочего, была реализована поддержка XML. Для работы с базами данных была реализована поддержка ADO. Кроме того были улучшены механизмы отладки приложений.

Вид IDE Delphi 5:

Delphi 6

Дата выхода: 21 мая 2001 года

Слоган: с Delphi 6 Вы сможете легко и быстро создавать приложения для электронного бизнеса.

Borland Delphi 6 была введена поддержка Web Services. В Delphi 6 введены новые функции и усовершенствования в следующих областях: IDE, Интернет, XML, Компилятор, COM / Active X, поддержка баз данных …
Более того, в Delphi 6 добавлена поддержка кросс-платформенной разработки — что позволило, используя один и тот же код собирать приложения как с Delphi (под Windows) так и Kylix (под Linux). Кроме этого в Delphi 6 была реализована поддержка DBExpress, добавлены новые модули, классы и компоненты.

Заставка Delphi 6:

Внешний вид IDE Delphi 6:

Delphi 7

Дата выхода: 9 августа 2002 года

Размер дистрибутива: 680 Mb

Delphi 7 — это та версия Delphi, которая оставалась, да и видимо остается, самой популярной версией из всех ранее существующих версий. Во многом популярность Delphi 7 можно обозначить одной простой фразой — абсолютный провал следующей версии (Delphi 8). Эта версия Delphi стала настолько популярной, что даже спустя 10 лет после её выпуска многие разработчики так и продолжают её использовать, а разработчики Delphi (Embarcadero) в рамках своей акции «Купи Delphi XE и получи все предыдущие версии Delphi бесплатно» предлагали скачивать предыдущие дистрибутивы, начиная именно с Delphi 7.

Илон Маск рекомендует:  text-overflow в CSS

Эта же версия Delphi и стала последней вехой развития классического интерфейса IDE Delphi так как уже в следующей версии Delphi был реализован новый интерфейс (Galileo), который усугубил и без того шаткое положение Delphi 8 и ещё раз подчеркнул популярность старой доброй Delphi 7.

Заставка Delphi 7:

Внешний вид IDE Delphi 7:

Delphi 8

Кодовое название: Octane

Дата выхода: 22 декабря 2003 года

Новая версия Delphi под кодовым названием Octane должна была, по-видимому, стать той вехой развития Delphi, начиная с которой все влюбились бы в .NET-технологии. Сейчас уже мало, что можно найти и вспомнить по Delphi 8, но, тем не менее, сохранились в Сети некоторые сообщения от разработчиков Delphi, например, в Wiki (источник):

Delphi 8 была выпущена в декабре 2003 года исключительно в . NET-версии, что позволило разработчикам Delphi компилировать код Object Pascal в .NET CIL. IDE был переписан, чтобы приспособить его для. NET-развития. Delphi 8 была подвержена резкой критике за её низкое качество и за то, что было уже не возможно создавать приложения (*.EXE). Неспособность генерировать собственные приложения применима только к этой версии, так как возможность была добавлена обратно в следующем выпуске (Delphi 2005).

Действительно, Delphi 8 была самой нестабильной и, по-видимому, самой НЕ любимой версией Delphi как до так и после её выхода.

Внешний вид IDE Delphi 8:

Согласно данным tiobe.com к концу 2004 года рейтинг Delphi упал до своего абсолютного минимума. Но разработчики из Borland постарались сделать правильные выводы из сложившейся ситуации и в 2005 году на свет появилась новая версия Delphi.

Delphi 2005

Кодовое название: Diamondback

Дата выхода: 12 октября 2004 года

Начиная с 2005 года Delphi входит как часть в состав RAD Studio. В новой версии Delphi вновь появилась возможность разработки для Win32, а также был внесен ряд изменений, которые позволили частично изменить ситуацию в лучшую сторону. Хотя, как и предшествующая версия, Delphi 2005 подвергалась критике за нестабильность и большое количество всякого рода багов, тем не менее нельзя не отметить и ряд улучшений, которые были тогда сделаны разработчиками из Borland и до сих пор используются в Delphi.

Так, по части языковых возможностей, именно в Delphi 2005 была впервые реализована такая конструкция как:

аналог for … each в C#.

Или, например, по части полезных инструментов — в Delphi 2005 появился Help Inside. Также в редакторе исходного кода стали выделяться синтаксические ошибки схожим с MS Office образом (волнистой красной линией). В общем в Delphi 2005 наметилась тенденция на изменение курса в лучшую для всех нас сторону. Но тем не менее, назвать Delphi 2005 качественной, к сожалению было нельзя.

SplashScreen Delphi 2005:

Help Inside Delphi 2005:

Delphi 2005 Unlocked Layout:

Delphi 2006

Кодовое название: DeXter

Год выпуска : 2006

Новая версия Borland Developer Studio оказалась, наверное, первой, начиная с Delphi 8 версией, которая вела себя более-менее стабильно. Как и в BDS 2005 в новой версии студии была поддержка разработки проектов на C#, C++, Delphi for Win32 и Delphi for .NET. В Delphi 2006 появились нововведение как по части языковых конструкций, так и улучшения в отладке приложений:

Debugger Delphi 2006:

Кроме этого в Delphi 2006 были добавлены новые функции рефакторинга:

Также в Delphi 2006 были добавлены новые компоненты в VCL. В общем по этой версии можно было сказать, что Borland всё-таки смог выпустить вполне стабильную версию студии, которая использовала Galileo.

А потом случилось, то, чего мало кто ожидал.

8 февраля 2006 Borland объявила, что ищет покупателя для своей интегрированной среды разработки и линейки продуктов по базам данных, которые включают в том числе и Delphi.

Ниже Вы можете видеть скрины последней версии Delphi, которая разрабатывалась Borland’ом:

Стартовое окно BDS 2006:

Сравнение версий проекта:

Delphi 2007

Год выпуска: 2007

Весной 2007 года была выпущена новая версия студии, но уже под лэйблом CodeGear. Это была первая версия студии, которую можно было установить через Интернет. Delphi 2007 оказалась наиболее стабильной и быстрой за последние 4 года. Эта версия, можно сказать, реанимировала разработку под Win32 на Delphi. В этой версии Delphi появилась поддержка Windows Vista, AJAX и пр. улучшения.

Вот как выглядел установщик Delphi 2007:

IDE Delphi 2007
Думаю, что многие разработчики, использующие последние версии Delphi после выхода Delphi 2007 вздохнули более менее свободно — вот она та самая версия, которая отличалась стабильностью и скоростью.

В 2008 году CodeGear была продана и новым владельцем студии стала Embarcadero Technologies. Но продажа CodeGear для нас, как разработчиков, стала не главным. Главным в итоге стало то, что Delphi 2007 оказалась последней НЕ юникодной версией Delphi.

Delphi 2009

Кодовое название: Tiburon

Год выпуска: 2009

Tiburon стала той версией Delphi, начиная с которой можно было сказать, что в Delphi началась эпоха Юникода. В Delphi 2009 был введен ряд довольно значительных улучшений как в VCL так и в части самого языка Delphi.

Так, например, в Delphi 2009 впервые появилась вкладка компонентов Ribbon Controls о которой так много было рассказано в блоге WebDelphi.ru. В языке появился новый тип данных — Generics. Но, как сказано выше, одним из важнейших нововведений стала поддержка Юникода.

IDE Delphi 2009:

Delphi 2010

Кодовое название: Weaver

Год выпуска: 2009

В августе 2009 года была выпущена новая версия RAD Studio в состав которой вошла и новая версия Delphi — Delphi 2010. Установщик Weaver был выполнен в стильных чёрных тонах:

Но это конечно же не самое главное. В новой версии Delphi появился новый RTTI, поддержка Windows 7 Direct 2D, новые компоненты Gestures, экранная клавиатура и т.д. Кроме того в Delphi 2010 было введено по-крайней мере два очень значительных нововведения в самой IDE — это Code Formatter и возможность сделать интерфейс «под 7-ку» то есть получить тот самый внешний вид IDE, который так полюбили многие разработчики.

Вид IDE Delphi 2010 «под 7-ку»

Delphi XE

Кодовое название: Fulcrum

Год выпуска: 2010

Embarcadero Technologies спустя 1 год и 5 дней с момента выхода Delphi 2010 порадовала нас новой версией Delphi — Delphi XE. Не могу сказать, что новая версия преподнесла нам что-то кардинально новое, но, тем не менее, нельзя не отметить то, что именно в Delphi XE реализована поддержка perl-подобных регулярных выражений, поддержка работы с SVN. В палитре компонентов появилась новая вкладка Windows Azure. Сама IDE стала работать по-быстрее своей предшественницы — Delphi 2010. В состав IDE были включены такие инструменты как AQTime, FinalBuilder, CodeSite. Кроме этого разработчики Delphi приложили достаточно большое усилий в разработку DataSnap о котором Вы можете не только прочитать, но и посмотреть несколько полезных видео-роликов

Delphi XE2

Кодовое название: Pulsar

Год выпуска: 2011

Очередной этап становления Delphi, как языка разработки кросс-платформенных приложений, наступил с выходом Delphi XE2.

Так, если внешний вид IDE практически ничем не отличался от предыдущей версии — Delphi XE, то «под капотом» Delphi XE2 было немало приятных сюрпризов для разработчиков, а именно:

  • Поддержка платформы x64 (пока только для Windows).
  • Поддержка операционных систем Mac OS X и iOS.
  • Кросс-платформенная библиотека FireMonkey для создания современного пользовательского интерфейса.
  • Библиотека LiveBindings для связывания интерфейса с различными наборами данных.

Внешний вид установщика Delphi XE2:

Казалось, что Delphi XE2 — это настоящий прорыв в разработке приложений. И, видимо, так и было — чего только стоила возможность разрабатывать приложения под Mac OS X. Однако, как оказалось позднее — FireMonkey работала очень нестабильно и, если с тем, что FireMonkey никак несовместима с VCL разработчики в итоге смирились, то нестабильность работы новой библиотеки визуальных компонентов вызвала довольно серьезную критику новой версии Delphi. Однако Embarcadero не только не отказались от FireMonkey, но и продолжили её активно развивать, т.к. именно на эту библиотеку возлагались задачи поддержки таких операционных систем как Linux и Android.

Ещё одной новинкой Delphi XE2 стало именование модулей. Теперь появилась возможность использовать в названии модуля точки и называть модули, например, так — System.Types and Vcl.Styles. Очевидно, что такое нововведение было связано, прежде всего, с появлением новой библиотеки и дальнейшими планами по поддержке новых платформ.

Изменения в RTL:

  • в модуле System.SysUtils появилась запись (record) TOSVersion, позволяющая определять под какой операционной системой запущено приложение Delphi.
  • модуль System.Zip для работы с zip архивами в делфи без сторонних компонентов

Delphi XE3

Год выпуска: 2012

В этой версии разработчики Delphi серьезно переработали библиотеку FireMonkey и, даже, назвали её несколько иначе — FM 2 . FireMonkey была переработана до такой степени, что некоторые проекты, разработанные в Delphi XE2 отказывались собираться. Однако, в FM 2 появилась возможность использовать действия (TActionList), что не могло не радовать разработчиков, разглядевших в новой библиотеке преимущества по сравнению с VCL. Основными отличительными особенностями Delphi XE3 стали:

  1. Нет возможности разрабатывать приложения под iOS — предполагалось, что эта возможность появится в новом продукте Embarcadero под названием Mobile Studio.
  2. Серьезно переработан механизм Live Bindings. Теперь это Visual Live Bindings (см. скрин):

3. Новый тип приложений — VCL Metropolis UI Application:

4. В Delphi XE3 был обновлен DBExpress — добавлена поддержка такой популярной СУБД как SQLite.

Delphi XE4

Год выпуска: 2013

  • Вернулась поддержка iOS, которая отсутствовала в RAD Studio XE3. Взамен RAD Studio XE3 Mobile, выход которой ожидался в начале 2013 года, RAD Studio XE4 была дополнена функционалом для разработки мобильных приложений.
  • Программирование непосредственно под iPhone и iPad с учётом всех программных и технических особенностей.
  • Эмулятор мобильных устройств.
  • Улучшено взаимодействие с такими базами данных, как InterBase, SQLite, MySQL и прочими.


Внешний вид IDE:

И, если релиз Delphi XE4 прошел относительно спокойно и, даже можно сказать, буднично, то развитие компании Embarcadero продолжалось и уже 5 февраля 2013 года, компания Embarcadero заявила об ещё одном своем приобретении. На этот раз Embarcadero Technologies объявила о приобретении технологии AnyDAC от компании DA-SOFT Tecnologies. В последующих версиях Delphi эта библиотека получит название FireDAC.

Также, для разработки под мобильную ОС iOS (а, впоследствии под Android) в палитре компонентов появилась новая вкладка — Sensors, содержащая три компонента:

  • TLocationSensor — датчик местоположения
  • TMotionSensor — датчик ускорения (акселерометр)
  • TOrientationSensor — датчик компаса/гироскопа

Delphi XE5

Год выпуска: 2013

С FireMonkey, которая отныне именуются как FM Platform появилась возможность разрабатывать приложения под мобильную операционную систему Android. Среди основных новинок Delphi XE5 можно выделить следующие:

  1. Компилятор Delphi для Android ARM compiler как для устройств, так и для эмулятора
  2. Платформа FM platform для создания «нативных» приложений под Android для Gingerbread (2.3.3 – 2.3.7), Ice Cream Sandwich (4.0.3, 4.0.4) и Jelly Bean (4.1.x, 4.2.x, 4.3.x).
  3. Поддержка iOS 7 SDK и соответствующих стилей
  4. Менеджер развёртывания (Deployment Manager) для Android
  5. Удалённая отладка для Android
  6. Редакция Professional включает расширенную поддержку FireDAC для локальных баз данных, включая Microsoft Access database, SQLite database, InterBase ToGo / IBLite, InterBase при локальном взаимодействии, MySQL Embedded, MySQL Server при локальном взаимодействии, Advantage Database при локальном взаимодействии, PostgreSQL при локальном взаимодействии, Firebird Embeddedи Firebird при локальном взаимодействии
  7. Клиентская библиотека REST Client для упрощенного вызова REST-сервисов. Поддержка авторизации, включая Basic Authentication, Plan Authentication, OAuth1, OAuth2.
  8. Средства отладки REST для тестирование вызовов REST и их параметров

Delphi XE6

Год выпуска: 2014

15 апреля 2014 года Embarcadero выпустила RAD Studio XE6. Разработчики назвали его «качественным релизом», так как были исправлены сотни дизайн-ошибок и ошибки производительности.

Ключевые возможности Delphi XE6:

  • Компоненты для взаимодействия приложений (Application Tethering Components)
  • Взаимодействие с сервисами в облаках (BaaS), компоненты для Kinvey и Parse.
  • Новые стили VCL: Придание приложением обновленный вид под актуальные версии Windows или создание для них уникального дизайна. Включает стиль планшетной Windows. Поддерживает Windows 7 и
  • Компоненты VCL для работы с датчиками: Delphi-приложения могут использовать возможности датчиков положения, перемещения и других. Доступ к датчиками устройств из VCL-приложений для планшетов под управлением Windows.
  • Расширение ключевых возможностей FireDAC

По сути, Delphi XE6 — это «качественный релиз», т.к. в этой версии Delphi исправлено более 2000 ранее зарегистрированных ошибок.

Delphi XE7

Год выпуска: 2014

Из ключевых особенностей Delphi XE7 можно выделить добавление в RTL библиотеки для параллельных вычислений. По большому счёту, IDE осталась той же самой (в плане внешнего вида), хотя, как это водится, была проделана работа над ошибками. Также, начиная с Delphi XE7 прекращена поддержка устаревшей технологии BDE — теперь всем настоятельно рекомендуют использовать FireDAC. Также в Delphi XE7 была реализована поддержка работы с репозиториями Git.

Просмотр внешнего вида разрабатываемого приложения (с использованием FireMonkey)

Новые компоненты в VCL:

  • TTaskBar и TJumpList — компоненты позволяют управлять иконкой вашего приложения в панели задач Windows 7 и выше.

Delphi XE8

Год выпуска: 2015.

  • Появилась возможность разработки 64-битных приложений под iOS;
  • Delphi поддерживает новую систему контроля версий, интегрированную в IDE, для управления и отслеживания изменений в проектах: Mercurial Version Control System Integrated;
  • Позволяет создавать универсальные приложения для iOS с разной разрядностью — в одном исполняемом файле два кода: 32 бит и 64 бит (ARMv7 + arm64);
  • Добавлены два новых независящих от платформы типа данных: FixedInt и FixedUInt.
  • Добавлен новый HTTP Client API для отправки http-запросов к серверам и получения ответов.

На этой версии прекращается, так называемая, эпоха XE-версий. Следующая, по логике, версия Delphi XE9 никогда не выйдет, а вместо неё появится Delphi 10 Seattle.

Delphi 10 Seattle

Год выпуска: 2015

  • поддерживается iOS 8.4;
  • поддерживается Android 5.1.1;
  • поддержка служб Android;
  • поддержка модульного тестирования DUnitX для Android и iOS;
  • поддержка DirectX 12;
  • поддержка вызова API WinRT;
  • поддержка FireDAC для базы данных NoSQL MongoDB
  • новое поведение MultiView;
  • новые компоненты VCL;
  • новые компоненты для работы с Beacon;
  • улучшен механизм стилей;
  • улучшен диспетчер библиотек GetIt;
  • улучшены возможности IDE;

Заставка RAD Studio 10 Seattle:

Новые компоненты для Windows 10:

  1. TActivityIndicator — индикатор активности;
  2. TToggleSwitch — переключатель типа TCheckBox, имитирующий физический переключатель.
  3. TSearchBox — поле ввода для поиска
  4. TRelativePanel — это контейнерный элемент управления, который позволяет позиционировать дочерние элементы управления по различным критериям
  5. TSplitView — позволяет отображать или скрывать временный контент. Например, вы можете использовать его в качестве навигационного меню верхнего уровня, где навигационный контент скрыт и показывается на форме при необходимости

Delphi 10.1 Berlin

Год выпуска: 2020

Из нововведений в «Берлине» — поддержка Android 6.0. Платформа для мобильной разработки (FireMonkey — FM Platform — FMX) продолжает развиваться и улучшаться. Изменена работа с диалогами InputBox, InputQuery и т.д.

Заставка Delphi 10.1 Berlin:

IDE Delphi 10.1 Berlin

Delphi 10.2 Tokyo

Год выпуска: 2020

Основные новые возможности Delphi 10.2 Tokyo:

  • в состав Delphi включён компилятор приложений под Linux (Ubuntu Server (LTS 16.04) and RedHat Enterprise (V7));
  • включена поддержка СУБД MariaDB.

Заставка Delphi 10.2 Tokyo:

IDE Delphi 10.2 Tokyo:

  • TStackPanel — позволяет выравнивать элементы управления внутри себя по одинаковым значениям свойств, например, выровнять все компоненты по горизонтали и сделать между ними одинаковые отступы.
  • TCardPanel — позволяет отображать коллекцию панелей или страниц (элементы управления TPanel), которые отображаются пользователю по одной за раз.
  • TTimePicker и TDatePicker — позволяют выбирать значения времени и даты из раскрывающегося списка, как это делается, например в Andro >

Delphi 10.3 Rio

Год выпуска: 2020

Нововведения в Delphi 10.3 Rio:

  • усовершенствования VCL для High DPI дисплеев
  • поддержка Per Monitor V2
  • новые интерфейсы программирования приложений для Windows 10 и WinRT,
  • обновленная поддержка мобильных платформ (поддержка Android API26, соответствие требованиям Google Play Store в отношении новых приложений с августа 2020 года и обновления приложений с ноября 2020 года).
  • собственные элементы управления Android и стилизованные элементы управления FMX в одной и той же форме Android, включая тему материального дизайна для Android 5.0 или выше
  • поддержка iOS 12 (32- и 64-бит) для создания App Store и корпоративных приложений.
  • поддержка смайликов Юникод.

В этой версии Delphi впервые введена поддержка т.н. Inline Variable, в результате чего стало возможным определение переменных непосредственно в теле методов, например, так:

Взлом Борландии: изящная декомпиляция Delphi

Содержание статьи

Начинающие хакеры обычно испытывают большие трудности при взломе программ, написанных на Delphi и Builder, поскольку классические трюки, типа бряка на GetWindowTextA, не работают. И чтобы не пилить серпом по яйцам, требуется учитывать особенности библиотеки VCL, которая только с виду кажется неприступной, а в действительности ломается даже проще, чем чистые Си-программы! Не веришь? Убедись сам!

Для начала.

Два основных орудия хакера — это отладчик и дизассемблер, которые могут использоваться как по отдельности, так и совместно друг с другом. Первая (и самая сложная) фаза атаки — разведывательная. Прежде чем наносить основной удар по врагу, необходимо локализовать защитный механизм в мегабайтах мирного программного кода, после чего выстелить битхаком, поменяв JE на JNE, либо, разобравшись с алгоритмом процедуры регистрации, написать свой собственный генератор ключей/серийных номеров.

Ударная фаза практически не зависит от специфики ломаемого приложения и отрабатывается годами, представляя собой неромантичный кропотливый труд, а вот комплекс разведывательных мероприятий гораздо более интеллектуальное занятие, требующее хитрых мозгов и, конечно же, хвойно-новогодних опилок, которые мы будем настойчиво курить. И ожесточенно долбить. По клавиатуре! Ведь Новый год — семейный праздник, и всякий уважающий себя хакер проводит его наедине с самым близким ему существом — компьютером. Для создания атмосферы праздника нужно будет зажечь свечи (не те, что от геморроя), послать всех девушек в /dev/null, зарядить бурбулятор свежей порцией man’ов и начать маньячить. Ведь юзеры ждут
подарков, а лучшего подарка, чем новый кряк, для компьютерщика, пожалуй, и не придумаешь!

Короче, надо хачить. Поехали!

Осваиваем DeDe

DeDe – это такой декомпилятор программ, написанных на Delphi и Builder‘е. Бесплатный и очень мощный. Мы будем использовать менее процента от его возможностей. Кто там говорит, что это расточительство? Нет, расточительство — это выбрасывать елку в мусор после праздника. Полная декомпиляция в наши задачи не входит. Наша цель — локализация дислокации штаб-квартиры защитного механизма, то есть определение адресов процедур, проверяющих введенный пользователем регистрационный номер. Вот для этого нам и нужен DeDe, а все остальное можно сделать и руками. То есть дизассемблером. Вообще-то, в состав DeDe входит интегрированный дизассемблер в духе WIN32DASM, однако по своему качеству он значительно
уступает даже халявной версии IDA, не говоря уже о полном боекомплекте тяжелой артиллерии в виде IDA Pro + SoftICE. Это просто ужас какой-то! Это все равно что засунуть еловую ветку Стиву Б. в задницу, даже круче! Намного круче! ��

Последняя известная мне версия DeDe носит порядковый номер 3.50.02 и датируется серединой 2003 года. Похоже, что DaFixer полностью утратил интерес к своему детищу, решив похоронить DeDe на свалке истории. Полные исходные тексты версии 3.10b выложены в публичный доступ, однако желающих продолжить благородное дело что-то не наблюдается, и потому DeDe обречен на медленное и мучительное вымирание. Программы, собранные новыми компиляторами от Багдада, DeDe либо вообще не переваривает, либо декомпилирует неправильно (вот потому чуть позже мы рассмотрим, как ломать Борландию своими руками без посторонней помощи).

Архив DeDe.3.10b.realy.complete.src.zip (который, в частности, можно скачать с www.wasm.ru/baixado.php?mode=tool& >

В общем, значит, ставим мы DeDe и втыкаем в его философию. А философия эта такова, что декомпиляции подвергается не сам исполняемый файл, а образ запущенного процесса в памяти, за счет чего удается раздавить упаковщики, даже не почувствовав их присутствия. Впрочем, против крутых протекторов, шифрующих защищенную программу в памяти и динамически расшифровывающих ее по мере исполнения, DeDe оказывается бессилен, и вряд ли стоит объяснять почему. Однако крутые протекторы на практике встречаются не так уж часто, что очень радует.

Ладно, не будем впадать в депрессию. Ведь Новый год на дворе! И пока остальные рвут петарды, мы будем рвать себе задницу, декомпилируя интересные программы :). Все очень просто! Берем прогу, загружаем ее в DeDe, давим на кнопку «Процесс» и сидим себе в ожидании, пока DeDe распотрошит дамп памяти. Лучше всего это делать под VMware, а то среди защищенных программ есть всякие твари, начиненные AdWare и прочей малварью.

Честно говоря, я поубивал бы тех, кто придумал механизм идентификации типов в рантайме, благодаря которому названия классов не уничтожаются при компиляции (как в классическом Паскале и Си), а попадают непосредственно в исполняемый файл (как в Visual Basic’е). Взлом упрощается настолько, что ломать становится скучно. Никакого тебе интеллектуального поединка. Все равно что ломом добивать попавшую в капкан мышь.

Но мы же не садисты и не маньяки какие-нибудь. Оставим мышь любоваться праздничным салютом, а сами вернемся к DeDe. Самая левая (можно даже сказать: радикально левая) вкладка с именами классов не содержит для нас ничего интересного. Вкладки Units Info и Forms также отправляются в /dev/null или куда поглубже. А вот вкладка Procedures — это уже то, что нужно.

Открываем ее и смотрим. Ага, здесь перечислены юниты со всеми процедурами в них содержащимися. Причем и сами юниты, и имена классов, и названия событий (events) даны в символьном виде. То есть если в программе есть диалоговое окно регистрации, то DeDe покажет что-то типа: fRegister ? TfrmRegister ? bOKClick. Как нетрудно догадаться, bOKClick — это и есть имя процедуры, получающей управление при нажатии на кнопку ОК и занимающейся проверкой валидности введенного юзером серийного номера. Тут же в колонке RVA DeDe показывает ее относительный виртуальный адрес, по которому функцию легко найти в файле.

А можно и не искать! Двойной щелчок по имени функции открывает окно с интегрированным дизассемблером, перемещая наш хвост непосредственно на зловредный защищенный код, что особенно полезно при анализе упакованных файлов, которые бессмысленно загружать в Иду. DeDe дизассемблирует дамп памяти, и потому упаковщики идут лесом. Как вариант — можно заюзать SoftICE, установив по заданному адресу аппаратную точку останова (команда «BPM адрес X»). Необходимо только помнить, что RVA – это относительный виртуальный адрес, а SoftICE требует абсолютный. Чтобы перевести относительный виртуальный адрес в абсолютный, достаточно загрузить файл в hiew, нажать (header), посмотреть на базовый адрес
загрузки (base address) и сложить его с RVA-адресом, сообщенным DeDe.

Техника ручного взлома

Ураганный артиллерийский огонь декомпилятора DeDe накрывает практически весь Багдад, ставя моджахедов по стойке смирно, а всех несогласных отправляет на север, где они рубят пихтовый лес и гонят драп, чтобы у всех плановых жителей было по елке. В смысле ПО «Елки», программное обеспечение то есть :).

Недостатков у DeDe как минимум два. Первый: ломать автоматом — это не в кайф и вообще не по понятиям. Настоящие хакеры так не поступают, предпочитая во всем разбираться самостоятельно с помощью кедрового отвара из хрюнделя (в просторечии называемого hiew’ом) и топора. Второй: как уже говорилось, DeDe обречен на вымирание и скоро исчезнет с жестких дисков за ненадобностью, как в свое время исчезли динозавры и мамонты.

А потому во многих ситуациях ручной взлом оказывается намного предпочтительнее, а бывает так, что он становится вообще единственно возможным вариантом. Короче, кто как, а я сразу за демократию! Любовь и IDA Pro — во!

Берем, значит, Иду, переходим в начало сегмента данных (View\Open subviews\Segments или ) и прокручиваем его вниз до тех пор, пока не встретим текстовые названия элементов управления с прилегающими к ним ссылками. Дизассемблерный текст должен выглядеть так, как показано ниже.

Названия методов класса формы в исполняемом файле прямым текстом:

.data:0040E88B word_40E88B dw 0Bh ; DATA XREF: .data:0040E614^o
.data:0040E88D dw 11h
.data:0040E88F dd offset _TForm1_FormCreate
.data:0040E893 db 10,’FormCreate’
.data:0040E89E dw 12h
.data:0040E8A0 dd offset _TForm1_FormDestroy
.data:0040E8A4 db 11,’FormDestroy’
.data:0040E8B0 dw 17h
.data:0040E8B2 dd offset _TForm1_Comm1ReceiveData
.data:0040E8B6 db 16,’Comm1ReceiveData’
.data:0040E8C7 dw 13h
.data:0040E8C9 dd offset _TForm1_Button1Click
.data:0040E8CD db 12,’Button1Click’
.data:0040E8DA dw 13h
.data:0040E8DC dd offset _TForm1_Button4Click
.data:0040E8E0 db 12,’Button4Click’
.data:0040E8ED dw 13h
.data:0040E8EF dd offset _TForm1_Button2Click
.data:0040E8F3 db 12,’Button2Click’
.data:0040E900 dw 12h
.data:0040E902 dd offset _TForm1_Timer1Timer
.data:0040E906 db 11,’Timer1Timer’
.data:0040E912 dw 13h
.data:0040E914 dd offset _TForm1_Button3Click
.data:0040E918 db 12,’Button3Click’
.data:0040E925 dw 13h
.data:0040E927 dd offset _TForm1_Button5Click
.data:0040E92B db 12,’Button5Click’
.data:0040E938 dw 13h
.data:0040E93A dd offset _TForm1_Button6Click
.data:0040E93E db 12,’Button6Click’
.data:0040E94B dw 13h
.data:0040E94D dd offset _TForm1_Button7Click
.data:0040E951 db 12,’Button7Click’
.data:0040E95E aTform1 db 6,’TForm1′ ; DATA XREF: .data:0040E61C^o

Скажем сразу, это довольно сложный для взлома случай, поскольку программист использовал названия элементов по умолчанию, потому и получилось TForm1, Button1Click, Button2Click. Это не названия кнопок, это названия методов класса, отвечающих за обработку нажатий кнопок, а вот каким реально кнопкам они соответствуют, так сразу и не скажешь, поэтому придется хитрить.

Перемещаем курсор на название функции, автоматически назначенное Идой на основе текстовой строки (например, «_TForm1_Button3Click»), и нажимаем , переходя на ее тело, где мы видим) мы видим, что функция расположена по адресу, ну скажем, 040286Ch. Загружаем файл в hiew, нажимаем для перехода в шестнадцатеричный режим, давим (goto) и вводим адрес перехода (в данном случае «.040286C»). Точка в начале адреса сообщает hiew’у, что это действительно адрес, а не смещение (по умолчанию). Активируем режим редактирования по (Edit) и пишем CC – опкод точки останова, соответствующий машинной команде INT 03h. Сохраняем изменения по и выходим.

Запускаем программу, вызываем обозначенную форму и давим по очереди на все кнопки. Когда мы нажмем Button3, на экран выскочит системное сообщение о том, что у программы рвет крышу и она будет аварийно завершена в добровольно-принудительном порядке. Так и должно быть. В отсутствие отладчика команда INT 03h приводит к критической ошибке, что позволяет довольно быстро найти необходимые нам кнопки, после чего останется только хакнуть соответствующие им функции. Логично? Всенепременно!

Естественно, ручной просмотр секции данных непродуктивен и ненадежен. Так легко проглядеть нужные нам формы, особенно если программист обозвал методы классов короткими и невыразительными именами, особо не бросающимися в глаза, типа a, b, c. Как быть тогда? Очень просто! Указатель на вышеприведенную структуру передается библиотечной VCL-функции Forms::TApplication::CreateForm(System::TMetaClass *,void*) в качестве одного из аргументов. IDA распознает VCL-функции по сигнатурам, автоматически назначая им «неразмангленные» имена. Применительно к нашему случаю это будет @Forms@TApplication@CreateForm$qqrp17System@TMetaClasspv. Просто находим эту функцию и смотрим все перекрестные ссылки,
ведущие к местам ее вызова из программного кода. Ни одна форма не уйдет незамеченной!

Хорошо, а как быть, если в нашем распоряжении нету Иды, а есть только hiew? Первая мысль — идти топиться — отметается как идеологически неправильная. Топиться в Новый год — это по меньшей мере негуманно. У всех людей праздник, настроение соответствующие, и тут бац — дохлый труп с порезанными венами в ванной. Неэстетично! Таким путем мы приходим ко второй мысли: бедность — это не порок, а естественное студенческое состояние; и все, что нас не убивает, делает нас сильнее. Хорошо подумав головой, мы сумеем обойтись одним hiew’ом. Хотя почему бы на Новый год не подарить себе любимому лицензионную Иду?

Ладно, hiew так hiew. Это только с виду кажется, что hiew — беспонтовая программа. На самом деле это очень даже мощный зверь типа «гепард». Сильный и шустрый. К тому же компактный. Правда, увы, с некоторых пор далеко не бесплатный. Но найти hiew намного проще, чем Иду. Да и стоит hiew несоизмеримо дешевле, чем IDA Pro (это при его-то возможностях).

Короче, пока над нашими головами разрываются петарды и прочая реактивная китайская пиротехника, залетающая через открытую форточку, мы загружаем ломаемую программу прямо в hiew, нажимаем для перехода в шестнадцатеричный режим, давим (Header), говорим (Import) и в списке импортируемых функций находим __imp_@Forms@TApplication@CreateForm$qqrp17System@TMetaClasspv, поставляемую динамической библиотекой vclXX.bpl, где XX – номер версии, например 60. По переходим к таблице переходников на импортируемые функции, состоящей из множества команд jmp. Убедившись, что курсор стоит на функции __imp_@Forms@TApplication@CreateForm$qqrp17System@TMetaClasspv (что вовсе не факт,
поскольку тут у hiew’а глюк, и, чтобы его обойти, приходится выбирать соседнюю функцию, а потом поднимать курсор руками), нажимаем (Ref) для поиска перекрестных ссылок и видим код типа приведенного ниже. Соответственно, (NexRef) означает поиск следующей ссылки на процедуру создания формы. Вот мы и будем жать , пока не найдем все формы, какие только есть.

Поиск указателя на структуру формы в hiew’e:

.0040193A: 8B0DE01F4100 mov ecx,[00411FE0]
.00401940: 8B15FCE54000 mov edx,[0040E5FC]
.00401946: E8B9BF0000 call @Forms@TApplication@CreateForm$qqrp17System@TMeta
.0040194B: A134B65900 mov eax,@Forms@Application ;vcl60

Разумеется, это работает только с неупакованными программами, использующими статическую линковку, коих большинство. Если программа упакована, то, прежде чем мы доберемся до таблицы импорта, ее предстоит распаковать, а если разработчик задействовал динамическую компоновку, то один или несколько вызовов __imp_@Forms@TApplication@CreateForm$qqrp17System@TMetaClasspv останутся незамеченными (что плохо). В таких случаях выгоднее прибегнуть к отладчику, установив точку останова на __imp_@Forms@TApplication@CreateForm$qqrp17System@TMetaClasspv, но об этом мы скажем позже, а пока разберемся с аргументами.
Главным образом нас интересует аргумент, загружаемый в регистр EDX и указывающий на структуру, по смещению 18h от начала которой расположен указатель на уже знакомую тебе вложенную структуру.

Вокруг точек останова

Самые сложные случаи взлома — это упакованные программы, загружающие VCL-библиотеку на лету и не использующие никаких вразумительных имен в методах классов. Ломать такие защиты в дизассемблере — напрасно тратить время. Здесь лучше воспользоваться отладчиком, в роли которого может выступать не только тяжелая (SoftICE), но и легкая артиллерия в лице OllyDebbuger.

Остается только выбрать подходящие функции для бряканья. Краткий перечень наиболее важных из них (с точки зрения хакера) представлен ниже:

Праздничное заключение

Как видно, во взломе программ из Багдада ничего сложного нет, и они хакаются со скоростью пробки, вылетающей из бутылки шампанского. Даже еще быстрее! Так что подарок к Новому году обеспечен!

Полную версию статьи
читай в декабрьском номере Хакера! Последний релиз DeDe v. 3.50.02 ты можешь скачать с нашего сайта или взять на DVD

Переходим от delphi 4 к delphi 5

Когда я собираюсь что-нибудь спрограммировать — у меня проблема: почему в конце (где end) как написано в книге, Delphi 7 не может обработать.
Где-то написано так:
end;

end.
Где-то написано так:
end;
Где-то написано так:
end;
Где-то написано так:
end.
Где-то так:
end;
end;
И где-то так:
end;
end;
И где-то так:
end;
end.
ЧТО ИЗ ЭТОГО ПОДХОДИТ.

Урок 4. Переходим к практике.

Delphi & SQL

Урок 4. Переходим к практике.

Не надоела теория? Нет? Ну и замечательно. Ведь для чего нужна теория? Для того, чтобы знать, что делать на практике. Вот в предыдущем предложении и показывается, что они друг без друга «ну никак». Вот сегодня мы и перейдем от теории к практике.

Будем считать, что с основами Delphi вы уже знакомы, и знаете, как создать проект. Вот и создадим пустой проект. В нашем первом проекте все будет просто. Даже очень просто. Зато с первого раза все усвоится. Начнем с хрестоматийного примера создания приложения с помощью одной лишь мыши. Да-да, можете придвинуть мышь и отодвинуть клавиатуру — она нам сегодня не понадобится.

Delphi позволяет работать с базами данных посредством нескольких интерфейсов. До 4-й версии это был только BDE (Borland Database Engine), в 5-й появился ADO (ActiveX Data Object) — Microsoft-овский интерфейс, «родной» для Access и его формата *.mdb. В 6-й версии появился интерфейс dbExpress, который сама Borland рекомендует применять к клиент-серверным базам данных на MySQL и др. Начнем рассмотрение всех этих интерфейсов с BDE как наиболее заслуженного и имеющегося во всех версиях. Остальные потом.

Итак, преимущества BDE:

  • поддержка многих форматов. В самом BDE встроена поддержка многих форматов. К тому же BDE автоматически поддерживает все ODBC-драйвера (Open Database Connectivity — еще один интерфейс к базам данных), установленные в вашей операционной системе.
  • дополнение стандартных способов работы полезными функциями. Например, когда сервер возвращает данные в ответ на SQL — запрос, он никому не должен поддерживать возможность передвигаться в обоих направлениях — он обеспечивает движение только вперед. BDE кэширует эти данные и когда вы запросите предыдущую запись, вытащит ее из кэша. Если бы этого не было, вам пришлось бы запрашивать данные с сервера снова, и проскакивать «лишние» предыдущие записи. Только подумайте, как эта возможность облегчает жизнь во многих случаях.
  • хорошая изученность и отлаженность. Все ошибки и особенности работы хорошо известны и вам будет несложно найти описание или получить совет.

Из недостатков я бы отметил необходимость распространения BDE вместе с вашим приложением, что «утяжеляет» инсталляцию на 2-3 дискеты.

Это было лирическое отступление. А сейчас нам понадобятся компоненты со страниц Data Access и Data Controls. На странице Data Access располагаются невизуальные компоненты, предназначенные для подключения к базам данных. Невизуальные — значит при помещении их на форму ничего вы не увидите. То есть увидите, конечно, в режиме разработки, да размер exe-файла увеличится, но данные на форме не появятся. А чтобы они появились, нам понадобятся компоненты со страницы Data Controls.

На станице Data Access расположились такие компоненты как:

  • Table — таблица. Позволяет подключить одну таблицу данных.
  • Query — запрос. Позволяет работать с результатом запроса как с таблицей. С некоторыми ограничениями, правда.
  • Stored Proc — Хранимая процедура. Программа, хранящаяся на сервере, выполняющая на нем какие-то действия и возвращающая значения. Когда вам необходимо обработать несколько больших (а иногда просто огромных) таблиц, и на основании этой обработки получить небольшую табличку или пару чисел, которые и нужны вашей программе — незаменимая вещь. Может вернуть вашей программе, как пару значений, так и целую таблицу.
  • Database, Session. Все таблицы, запросы и все остальное должны работать через компоненты Database и Session. Если вы их не поместите на форму самостоятельно, Delphi создаст их автоматически при запуске программы. Пока оставим их в покое.
  • BatchMove — компонент, который окажется полезным при переносе большого объема данных из одной таблицы в другую. Обычно используется во всяких конвертерах, хотя и не обязательно.
  • UpdateSQL — компонент, который поможет нам преодолеть те ограничения, о который я говорил в пункте про запросы (Query).
  • Nested Table — таблица в таблице. Позволяет сделать вид, что одна таблица — всего лишь значение поля в другой.
  • DataSource — источник данных. Он стоит на первом месте на этой странице компонент. Это подчеркивает его важность. Именно через него и будут работать компоненты со страницы Data Controls. Подробности ниже.

Компоненты Table, Query и подобные могут использоваться самостоятельно. Именно из них видны данные. Если ваша программа должна выполнять какие-то расчеты, ничего не показывая пользователю (до поры), можно обойтись только ими. [an error occurred while processing this directive] Получить данные из них можно, например, так:

Или еще целой кучей способов. Их мы рассмотрим в ближайших уроках для каждого компонента в отдельности.

А пока нам важно, что для простого получения данных достаточно одних лишь компонентов типа Table или подобных. А вот для демонстрации их пользователю и для того, чтобы позволить их изменить нам понадобятся компоненты со страницы Data Controls. Но сами по себе они не могут увидеть данные. Для того, чтобы им показать данные нужны:

  1. Компонент, который видит данные, например Table;
  2. Компонент, который показывает данные, например DBGrid;
  3. Мост между ними, а именно компонент DataSource;

Компонентов на странице Data Controls много. Почти все они имеют аналоги на других страницах, и известны вам (аналоги). Например, компонент DBText — просто Label, который данные берет из базы. При этом вы не можете заставить показать нужный вам текст, у него нет не свойства Caption, ни свойства Text. Вместо этого, вам надо поместить значение прямо в базу данных, именно тогда оно будет отображено.

Особенности работы с этими компонентами будут рассмотрены позже. А пока нам достаточно запомнить, что они похожи на уже известные компоненты, но работают через DataSource с невизуальными компонентами.

В общем-то можно обойтись без этих компонентов. Например в событии (подробнее о событиях позже) OnScroll компонента TTable вписав строку

можно обеспечить показ значения поля обычным компонентом Label. Но для того нам и нужны компоненты Delphi, чтобы не делать много раз одну и ту же работу.

Итак, давайте возьмемся за мышку (клавиатуру отодвинули? ;)) и сделаем что-нибудь, что реально заработает. Найдем страницу компонент Data Access, на ней найдем компонент Table, поместим его на форму. Свяжем его с базой данных DBDEMOS, для чего в свойстве Database этого компонента установим значение DBDEMOS. Эта база — демонстрационная и поставляется вместе с Delphi. В этой базе выберем таблицу animals.dbf, т.е. присвоим это значение свойству TableName. Мы все также пользуемся мышью, все эти значения выбираются из выпадающих списков.

Следующим компонентом, который нам понадобится будет DataSource. Мы ведь собираемся что-то показать пользователю. Итак, установим DataSource на форму, а его свойству DataSet присвоим занчение Table1. Обратите внимание, имя компонента Table, который мы только недавно установили на форму было Table1. В больших проектах лучше давать более осмысленные имена компонентам, но в нашем проекте мы обойдемся и таким. Тем более, что решили обойтись без клавиатуры ;).

Следующие компоненты будут визуальными, со страницы Data Controls. Сначала DBGrid. Установим его на форму, придадим ему нужные размеры. Под нужными каждый понимает то, что ему удобно.

Для того, чтобы в нашей таблице DBGrid появилась какая-то информация надо присоединить ее к источнику данных (DataSource). Просто установим свойство DataSource равным DataSource1. Если ничего не появилось, посмотрим, активна ли таблица. То есть в свойстве Table1.Active должно стоять true. Так и есть, там стоит false. Ставим true, все работает.

Очередным компонентом будет DBNavigator. Этот компонент не имеет аналогов, поэтому уделим ему немного больше внимания. Этот компонент очень прост в работе, его достаточно просто подключить в источнику данных указав DataSource. Этот компонент позволяет нам перемещаться по записям таблицы (первая, последняя, предыдущая, следующая), переходить в режим редактирования, сохранять результаты или отменять редактирование без сохранения. Каждую кнопку можно выключить, или включить, для чего просто поменять значение свойства VisibleButtons. Подсказки к кнопкам на английском языке, но это дело поправимое, достаточно отредактировать свойство Hints. Это вы сделаете сами в качестве домашнего задания.

Очередной компонент — DBImage. Этот компонент отображает картинку, которая хранится в базе данных. На самом деле, хотя это и не слишком подробно отображено в документации, этот компонент сам позволяет поместить картинку в базу данных. Для этого картинку надо подготовить в каком-нибудь графическом редакторе, затем скопировать в буфер обмена, после чего вставить в DBImage с помощью Ctrl+V или Ctrl+Ins. Установим DataSource этого компонента равным DataSource1 и DataField равным Graphic для того, чтобы он мог отобразить нужную нам картинку.

Последним на сегодня компонентом будет DBMemo. Этот компонент очень похож на обычный компонент Memo, поэтому не будем на нем сильно задерживаться. Установим DataSource этого компонента равным DataSource1 и DataField равным Notes.

Сохраним проект, дадим ему имя на свой вкус, например FirstPractice и запустим его. Если вы все сделали правильно, у вас на экране появится программа, которая умеет просматривать таблицу с рыбами, перемещаться от одной записи к другой, редактировать их, даже работает с рисунками и memo-полями. Без единой строчки кода. Всего за 1 минуту (время, которое вы щелкали мышкой). Не плохо, правда?

В качестве домашнего задания предлагаю вам посмотреть возможность русификации программы. Для этого просмотрите свойства:

  • Hints у DBNavigator;
  • Columns у DBGrid; Если список колонок пуст, нажмите Add All Fields в этом маленьком появившемся окошке .
  • Title.Caption у каждой колонки.

Ну вот и все для начала. Подробнее о компонентах для работы с базами данных читайте в следующих уроках.

TDelphiBlog

Блог Delphi-программиста. Обзоры инструментов и экспертов для Delphi. Описание JCL, JVCL, cnWizards. Дженерики в Delphi. Дневник разработки Lazy Delphi Builder. Переводы.

Страницы

Motto

В тихом саду здравомыслия
Пусть на вас постоянно падают
кокосовые орехи пробужденности.

воскресенье, 28 апреля 2013 г.

Lazy Delphi Builder 1.8.6.240 от 28-04-2013 для Delphi XE4 и XE5

Что нового (вкратце):

  • Поддержка Delphi XE4. И на всякий случай, сразу и Delphi XE5, — вдруг выйдет через месяц =)
  • Профили (мини). Теперь можно сохранять профили групп настроек для дальнейшего использования. Сделано для: выходных папок, настроек билда, переменных окружения и других мелочей (см. ниже).
  • Изменён формат хранения списков в файлах LazyDBP и ini. Теперь без цифр – а это значит, что сравнить два файла в Diff-viewer-е станет совсем просто. И кстати, теперь все настройки будут сохраняться в подкаталоге Data. Новый формат профилей не имеет обратной совместимости со старым. Но возможность сохранить в старом формате осталась в Save As диалоге.
  • Поддержка нескольких выражений в фильтре дерева (через точку с запятой “;”)
  • Появилась возможность вместо dcc32.exe подставлять свой файл. Это может быть .bat-ник, может быть .exe. А может быть и dcc64.exe (см. пункт 9 в истории изменений)
  • Добавлено автоопределение версии Delphi по названию файла пакета (см. Check Wizard)
  • Появился редактор для compiler defines в виде CheckListBox-а
  • Много мелких улучшений и исправлений (подробный список под катом, и в архиве с программой).
Подробный список изменений версии Lazy Delphi Builder 1.8.6.240:

Дата релиза: 28.04.2013.

0. Добавлена поддержка Delphi XE4 и XE5 (не тестировалось — напишите мне, если у вас это работает)
1. Сделать так, чтобы номера строк вообще не сохранялись для списков в .ini и .LzyDbp файлах.
2. Console: В справке командной строки выводить пример использования.
3. Исправлена ошибка с указанием в качестве BaseDir относительной папки (передачей в /OutputDirBase). Например написав просто Test компилироваться не будет.
4. При запуске компиляции блокировать возможность изменить выбранную версию Delphi
5. Возможна ситуация с Assertion Failed связанной с выбранной версией Delphi при попытке открыть диалог компиляции. Помогает перевыбор версии Delphi.
6. Исправлен AV при запуске программы без установленной Delphi.
7. При запуске программы без установленной Delphi, теперь блокируются контролы, требующие наличия Delphi для работы.
8. При сканировании файлов, для ProgressBar-а, вместо pstProgress использовать pstMarquee.
9. Дать возможность указывать свой собственный Компилятор командной строки. Или запускать свой .bat файл вместо dcc32. Сделано. Пока только с помощью редактирования LazyDBP файла: В секцию [[Build Settings]] надо добавить ключ: CustomCompiler=Полный путь к компилятору.
10. В Build диалоге Рядом с Base Folder добавить кнопку вызывающую Popup Menu с пунктами:
1. Новая папка в temp директории
2. Текущая папка
3. Открыть Base-папку в Explorer-е
11. Исправлено: Если во процессе обработки файлов в дерево перетащить другую папку, процесс обработки прервется.
12. Empty Recycle bin не срабатывает если только что удалили и узел в дереве не раскрыт
13. Ошибка в дереве при Check All required: в случае, если в дереве есть пакеты с одинаковыми названиями, но удаленные в Recycle Bin, то выделение не сработает. Это было исправлено двояко. 1 через libsuffix. 2 через проверку флага удаления.
14. Увеличить размер поля для ввода defines
15. Отдельный CheckList редактор для DEFINES при Compile.
16. Сделать редактор для defines, чтобы полный список хранился в ини файле, а в редакторе можно было отметить галочки
17. Bug: Ctrl+A в дереве с файлами в режиме списка выделяет даже отфильтрованные записи
18. В дереве в Filter добавить кнопку очистки edit-a фильтра
19. в дереве в Filter сделать поддержку нескольких выражений через ; (спасибо Nashev-у за идею)
20. nashev: показывать в строке какой проект из скольки компилируется
21. Сохранение размеров форм
1. Env options
2. Build dialog
3. MainForm
22. Preset-ы (возможность сохранить/загрузить набор значений с определенным именем):
1. для Env Vars
2. Lazy include Paths
3. для Scan Folders
4. для Exclude extensions
5. в Build диалоге:
1. для Build Options
2. для Directories
23. В окне About не был указан емэйл
24. В окне About дать возможность скопировать ссылку в буфер обмена (правый клик -> Copy)
25. Ошибка: Hint может остаться висеть и не пропасть при переключении на другое окно или на другую программу.
26. обновить JCL
27. Закладка Installed Packages: прятать системные пакеты (пакеты, устанавливаемые в Bin папку Delphi)
28. Тестовая функция: Check Wizard (Ctrl+W) в дереве на закладке «2 Select Files to compile»
29. В меню дерева на закладке «Select Files to compile» новый пункт Check Packages for Current IDE
30. При изменении текущей версии Delphi, список пакетов должен обновляться.
31. Теперь все настройки хранятся в подпапке Data

Доработка Приборов Autocom / Delphi

Рекомендуемые сообщения

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Войти

Уже есть аккаунт? Войти в систему.

Последние посетители 0 пользователей онлайн

Ни одного зарегистрированного пользователя не просматривает данную страницу

Список тем для запросов

Тут собраны ссылки на темы для запросов дампов, электросхем и другой информации

Запрос дампов

Тут можно попросить оригинальный дамп или его редактирование (калибровку)

Запрос электросхем у дилеров

Тут можно попросить оригинальную электросхему на автомобиль

Пользовательский компонент Convertion от delphi 5 до delphi 7

Недавно у меня появилась возможность конвертировать код delphi-5 в delphi-7 . Сначала я начал конвертировать пользовательские компоненты в delphi-7 . При компиляции компонентов delphi-5 в системе delphi-7 возникает ошибка, указывающая

«Необъявленный идентификатор: IFormDesigner».

После googling я узнал, что IFormDesigner должен быть заменен IDesigner . Поэтому, заменив IFormDesigner на IDesigner и отделив код проекта от кода времени выполнения, большинство компонентов было скомпилировано. При компиляции ниже фрагмента кода он скомпилируется успешно. но когда я помещаю компонент в систему формы, это бросает ошибку нарушения доступа на

Путь: = IDesigner (TForm (FFormOwner).Designer).GetPrivateDirectory в delphi7.

Ниже мой код компонента.

Свойство Designer имеет тип IDesignerHook и не может быть жестко IDesigner к IDesigner . Чтобы иметь какую-либо надежду на успех, вам нужен код этой формы:

Это выполнит запрос времени выполнения Designer интерфейса IDesignerHook и вернет интерфейс IDesigner если этот интерфейс действительно поддерживается.

Насколько сложно переносить проект с Delphi 7 на Delphi XE?

У нашей компании есть программное обеспечение, которое находится в разработке уже более 10 лет, поэтому есть некоторые действительно устаревшие вещи. Это все еще довольно функционально и все, но я вижу новые функции на Delphi XE, и это заставляет меня переключаться. Проблема заключается в том, что сам исходный код содержит более 300 МБ файлов .pas(всего 1 гб с компонентами и т.д.).

Мы используем пользовательские компоненты, старые jvcl файлы и последние версии devexpress.

Насколько сложно я могу ожидать, что что-то произойдет, если я решит перейти с Delphi 7 на Delphi XE?

Единственной реальной проблемой является преобразование в Unicode. Вы должны узнать, как поддержка Unicode реализована в Delphi — начните с Marco Cantu Белая книга: Дельфы и Юникод

Невозможно оценить объем работы, необходимый для обновления старых приложений до Unicode, не зная фактического кода. Если бы вы использовали типы строк стандартным способом, преобразование было бы простым. Любые низкоуровневые трюки со строковыми типами (например, сохранение двоичных данных в строках) теперь устаревают и соответствующий код должен быть перезаписан.

Некоторые небольшие инструменты либо переносятся без каких-либо изменений, либо всего лишь несколько исправлений в unicode, чтобы запустить его.

Однако, если ваша кодовая база настолько велика, насколько вы объясняете, вы не должны полностью полагаться на то, что кто-то здесь скажет вам. Просто получите копию XE и загрузите код. Посмотрите, какие проблемы вы столкнулись, чтобы понять, сколько усилий оно предпримет.

В этот момент я портировал весь свой код на XE (даже старые проекты). Я использую те же самые библиотеки, насколько это возможно, поэтому, как только я переработал большинство из них, «перенос» приложений из Delphi 7 в Unicode Delphi обычно был просто повторяющейся задачей либо заниматься обновленными интерфейсами в библиотеках, либо исправить ошибки компилятора и предупреждения.

Наиболее распространенные ошибки, с которыми я столкнулся:

Юникод. Это займет 90% времени. Это раздражает, если код выполняет много низкоуровневой обработки строк, но большинство проблем можно легко устранить, добавив несколько типов.

компилятор сук, когда вы используете c in [‘a’..’z’] . Вы должны использовать CharInSet() для строк unicode.

Если вы установите ShortDateFormat, вы получите предупреждение компилятора, что вместо этого вы должны использовать FormatSettings.ShortDateFormat. В новом коде это хорошая идея. Если вы портируете, сначала проигнорируйте его, если хотите просто идти.

Кроме того, вы, вероятно, обновите свои сторонние библиотеки до более новых версий, чтобы вам не пришлось их переносить самостоятельно. Это не редкость для тех, кто изменил свои интерфейсы или работы, поэтому я загрузил некоторые пробные версии этих, чтобы увидеть, что было изменено.

Илон Маск рекомендует:  is_file - Определяет, является ли файл обычным файлом
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL