delphi что можно сделать

Как перестать программировать на Delphi и начать жить

Если ты, %username%, едва прочитав заголовок этой статьи, чувствуешь butthurt стойкое неприятие к автору, если слова «TForm1», «circular reference» и «Access violation» для тебя не пустой звук, если после очередного холивара в уголке сознания снова зашевелился червячок — эта статья для тебя.

С завидной регулярностью появляются новые статьи как сторонников так и противников Delphi, и неизменно с новой силой разгорается холивар. И если лет 10-15 назад холивар назывался «Delphi vs C++», то теперь фронт переместился вплотную к окопам сторонников бывшего Borland и спор идет уже в рамках «Delphi vs не-Delphi». Даже самые упрямые последователи Н.Вирта иногда задумываются, почему вдруг стали изгоями и чудаками в сообществе программистов?
Если ты, читатель, все же считаешь что ничего кроме Delphi тебе не нужно для работы, сравни хотя бы вилки зарплат для вакансий Delphi и той же Java. Появилось желание изучить что-нибудь кроме Delphi? Я расскажу с чего начать на основе собственного опыта.

Откуда берутся Delphi-программисты

Будучи еще студентом, 7-8 лет назад я устроился в небольшую компанию тестировщиком. Шли годы, я освоил Delphi, на котором писались все десктопные приложения этой компании, стал ведущим программистом. Не считаю себя гуру, однако Delphi и VCL для меня — зачитанная до дырок книга. Все дырки пришлось научиться либо обходить, либо закрывать собственными заплатками. Справедливости ради стоит сказать, что VCL имеет совсем немного откровенных отказов. Многое из того что давным-давно есть в Delphi совсем недавно стало появляться в других платформах, однако на текущий момент у Delphi практически нет никаких преимуществ перед современными средствами разработки. Увы, но это факт.

Некоторое время назад биг-боссы пригласили меня на совещание и уговорили заняться новым проектом. Пришлось отложить любимый Delphi7 в самый темный и пыльный угол жесткого диска и, вооружившись интернетами, срочно осваивать Qt. Из глубин памяти, затянутые паутиной, понемногу всплыли скромные институтские познания С. Помноженные на популярные книги по С++ и документацию по Qt они начали давать первые результаты.

Разрабатывая desktop-приложения на любом языке программирования вы рано или поздно сталкиваетесь с синтаксисом С и элементами С++. Это и документации и примеры и мучительный «перевод» хедеров на любимый язык. С приходом опыта, программист Delphi все же может сносно понимать программы на С++, обилие «звездочек», «анперсандов», символы «==» уже не кажутся бессмысленной кашей и заговором коварного Страуструпа по уничтожению ваших мозговых клеток. В конце концов, начинаешь в некоторых конструкциях видеть определенную красоту. Далее будем предполагать, что читатель умеет сносно понимать С-синтаксис.

Итак, читатель, согласен изучить что-нибудь новое, но что же выбрать?

Путь первый. Самый простой. C#

Из современных языков С#, как ни странно, проще всего воспринимается Delphi-ориентированными мозгами. Чтобы пересесть с Delphi на C# вовсе не обязательно начинать с толстой книжки от Microsoft. Большинство вещей будут интуитивно понятны, остальное есть в MSDN. Все объекты, как и положено, являются указателями, методы и свойства доступны всегда через «точечку», никаких вам «->». Автоматическая сборка мусора, конечно, вызовет укоризненное покачивание головой у настоящего Delphiста, однако к хорошему быстро привыкаешь. Стоит отметить, что программировать на C# можно не только в Visual studio, есть прекрасная IDE SharpDevelop. Она бесплатна, как и Delphi. Порог вхождения минимален — установили, запустили, поехали! И в той и в другой среде можно грабить корованы программировать мышкой, как мы привыкли это делать в Delphi: редактор форм принципиально ничем не отличается, а двойной клик по кнопочке создаст метод-обработчик нажатия. Уже через полчаса вы сможете сделать первый helloworld, через сутки накатать работающий прототип собственного GPS-навигатора для старого но любимого КПК на Windows CE, а через неделю-две начнете на нем новый коммерческий проект.
Главное, не забывайте, оператор сравнения на равенство это двойное равно «==». Понять это невозможно, надо просто запомнить.

Путь второй, тернистый. С++

Сравнивая Delphi и С++ можно провести такую аналогию: Delphi это сильное тоталитарное государство. Исповедуй его идеологию — и будешь жить долго и счастливо и даже достигнешь определенных высот. Делать карьеру легко и приятно, путь предначертан. Но стоит сделать шаг в сторону — расстрел!
С++ — это демократия. Хочешь — сделай так, хочешь — эдак. Или наплюй и сделай по-своему. Но за свои действия отвечай, пожалуйста, сам.

Тут уже придется почитать специальную литературу. Лично я всегда предпочитаю книги для начинающих. Важно твердо разобраться именно в базовых вещах, тогда до высшего пилотажа быстрее дойдете сами. В данный момент дочитываю «C++ для начинающих» Герберта Шилдта. Если вы действительно опытный Delphi-программист, первые страниц сто можно полистать не очень внимательно. Особое внимание следует уделить работе с указателями и объектной модели.

Теперь надо выбрать IDE. Можно взять проверенную Visual Studio, я же выбрал Qt. Он бесплатен, кроссплатформеннен, имеет богатый набор классов, прекрасную IDE, а также широкую поддержку в сообществе. Качаем Qt, ставим, всё! Надо отдать должное, Qt не беспокоит начинающего программиста лишними вопросами, имеет встроенную документацию, примеры. Все как у дорогостоящих коммерческих IDE. Мышкой программировать уже не получится, хотя может это и к лучшему.
Первое, что не укладывается в Delphi-ориентированный мозг, это отсутствие примитивного типа string. К этому сложно привыкнуть, но это так. Во-вторых, чтобы использовать привычный нам подход к работе с объектами, придется явно объявлять их как указатели. В третьих, интерфейс модулей обычно хранится в отдельных заголовочных файлах. Это кажется избыточным на первый взгляд, однако в чужой монастырь со своим уставом, как известно, не ходят. Это только первые впечатления. Переварив и осмыслив их, вооружаемся книгами, мануалами, гуглами и начинаем переворачивать свое представление о программировании. Qt вам в помощь.

Путь третий. Извилистый. Web

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

Заключение

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

PS: За что я все-таки действительно люблю делфи, так это за быструю компиляцию:

Источник

История языков программирования: Delphi — больше, чем просто язык

С Delphi обычно ассоциируется среда разработки приложений на основе языка Object Pascal, разработанного фирмой Borland. Этот язык является наследником Turbo Pascal с объектно-ориентированными расширениями, который в свою очередь ведет свою историю от «чистого» Pascal, созданного Никлаусом Виртом в 1970 году.

Впоследствии, в 2002 году, разработчики из компании Borland официально поставили знак равенства между языками Delphi и Object Pascal.

Предыстория

Изначальный Pascal, по мнению его разработчиков, имел самый быстрый компилятор в мире. Более того, вместе с ним была впервые разработана технология создания платформенно-независимых программ, которая нашла широкое применение в таком языке, как Java.

Однако его IDE, если это понятие можно применить к среде разработки того времени, функционировала только на базе операционной системы DOS.

С появлением Windows возникла необходимость в создании среды разработки ПО для этой платформы. Наиболее популярным решением для персональных Windows-компьютеров в 80-е — начале 90 годов стал компилятор и IDE Turbo Pascal фирмы Borland. Встроенный компилятор обеспечивал высокую скорость компиляции и высокое качество кода (отсюда приставка Turbo). Среда Turbo Pascal обеспечивала также отладку кода, содержала богатый набор примеров. Все эти качества на какое-то время позволили Turbo Pascal стать стандартом языка Pascal.

Читайте также:  целебрекс и омез назначили вместе зачем

Вызов времени

В Windows довольно быстро начал развиваться графический интерфейс, а в IDE Turbo Pascal по-прежнему использовался DOS-подобный интерфейс. Постепенно в Microsoft поняли, что нужно двигаться в сторону «визуализации» программирования.

Чтобы создать простую программу, разработчикам приходилось писать по несколько страниц кода: прописывать объемные блоки кода для меню и окон, шрифтов, очищать память, «рисовать» кнопки и т.д. Однако преимущества графического интерфейса Windows были довольно сильны, поэтому нужно было поддержать развитие операционной системы. В Microsoft понимали, что необходимо как-то облегчить жизнь разработчиков. Поэтому в 90-х годах компания запустила несколько параллельных проектов по созданию нового языка программирования и среды разработки для Windows. Первой ласточкой стал Visual Basic.

Перспективы языка Pascal в этом отношении оказались далеко не радужными. К середине 90-х годов он уже находился в довольно запущенном состоянии. Компания Borland начала дорабатывать его, но вскоре стало понятно: изменения и добавления будут настолько серьезными, что результат этой работы можно считать новым языком программирования. Для нового языка была разработана IDE с графическим интерфейсом. Новая среда программирования и язык получили общее название Delphi.

Своё имя новая система (Delphi) получила в честь древнегреческого города Дельфы. Название было выбрано неспроста: город Дельфы связан с именем бога мудрости и покровителем искусств Аполлона. Согласно легенде главное святилище Аполлона находилось именно в этом городе. Его жрицы-сивиллы изрекали пророчества желающим узнать свою судьбу.

«Имя Delphi было предложено Денни Торпом во время мозгового штурма. Мы хотели, чтобы в имени системы отразились уникальные способности продукта к работе с базами данных, и Delphi как нельзя лучше перекликается с таким заслуженным именем в этой области, как Oracle, по крайней мере для тех, кому сочетание «Дельфийский Оракул» о чем-то говорит», рассказывал руководитель исследовательской группы по разработке системы Delphi Чак Язджевски.

В России Borland Delphi появился в конце 1993 года и сразу же завоевал большую популярность.

Основные версии

Версия 1 была предназначена для разработки под 16-разрядную платформу Win16. Начиная со второй версии, была реализована возможность компиляции программы под 32-разрядную платформу Win32.


Delphi 1

В версии 3 появилась поддержка многозвенной технологии (multi-tiered) доступа к данным, что позволило создавать масштабируемые приложения (относительно слабо зависящие от сервера БД) за счет перенесения методов обработки информации (бизнес-правил) на среднее звено.


Delphi 3

Вместе с 6-й версией Delphi вышла совместимая с ним по языку и библиотекам среда Kylix, предназначенная для компиляции программ под операционную систему Linux.

За что боролись

Процесс разработки в Delphi предельно упрощен. В первую очередь это относится к созданию интерфейса, на который уходит 80% времени разработки программы. Достаточно просто перетащить нужные компоненты на поверхность Windows-окна (в Delphi оно называется формой) и настраиваете их свойства с помощью специального инструмента (Object Inspector). С его помощью можно связать события этих компонентов (нажатие на кнопку, выбор мышью элемента в списке и т.д.) с кодом его обработки.

Разработчик получил в распоряжение мощные средства отладки (вплоть до пошагового выполнения команд процессора), удобную контекстную справочную систему (в том числе и по Microsoft API), средства коллективной работы над проектом.

Стало возможным создавать компоненты ActiveX без использования Microsoft IDL, расширять возможности web-сервера (скрипты на стороне сервера), практически ничего не зная об HTML, XML или ASP.

Появилась возможность создавать распределенные приложения на базе СОМ и CORBA, Интернет- и intranet-приложения, используя для доступа к данным Borland DataBase Engine, ODBC-драйверы или Microsoft ADO.

В Delphi разработчикам дали возможность создавать свои собственные компоненты, импортировать ОСХ-компоненты, создавать шаблоны проектов и мастеров, генерирующих заготовки проектов. Более того, авторы предоставили разработчику интерфейс для связи других приложений (или внешних программ) с Delphi IDE.

Перемены

В марте 2006 года компания Borland приняла решение о прекращении дальнейшего развития интегрированных сред разработки JBuilder, Delphi и C++Builder по причине убыточности этого направления. Была запланирована продажа IDE-сектора компании. Группа сторонников свободного программного обеспечения организовала сбор средств для покупки у Borland прав на среду разработки и компилятор. Однако в ноябре того же года было принято решение отказаться от продажи IDE бизнеса.

После этого разработкой IDE-продуктов стала заниматься новая компания — CodeGear, которая была финансово полностью подконтрольна Borland.

В марте 2007 года CodeGear порадовала пользователей обновлённой линейкой продуктов Delphi 2007 for Win32 и выходом совершенно нового продукта Delphi 2007 for PHP.

25 августа 2008 года компания Embarcadero, новый хозяин CodeGear, опубликовала пресс-релиз на Delphi for Win32 2009. В этой версии появилось множество нововведений на уровне языка:

В версии Delphi XE2 (2011 год) был добавлен компилятор Win64 и кросс-компиляция для операционных систем фирмы Apple (MacOS X, iOS).

Про следующую версию в своем интервью рассказывал Всеволод Леонов, российский евангелист Delphi из компании Embarcadero Technologies:

Продукт Delphi XE3 является продолжением нового поколения средств быстрой разработки семейства Delphi. Напомню, в 2011 году вышла Delphi XE2 с платформой FireMonkey, которая является альтернативой библиотеки визуальных компонентов VCL.

Она очень похожа на VCL по методам использования и составу компонентов (кнопки, метки, поля ввода, меню и т.д.), но обладает способностью быть перенесенной на другую операционную систему. FireMonkey — кроссплатформенная. Приложения, созданные с помощью FireMonkey, могут компилироваться и под Windows, и под Mac OS. Практически в один-два «клика» мы можем пересобрать проект под принципиально другую операционную систему. Практически все демонстрационные проекты, поставляемые с Delphi на платформе FireMonkey, имеют две версии: одну под Windows, другую — под Mac OS. И для этого не нужно вносить изменения в исходный код приложения

Вышедшая в 2013 году версия Delphi XE5 обеспечила кросс-компиляцию приложений для устройств на платформе ARM/Android.

В апреле 2016 года появилась Delphi 10.1 berlin. Нововведения:

Ни жив, ни мертв

Известно, что Delphi перманентно «хоронят» или заявляют, что так жить нельзя. Они аргументируют тем, что система стала монструозной, неактуальной, неподдерживаемой, неудобной, какой-то еще…

Но можно вспомнить, что такое мнение чаще встречается в США и Западной Европе, где этот язык бешеной популярности и не имел никогда. Там эти соображения могут быть вполне резонными во многих случаях. Но есть и другие страны, где ситуация может отличаться — страны СНГ и остальные страны Восточной Европы.

С этим согласен Всеволод Леонов:

Небольшой исторический экскурс по поводу стран Восточной Европы. Система образования бывшего СССР была очень сильна во многих аспектах, но не по части прикладного программирования. В начале 90-х как получить доступ к компьютеру, так и научиться что-то делать в современных средах разработки могли лишь те, кто имел определенную специальность.

Целые факультеты «пролетали мимо» фундаментальных курсов по программированию. И наличие Turbo Pascal с низким порогом вхождения, а затем среды Delphi, позволяющей заняться самообразованием в хорошем смысле этого слова, смогли насытить ИТ-отрасль достаточно грамотными разработчиками, а также повысить общенациональный инженерный уровень создания прикладного ПО.

Таким образом, для стран бывшего соцлагеря связка Pascal/Delphi резко выдернула экономику из ИТ-небытия за счет очень простого языка программирования и среды визуальной разработки на основе готовых компонентов.

Новый герой из open source

Наиболее известной свободной реализаций языка Pascal является Free Pascal. Помимо открытости исходного кода, его основным преимуществом является мультиплатформенность, а также поддержка различных диалектов.

На основе FreePascal создана свободная мультиплатформенная IDE Lazarus, позволяющая работать с проектами Delphi. Она основана на библиотеке визуальных компонентов Lazarus Component Library (LCL).

Читайте также:  bug bounty что это

Список заявленных поддерживаемых платформ:

• Windows: 98, 2k, XP, Vista, 7, 32 и 64bit;
• FreeBSD/Linux: gtk 2.8 и qt4.5, 32 и 64bit;
• Mac OS X: 10.4, LCL только 32bit, не-LCL могут быть 64bit.

С другой стороны, среда Delphi по мере развития действительно становилась все более громоздкой и малопригодной для обучения программированию. Кроме того, отсутствует бесплатная версия Delphi даже для академического использования. Данные факторы привели к практически полному исчезновению Delphi из сферы образования.

Источник

Что можно сделать полезного в delphi 7?

Что можно сделать в delphi
Всем привет, тут у меня вопрос есть! Что можно сделать на delphi? *Только не надо ответов «всё!».

Как мне сделать так что бы можно было ставить одну запятую после цифр в edit1 delphi?
Как мне сделать так что бы можно было ставить одну запятую после цифр в edit1 delphi? Добавлено.

Можно ли на Delphi сделать
Привет всем. Я новичёк в Delphi и задаю эти вопросы, чтобы далее со спокойной душой изучать этот.

Можно ли сделать Portable-версию Delphi?
Уважаемые форумчане, подскажите пожалуйста можноли из обычнойиустановленной delphi сдрлать delphi.

На деле может и не сложно, а вот прочитав всё это. Кажется всё очень сложным

Добавлено через 2 минуты
И да, всё что вы описали я смогу сделать только по урокам(

Инсталлятор. Загрузчик файлов из инета. SFX-архиватор.

Остальное чаще пишут на C# (винда), Java (андроид и кроссплатформа) или C++.

P.S. Если есть комп с линуксом и уже писали раньше простенькие прожки, попробуйте портировать их на CLX.
Создать проект типа CLX Application и туда по кусочкам переписать код, возможно с некоторыми переделками.
Тогда их можно будет скомпилировать для работы и под Linux и под Win.

Delphi 7. При нажатии на ALT пропадают кнопки и радио-кнопки. Что сделать что-бы не пропадали?
Delphi 7. При нажатии на ALT пропадают кнопки и радио-кнопки в запущенной программе. Что сделать.

Как в Delphi 7 сделать что решал матричную игру?
Как в Delphi 7 сделать что бы решал матричную игру.

Источник

Какие приложения можно создать на Delphi? Я начал изучать Delphi, что можно создать и взять это как стремление

Когда мы с братом осваивали Delphi, то первым делом опробовали в деле те компоненты, которые входят в состав среды разработки.

Можно придумать игрушку-головоломку из базовых элементов управления. Ты их кликаешь, переключаешь, ставишь галочки, а они как-то реагируют.

Например, можно сделать головоломку в виде матрицы галочек — 3 на 3 или 5 на 5. Задача — проставить все галочки. Но по таймеру раз в несколько секунд одна уже установленная галочка будет сниматься. Как всё проставишь — на экран выпадает поздравление, все галочки снимаются, а интервал таймера уменьшается, скажем, в 1,1 раза.

Другая штука, которую можно придумать, — это рисование по канве формы. Это посложнее и требует длительной практики, но оно того стоит. Можно сделать любые графические метаморфозы, вывод любых рисунков и анимации, используя простую канву формы и рисуя на ней всё, что тебе вздумается.
(Рисовать прямо на форме или на TPaintBox быстрее, чем на TImage)

Так, на втором курсе мы с одногруппником сдали курсовую работу — тактическую игру в жанре «Война баз». Суть простая: ты инвестируешь деньги в недвижимость, экономику и вооруженные силы, а вызванные тобой войска воюют сами. Цель — сломать защитное орудие противника. Естественно, на тот момент у нас уже был достаточный студенческий опыт разработки в Delphi. На курсовую ушел один семестр. (Для звукового сопровождения мы использовали библиотеку FMod.)

Источник

Delphi 7 на костылях: автоматизация подготовки ресурсов

Эпиграф: «Пусть это вдохновит Вас на подвиг!» (Бел Кауфман, «Вверх по лестнице, ведущей вниз»).

О костылях и велосипедах, неотъемлемой части современной некромантии.

Это история интеграции в процесс разработки одного единственного решения. Решение доведено до конечного результата, ссылка на репозиторий будет далее по тексту.

Казалось бы, что может быть более простым и естественным, чем прозрачная, без «нелепых телодвижений», работа с размещёнными в специально выделенной для этого папке ресурсами? А если среда разработки выпущена на границе тысячелетия?

Первым великим неудобством, с которым я столкнулся, «подписавшись» года четыре назад на сопровождение и активную доработку проекта на Delphi 7, было категорическое неудобство работы с входящими в проект относительно крупными SQL запросами. Проект обеспечивает отчётность перед поставщиками (десятки поставщиков, взаимодействие с которыми идёт через множество компаний-интеграторов), и этих запросов там, что гуталина у сторожа — «ну просто завались». Причём запросы эти изначально описывались прямо в тексте, вперемешку с кодом… представьте мой восторг с учётом того, что запросы приходилось время от времени переносить в SSMS, исправлять и переносить обратно. А если вспомнить, что и Delphi, и в SQL используются одиночные кавычки, становится ещё печальнее.

Первая реакция на эту «красоту» была вполне предсказуемой: срочно отделить данные от кода! Идеальным (и очевидным) решением кажется создание структуры папок с файлами запросов, которые при компиляции автоматически попадали бы в ресурсы с соответствующими идентификаторами. При этом, однако, компилятору нужно явно предоставлять список ресурсов в виде отдельно сформированного *.rc файла с соответствующими именами для доступа, который надо ещё предварительно сформировать.

Однако, компиляция проекта из-под IDE Delphi 7 является чёрным ящиком без малейшей возможности прикрутить к ней хоть что-то своё. У неё просто нет ни одного хука, чтобы зацепить собственный обработчик. Современные версии работают с MS Build, но у меня-то этого нет! Конечно, для сборки продуктивной версии можно использовать батник и компилятор командной строки, где можно добавить любую предварительную обработку, но для запуска из-под IDE этот вариант не годится.

Ещё одна печалька оказалась в том, что файл ресурсов (*.rc) перекомпилируется только тогда, когда изменилась его собственная дата. То, что изменилась дата файла, на который он ссылается (то есть сам ресурс), компилятор не волнует никак. Плюс rc-файл ещё и создать надо! И очень, очень хочется делать это автоматически.

На это накладывался ещё один немаловажный недостаток, присущий самописным компонентам Дельфи в принципе: компонент не может быть зарегистрирован на уровне проекта, его надо явно и заранее устанавливать в IDE, но далеко не все это умеют. Если открыть проект в среде без соответствующих компонентов, то они, после гневного сообщения просто пропадут. В наше время, с сокращением количества опытных кадров, не гнушающихся работать с древнючей Delphi, это выглядит, как натуральная бас-факторная мина. Хотя и без того там этих мин — хоть ведром черпай.

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

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

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

Должен автоматически формироваться файл со списком ресурсов для компилятора

ВАЖНО. изменение файла с запросом должно автоматически попасть в программу, при первой же компиляции (даже если не делать build)

Обеспечить включение ресурсов в операцию контекстного поиска по проекту.

Опционально — ещё и шифровать для пущего пафоса. Требование проекта на уровне «Очень желательно».

По первому пункту я решил использовать Gulp.js — инструмент для сборки фронтенда, с которым мельком удалось познакомится незадолго до этого. Он умеет следить за изменением файлов в папке и обрабатывать это событие. Мне требовалась лишь возможность запустить по событию командный файл. Этот же файл используется и для билда продуктивной версии.

Читайте также:  error 480 что это

Третий пункт (контекстный поиск) решается добавлением исходного файла в проект, до первого USES, в директиве компилятора вида:

Четвёртый решается элементарно запуском отдельной утилитки для шифрования всё в том же пакетном файле, и расшифровкой непосредственно в основном проекте при обращении к ресурсу.

Ну, и собственно список файлов сформировать надо было. В результате шапка проекта стала выглядеть примерно так:

SomeProject.dpr

AutoGenerated.rc (пример):

Галпфайл был простой до безобразия:

gulpfile.js

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

Кстати, пришлось его радикально править, когда пришлось обновить Галп после обновления Ноды. Текущие версии у меня такие:

Впрочем, это уже не важно — от Галпа я буквально в процессе написания статьи избавился.

сразу же меняет дату сгенерированного файла

составляет список файлов в обслуживаемой папке, за вычетом исключений

запускает программку на Perl, которая преобразует сырой список файлов во все виды, в которых он употребляется, в том числе генерирует rc-файл, и формирует задание на подготовку (шифрование) для изменённых файлов

запускает подготовку ресурсов

выделяет из dpr ранее добавленный туда список ссылок. Если он изменился, то заменяет его

компилирует сформированный rc-файл

Информирует о времени запуска и завершения и об обслуживаемой папке (на случай одновременного запуска нескольких экзкмпляров.

И всё это запускается из отслеживающего изменения монитора.

CompileAllResources.cmd

Внутри он содержит сборную солянку технологий, использует линуксовские find и grep (под Виндой они ставятся вместе с git) и даже Перл. Каюсь, побаловаться захотелось. Забавный опыт, хотя и немного травматичный. Своей лаконичностью и непрозрачностью (вроде наличия «переменной по умолчанию») он напомнил мне ассемблер:

CreateRc.pl

В процессе многолетней эксплуатации вылезли забавные особенности. Для примера, обновление git (с последующим обновлением линуксовских утилит) как-то раз мою автоматизацию сломало. Конкретно, более новый grep отказался воспринимать список исключений как список регэкспов, по одному на строку. Find тоже что-то такое подбрасывал (по крайней мере, тот, что установлен глобально сейчас, уже не отрабатывает именно так, как ожидается). В результате пришлось зафиксировать их версию — банально кинуть бинарники в репозиторий, чтобы потом не плакать, благо, они не шибко большие, и изменять я их не планирую. Было ли что-то подобное в связи с Перлом — не помню, но на всякий случай и его туда же пихнул.

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

И уже после того, как взялся за эту статью, решил всё-таки избавиться от Галпа. Зачем мне (или тому, кто попробует это за мной повторить) неконтролируемая глобальная внешняя зависимость, имеющая ещё одну неконтролируемую внешнюю зависимость (я по node.js), и из возможностей которой используется откровенный мизер?

Результат — проект FolderMonitor, написанный на Delphi (https://bitbucket.org/danik-ik/foldermonitor/src/master/). Собственно, именно он прописан как монитор по умолчанию в инсталляторе предыдущего проекта (да, я не только сделал из этого отдельный проект, но даже сдалал инсталлятор в виде пакетного файла, см. https://bitbucket.org/danik-ik/compilerc/src/master/README.md).

Инсталлятор проекта CompileRc работает с использованием git. Он создаёт ветку в репозитории проекта и добавляет туда необходимые модули и настроечные файлы. Вместо шифрования по умолчанию используется заглушка (копирование), что позволяет добавлять ресурсы «как есть». Вот скриншот репозитория тестового проекта в SmartGit, после добавления в него CompileRc (все три коммита ветки CompileRc, как и сама ветка, сформированы инсталлятором), запуска монитора и добавления нескольких файлов ресурсов (в рабочем дереве):

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

На сегодня работа в ресурсами выглядит следующим образом. Запросы хранятся в отдельных файлах и сгруппированы по папкам. Когда я собираюсь их править, запускаю монитор. Всю папку с исходниками открываю в редакторе (например, VS Code). Исправляю то, что надо, принудительно сохраняю (если полагаться на автосохранение при потере фокуса, и переключиться из редактора прямо в Delphi, то изменения не успеют дойти до rc-файла). В Delphi заранее и всегда открыт AutoGenerated.rc. Когда я переключаюсь в Delphi, дата rc-файла уже изменена монитором, и среда задаёт запрос на его перезагрузку. Любая последующая компиляция подхватывает произведённые изменения с первого раза. То есть, если упростить, то при запущенном мониторе: изменил исходный запрос (или что там в ресурсах лежит) → сохранил → переключился в Delphi → Reload? Yes! → запустил. При этом риск запуска с устаревшим вариантом ресурса практически отсутствует.

На мой взгляд, всё это «преодоление» позволило вопреки всем ретронеудобствам поддерживать постоянный интерес к работе, качественно разбавляя рутину и не позволяя затосковать по причине отсутствия каких-нибудь модных перламутровых пуговиц. Больше скажу, когда подобных вызовов стало меньше, а рутинные операции многократно ускорились (в смысле трудозатрат), даже как будто чего-то не хватать стало. Наверное, мне просто сложно работать на всём готовом.

Так что если Вы вдруг оказались на должности штатного некроманта — просто помните о том, что не боги горшки обжигают, и у Вас есть шансик сделать себе хорошо и нескучно.

Если честно, хотел в первую очередь рассказать о параметризованных модульных тестах и об автоматизации их запуска, но вот вылезла именно эта тема, не отвертишься: «пиши меня», и всё тут.

Меня спрашивали в личку про скомпилирванный FolderMonitor. Если нечем скомпилировать, можно взять здесь: https://disk.yandex.ru/d/VTbuGvB5jabD6w

Возможно, осталось за кадром: данное решение только генерирует валидный для Delphi код и автоматизирует рутину: своевременно добавляет файл ресурса к списку на компиляцию и к списку внешних файлов проекта, и своевременно компилирует rc в RES (средствами Delphi). Всё. Шифрует ещё в конкретном проекте, но это как раз излишество в общем случае. Запуская его под монитором изменений я перевожу работу с ресурсами из состояния статики («созданы раз и навсегда») в динамику («редактирую на лету»).

UPD2:

В связи с вновь открывшимися обстоятельствами (спасибо @DrPassза комментарий https://habr.com/ru/post/550020/#comment_22874706) у меня появилась возможность подцепить кодогенерацию на событие «BeforeCompile» IDE. Ранее найти информацию по этому вопросу мне просто не удавалось. Воистину, знание, что (или где, или как) конкретно искать — одно из самых важных в профессии разработчика :). Думаю, что в ближайшее время (по мере этого времени наличия) сделаю и опубликую плагин для Delphi, который будет по событиям BeforeCompile и AfterCompile выполнять лежащие рядом с проектом батники (вроде «<>compilerEvents\before.cmd», при их наличии, разумеется), отображая интерактивно и одновременно логируя результат выполнения. Макет из глины и палок уже практически заработал.

UPD3:

Испробовав на практике подготовку ресурсов по событиям компилятора вместо мониторинга изменений исходных файлов. К сожалению, не удалось (пока?) спровоцировать компиляцию тогда, когда исходники ресурсов изменились, а IDE считает, что ничего не менялось и вообще не запускает компиляцию, вместе с соответствующими событиями. Поэтому приведённое в статье решение так и осталось в строю.

Источник

Сказочный портал