Как перестать программировать на 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).
Список заявленных поддерживаемых платформ:
• 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? *Только не надо ответов «всё!».
Как мне сделать так что бы можно было ставить одну запятую после цифр в 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 — инструмент для сборки фронтенда, с которым мельком удалось познакомится незадолго до этого. Он умеет следить за изменением файлов в папке и обрабатывать это событие. Мне требовалась лишь возможность запустить по событию командный файл. Этот же файл используется и для билда продуктивной версии.
Третий пункт (контекстный поиск) решается добавлением исходного файла в проект, до первого 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 выполнять лежащие рядом с проектом батники (вроде «<
UPD3:
Испробовав на практике подготовку ресурсов по событиям компилятора вместо мониторинга изменений исходных файлов. К сожалению, не удалось (пока?) спровоцировать компиляцию тогда, когда исходники ресурсов изменились, а IDE считает, что ничего не менялось и вообще не запускает компиляцию, вместе с соответствующими событиями. Поэтому приведённое в статье решение так и осталось в строю.











