Описание у службы Windows

   При написании очередной службы для MS Windows, меня посетила мысль: «А почему у TService нет свойства «Description«?». При этом из своего опыта знаю, что подобное свойство есть у аналогичных компонент: у TNtService из библиотеки SvCom и даже у бесплатной компоненты TDDService от Arno Garrels, а у стандартного TService его нет даже под Delphi XE. Я понимаю, что описание — это не важно, но служба без описания выглядит на фоне других как-то неполноценно.
   Метода для установки описания у TService я не нашел, поэтому ничего другого не оставалось, как добавить описание службе самому.
   Оказалось, у MS Windows для этого есть специальная функция — ChangeServiceConfig2 (в advapi32.dll), которая изменяет дополнительные параметры конфигурации службы. Вместо реализации вызова ChangeServiceConfig2 на Delphi я сделал проще – в событии TService.ServiceAfterInstall записал описание службы напрямую в реестр:

procedure TxyzSvc.ServiceAfterInstall(Sender: TService);
begin
  With TRegistry.Create(KEY_READ or KEY_WRITE) do
    Try
      RootKey := HKEY_LOCAL_MACHINE;
      If OpenKey(‘SYSTEMCurrentControlSetServices’ + Name, False) then
        begin
          WriteString(‘Description’, ‘XYZ Service’);
          CloseKey;
        end;
    Finally
      Free;
    End;
end;

Читать на сайте автора.

РАО N 2?

На днях по электронной почте пришло УВЕДОМЛЕНИЕ от ФГУП МНИИ «Интеграл», о том что

«Согласно Федеральному закону № 77-ФЗ «Об обязательном экземпляре документов» от 29.12.1994 г производители программ для ЭВМ и баз данных обязаны доставлять в МНИИ «Интеграл» один обязательный бесплатный экземпляр программ.«

Штрафы за непредоставление, кстати (в письме не указано), для юрлиц от 10000 до 20000 тысяч рублей.

Я тут же открыл этот закон на сайте Консультанта, и обнаружил вот что.

Статья 5. Виды документов, входящих в состав обязательного экземпляра
1.
…программы для электронных вычислительных машин и базы данных на материальном носителе;

К примеру, мы не поставляем свое ПО на материальных носителях.

Кстати, если сравнить этот текст с текстом, размещенным на сайте «Интеграла»,
http://indepo.ru/laws_1.htm
то кто-то из двух врет. Потому что Эта же 5-ая статья в редакции Интеграла содержит отличное описание пункта об электронных изданиях:
электронные изданияпрограммы для электронных вычислительных машин и базы данных, а также электронные документы, прошедшие редакционно-издательскую обработку, имеющие выходные сведения, тиражируемые и распространяемые на машиночитаемых носителях;
(подчеркнуто то, чего нет на Консультанте и других сайтах, цитирующих закон в самой последней редакции.)

Отсюда впечатление, что некто там встрепенулся, что можно заработать денег, штрафуя российских разработчиков ПО.
Я мог бы прислать наши «экземпляры», но подчеркиваю, что мы их не распространяем на материальных носителях, и кроме того, наше ПО требует регистрации и защищено от взлома. И такого ПО сейчас 99% (исключая бесплатное).
Сам закон написан безобразно (в т.ч. юридически, много к чему есть придраться), и смысл его от меня ускользает. Есть же ФИПС, в конце-концов.

p.s. Например, Статья 13, пункт 1 — «Производители документов доставляют в МНИИ «Интеграл» один обязательный экземпляр программ для электронных вычислительных машин и баз данных». А в Статье 1 написано, что документ — это «материальных носитель с зафиксированной на нем в любой форме информацией….». Там же в определении «производитель документов» ничего про ПО не написано. Там даже «Электронные издания — документы, …которые … тираюируются и распространяются на машинночитаемых носителях».

Ну и самое главное: «Настоящий Федеральный закон не распространяется на …. электронные документы, распространяемые исключительно в сетевом режиме»

Читать на сайте автора.

ImageEn – кто не успел, тот опоздал

   Год назад компания HiComponents сделала бесплатной свою библиотеку компонент для работы с картинками – ImageEn. Исходные коды, хоть и было обещано, выложены не были, но любой желающий, после несложной регистрации, мог скачать новую версию библиотеки (3.12), скомпилированную под любую версию Delphi и C++Builder и насладиться её мощным функционалом бесплатно.
   Но теперь халява закончилась. Права на ImageEn переданы новозеландской компании Xequte Software и библиотека снова стала платной. Вот такой поворот в условиях лицензии. Взглянув на список продуктов компании (сплошь утилиты для работы с картинками, видео и музыкой), становится очевидной причина смены хозяина. Предполагаю, что для разработки многих продуктов компании используется ImageEn и, после того как ее автор (итальянец Fabrizio) утратил к библиотеке коммерческий интерес, ей просто не дали умереть.
   По заявлению представителя компании Xequte Software они планируют развивать библиотеку и даже задумываются над 64-х битной версией, а над исходными кодами ImageEn по-прежнему трудится Fabrizio.
   Со сменой хозяина и лицензии изменились и цены. У Xequte Software лицензия на исходные коды ImageEn и подписка на их бесплатное 12-ти месячное обновление стоит 299.50$ (на одного разработчика). Эта цена почти вдвое больше, чем у HiComponents (175$)! А лицензия на скомпилированную версию ImageEn не продается(у HiComponents она стоила 59$), но её владельцы могут приобрести новую версию по сниженной цене – за 249.50$.
   Если Xequte Software снова не выложит бесплатно скомпилированную версию ImageEn, то тот, кто не успел её скачать, попал на деньги.

Читать на сайте автора.

Links for 2011-05-12 [del.icio.us]

Создание многоязыкового инсталлятора для Windows с помощью WiX
Блог компании Фаматек.

Читать на сайте автора.

Links for 2011-05-12 [del.icio.us]

Читать на сайте автора.

FastReport. Вывод данных в внизу страницы

   Недавно коллега обратился с вопросом «Как в FastReport сделать так, чтобы бэнд с данными выводился внизу страницы?».
   Первая моя мысль была положить SubReport на PageFooter. Но такое решение естественно не сработало, и я стал пробовать управлять положением бэнда на странице с помощью скрипта. В результате я нашел решение данного вопроса с помощью дополнительного бэнда и одной строчки скрипта. Поясню на примере.
   Например, вверху отчета нам нужно вывести какую-то информацию (добавляем на страницу бэнд MasterData1) и внизу отчета нам нужно вывести какую-то информацию (добавляем на страницу бэнд MasterData2). А между ними положим еще один бэнд (MasterData3), который заполнит пространство между MasterData1 и MasterData2. Его не будем подключать к данным, а просто укажем количество строк RowCount = 1.
   В скрипте, при старте отчета зададим размер MasterData3:

MasterData3.Height := Engine.PageHeight — MasterData1.Height * MasterData1.RowCount – MasterData2.Height * MasterData2.RowCount

т.е., от высоты страницы отнимаем высоту бэндов с данными. Высоту бэндов с данными вычисляем следующим образом: высоту одной строки бэнда умножаем на количество строк, которые будут в нём выводиться. У меня здесь в скрипте количество строк – это RowCount, а в примере отчета для моего коллеги я использовал количество строк в запросе (DataSet.RecordCount).
   Вот такими нехитрыми манипуляциями мне удалось решить поставленную задачу.

Может быть, вы знаете способ проще?

Читать на сайте автора.

Использование ресурсов при разработке приложений на Win API

Читать на сайте автора.

Ребрендинг Edit’a и Memo дизайнерским напильником

Читать на сайте автора.