Motto

В тихом саду здравомыслия
Пусть на вас постоянно падают
кокосовые орехи пробужденности.
Чогьям Трунгпа РИНПОЧЕ


Версия для мобильного


воскресенье, 28 сентября 2008 г.

Delphi 2009. Ряды компонент и экспертов пополняются.

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

Позавчера Jordan Russell выпустил версию Toolbar 2000 для Delphi 2009. Вчера Robert Lee выпустил новую версию SpTbxLib, поддерживающую 2009. На прошлой неделе, DevExpress разослали своим подписчикам мейлы о том что готова бета-версия для Delphi 2009. Релизы JCL и JVCL появились практически одновременно с официальным выходом Delphi 2009.
У ребят из modelmakertools готова свежая версия Modelmaker Code Explorer.
Авторы cnWizards сообщают что их ночные билды поддерживают новую IDE. Andreas Hausladen вчера выпустил юникодную версию DDevExtensions.

Fast Report готовы к 2009-й версии.


Devrace FIBPlus пока НЕ поддерживают новую IDE.

Единственные, от кого я жду обновления – это от команды gExperts и автора Ehlib. gExperts заявлены в списке поддерживающих D2009, но на оффсайте, никаких новостей нет. А Ehlib я, чувствую, придётся конвертировать самому, что впрочем должно быть несложным.


Читать дальше..

Обзор средств для автоматической компиляции и установки библиотек в Delphi

На работе у меня установлена 6я версия Delphi, и для перекомпиляции всех библиотек и проектов использую первую версию want. Дома же у меня стоит BDS 2007, и при попытке воспользоваться want-ом, выяснилось, что эту версию Delphi want просто не видит.

Я подумал: ага! появился повод взглянуть на продвигаемый Codegear-ом MsBuild. Но, немного поизучав документацию и справку в Дельфи на эту тему, решил, что с MsBuild-ом для меня всё не так просто. Точнее, всё довольно просто когда в комплекте с .dpk файлами поставляются и .dproj файлы, но во многих библиотеках их просто нет. Единственный способ создать .dproj файл - это открыть .dpk-файл в IDE. Но подобное вмешательство в файлы чужих библиотек меня не устраивало.

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


Читать дальше..

четверг, 25 сентября 2008 г.

Мечты об идеальной билд-машине

Вот было бы здорово, чтобы для перекомпиляции всех установленных библиотек и проектов для Delphi, достаточно было указать входную папку, директивы компилятора, указать выходные папки для Bpl, Dcu и нажав на большую кнопку Go! получить результат в лучшем виде. Да так, чтобы в папках с исходниками не осталось никакого мусора типа .dcu и .res файлов. А все Bpl и Dcu попали именно туда куда надо, а не по тому адресу что вписан в свойствах проекта.

В принципе, такие мысли появились у меня только после работы в N, где к первому проекту, который мне достался, прилагался скрипт для WANT(A Pascal-Friendly Build Tool). Не чудо ли, набираешь в командной строке "want all" и получаешь полностью скомпилированный проект, в котором все файлы разложены по своим местам. Тогда мне это показалось чудом, особенно после предыдущей работы в Б, где по словам одного из коллег, для поднятия рабочего места с нуля требовалось больше 2х-дней, большая часть из которых уходила на установку в нужном порядке всех необходимых компонент. Вероятно, коллега малость преувеличивал, но тем не менее, рядом с его столом стояли 3 системных блока, на каждом из которых хранились исходники своей версии проекта.


Читать дальше..

вторник, 9 сентября 2008 г.

TortoiseMerge 1.5.3 втихаря конвертирует текст в UTF-8 w/o BOM

Сегодня выяснил, как получилось что .dfm-файлы сохранились в UTF-8 вместо ANSI. Виноватой оказалась TortoiseSVN 1.5.3, точнее баг в TortoiseMerge. Оказалось что строки изменили кодировку после использования пункта меню Use This Text Block.

В результате получилось, что и слева и справа, один и тот же текст, но в левой панели он в ANSI, а в правой в UTF-8 w/o BOM. При этом эти строки подсвечиваются как разные, но с символом "=". А я ещё помню, что удивлялся этому "=", когда Commit делал.



Вчера искал какую-нибудь программку, которая смогла бы пройтись по всем файлам проекта, и выдала список файлов сохранённых в UTF-8, но так и не смог ничего найти. Казалось бы, очевидная функция, ан нигде её нет. Поставил пару бесплатных блокнотов - все умеют определять кодировку, но только при открытии файла в редакторе. А вручную открывать 30 000 файлов с исходниками совсем не хочется. К счастью нашлась одна бесплатная библиотечка умеющая определять кодировку файла, с её помощью быстренько был получен список. Нарушители было сконвертированы назад в ANSI и закоммичены в репозиторий.

Сообщил об ошибке куда следует. Буду ждать ответа.

p.s. всё-таки не стоит спешить с установкой свежих версий, если устраивают старые.

Update: исправили.
Читать дальше..

Как обработать все resourcestrings в программе. Код.

Последнее время был занят занимался созданием механизмов для перевода наших приложений. Требования были такими:

  1. перевод должен работать по словарю
  2. словарь должен храниться в БД
  3. должны переводиться все Caption-ы у контролов, resourcestring'и и текст из БД

Основной класс, переводящий в runtime созданные формы, и подменяющий resourcestring'и был сделан за пару дней. Большая же часть времени ушла на составление словаря используемых фраз. Пару дней я потратил пытаясь разобраться как получить список всех resourcestring'ов в программе. Этот вопрос неоднократно поднимался на разных форумах, но полное решение нигде не приводилось. В общем решение нашлось, и в довольно неожиданном для меня месте. В Program Files\Borland\Delphi6\Demos\ResXplor. =)

Я собрал все необходимые классы в одном модуле. Модуль экспортирует одну функцию scCollectResourceStrings:

procedure scCollectResourceStrings( aExeFilename: string; aPerformForEveryFoundString: TscOnGetResString);

у этой функции два параметра:
1) aExeFilename: string - путь до файла с ресурсами
2) aPerformForEveryFoundString: TscOnGetResString - callback фунция, вызываемая для каждого найденного ресурса строкового типа.

TscOnGetResString = procedure (aText, aData: string) of object;

У callback функции[1] два параметра:
aText - resourcestring
aData - представляет из себя строку формата: "ID ресурса = текст ресурса".

aText и aData формируются в процедуре TStringResource.ForEveryString. Так что их формат данных можно легко изменить, подправив пару строк кода.

Скачать модуль можно здесь: http://sites.google.com/site/lazyproject/downloads

Прямая ссылка

Ссылки по теме

 

[1] О Callback-функциях можно почитать в соответствующей главе статьи Основы работы с Windows API.


Читать дальше..

понедельник, 8 сентября 2008 г.

формы(.dfm) сохранились в UTF8 вместо ANSI, а TortoiseSVN не показал различий.

В последнее время тестеры стали жаловаться что на некоторых формах, на месте каждой латышской буквы стали появляться два совершенно нелатышских символа. Стал проверять эти формы, и выяснил, что они вместо ANSI кодировки, сохранились почему-то в UTF8 Without BOM. И в таком виде были закоммичены в репозиторий. Как выяснилось, TortoiseSVN-овский Diff-Tool нагло игнорирует кодировки файлов, преспокойно раскодируя и сравнивая только содержимое. Т.е. если сравнить два одинаковых файла с латышскими буквами(šžīā..), один из которых в будет сохранён в ANSI а другой в UTF8, то в обеих половинах Diff-Viewer-a будет отображаться одинаковый текст.

Теперь осталось выяснить как могло случиться что файлы вдруг поменяли кодировку. Я всё-таки, всё ещё в Delphi 6 работаю.
Читать дальше..

Постоянные читатели