Продвинутая навигации в PopupMenu

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

Итоги 2020-го года

 13: Я самое зловещее число!
666: Нет! Я!
2020: Здра-а-асьте…
    2020-й год подошел к концу. Пандемия COVID-19 сделала его необычным, тяжелым и по своему интересным. Мне кажется, что

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

WebDelphi.ru: итоги уходящего 2020 года

Наконец-то 2020 год подходит к концу! Скачать “Это был тяжелый год” – значит ничего не сказать. Лично для меня этот год был, наверное, самым изматывающим

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

Пройди опрос — выиграй лицензию EurekaLog

Правила просты: вы помогаете нам улучшить EurekaLog, принимая участие в опросе. Заполнение анкеты займёт всего несколько минут. По окончании опроса будут выбраны 3 случайных участника.

  • Победители получат одну лицензию Single Developer Enterprise, если у них ещё нет лицензии.
  • Либо победитель получит бесплатное продление срока обслуживания существующей лицензии (на 2 года).

Пройти опрос можно тут.

Опрос завершится 31 января 2021 года. Победители будут объявлены 1 февраля 2021 года. Вы можете пройти опрос только один раз. Дубликаты будут удалены. С победителями свяжутся по электронной почте.

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

Работа с ресурсами приложения

    Ресурсы приложения Windows – это данные, которые встроены внутрь EXE, DLL, CPL и MUI файлов. Общеизвестным примером такого ресурса является иконка приложения. Windows API предопределяет

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

Даже в пустых приложениях есть баги

С нами связался человек, который утверждал, что нашёл баг в EurekaLog. Он обосновал это утверждение следующим образом: если создать новое приложение DataSnap и добавить в него EurekaLog, то приложение вылетит с Access Violation при выходе.

При расследовании выяснилось следующее:

  • В модуле данных ServerContainerUnit1 находится компонент сервера DSServer1;
  • Тот же модуль данных содержит два вспомогательных компонента: DSTCPServerTransport1 и DSServerClass1;
  • Оба компонента DSTCPServerTransport1 и DSServerClass1 указывают DSServer1 как «Server»;
  • При выходе приложения модуль данных ServerContainerUnit1 будет уничтожен;
  • Уничтожение модуля данных означает уничтожение всех компонентов в нём — включая DSTCPServerTransport1 и DSServerClass1.

    Вот где это происходит:

    • TDSServerClass.Destroy
    • TComponent.DestroyComponents
    • TDataModule.Destroy

    • TDSTCPServerTransport.Destroy
    • TComponent.DestroyComponents
    • TDataModule.Destroy

    При этом ни TDSServerClass.Destroy, ни TDSTCPServerTransport.Destroy не уведомляют сервер о том, что они уничтожаются. В результате DSServer1 продолжает хранить ссылку на (уже удалённые) DSTCPServerTransport1 и DSServerClass1.

  • Итак, после удаления DSTCPServerTransport1 и DSServerClass1 очистка модуля данных ServerContainerUnit1 продолжается;
  • Настаёт очередь удаления DSServer1. В частности, при этом DSServer1 пытается остановить все зарегистрированные в нём транспорты:
    • TDSCustomServer.StopTransports
    • TDSCustomServer.Stop
    • TDSServer.Stop
    • TDSServer.Destroy
    • TObject.Free
    • TComponent.DestroyComponents
    • TDataModule.Destroy

    что и вызовет Access Violation, поскольку объекты для этих транспортов уже удалены.

Как видим, это — баг в DataSnap, а не в EurekaLog. EurekaLog лишь помогла найти этот баг. Действительно, когда EurekaLog не подключена, то DSServer1 может «успешно» вызвать StopTransports, поскольку память уже удалённых объектов не будет изменена, и вызов методов уже удалённых объектов внутри StopTransports пройдёт «успешно».

Заметьте, что эта ошибка сидит в DataSnap уже целую вечность и её никто не исправляет — ровно потому, что в голом приложении нет средств для её обнаружения. Похожие проблемы есть и в пустом приложении Fire Monkey (FMX), а также во многих стандартных компонентах Delphi.

Конкретно эту ошибку можно обойти, если заставить DSServer1 удаляться первым:

procedure TServerContainer1.DataModuleDestroy(Sender: TObject);
begin
FreeAndNil(DSServer1);
end;

Другие ошибки аналогичного плана нужно исследовать отдельно.

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

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

December Apple Platforms Patch for RAD Studio 10.4.1 версия от 18.12.2020

    Компания Embarcadero выложила обновленную версию December Apple Platforms Patch for RAD Studio 10.4.1, о котором я писал вчера. В прошлый раз авторы патча забыли заменить

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

Windows 10. Обновление драйвера до версии 1968 года

    Сегодня случайно заглянул в раздел «Необязательные обновления». Windows 10 Pro версии 20H2 (сборка 19042.685) предложила обновить драйвер INTEL до версии от 18 июля 1968.

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

Обновленная версия Apple Platforms Patch for RAD Studio 10.4.1

    Компания Embarcadero выложила обновленную версию вышедшего в конце ноября Apple Platforms Patch for RAD Studio 10.4.1. Эта декабрьская версия патча является кумулятивной, т.е. включает в

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

Delphi 10.4.2. Новые возможности IDE и новый VCL контрол TControlList

    Компания Embarcadero анонсировала добавление в Delphi 10.4.2 новых Native Windows VCL контролов. Один из них TControlList — оптимизированный виртуальный listview, который позволит отображать большое количество

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