Приложение.MessageBox вырезает сообщение при применении темы VCL

#delphi #styles #messagebox #vcl

#delphi #стили #messagebox #vcl

Вопрос:

Версия: Delphi Berlin 10.1

Я сталкиваюсь с проблемами, которые я считаю ошибкой темы vcl, заключающейся в том, что при применении темы в стиле vcl к приложению сообщения с использованием TApplication.Количество сообщений в MessageBox ограничено 256 символами.

Нажатие.MessageBox с 298 символами текста БЕЗ применения темы VCL. Весь текст отображается правильно. Ссылка: без темы в стиле VCL

Нажатие.MessageBox с текстом из 298 символов С примененной темой VCL. Текст ограничен 256 символами, а остальное вырезается. Ссылка: с любой темой в стиле VCL (пример Windows10)

Я уже проанализировал класс TCustomStyle Vcl.Styles.pas, но я не нашел, как решить эту неприятную ситуацию, поэтому мне нужна ваша помощь.

Редактировать:

Следуя информации, переданной Андреасом Рейбрандом, можно было определить, что это было ограничение размера буфера GetText GetText TStyleHook, который был ограничен массивом [0..256] символа. С помощью этой информации я создал обходной путь для нового метода, в котором я увеличил размер буфера до массива [0 ..1023] символа, что решило мою проблему.

Сообщение об ошибке в QC Embarcadero:

https://quality.embarcadero.com/browse/RSP-14771

и

https://quality.embarcadero.com/browse/RSP-14772

К сожалению, обновление IDE (которое решило бы проблему) до более новой версии в настоящее время невозможно.

Комментарии:

1. Невозможно воспроизвести в 10.3 и Windows 7. Вы должны привести минимальный полный пример, демонстрирующий проблему. Но в любом случае лучшее решение — НЕ использовать стили VCL. Тогда вы получаете полностью исправленный графический интерфейс, который ведет себя точно так, как ожидают люди, и, в качестве бонуса, вы получаете визуально гораздо более приятный графический интерфейс.

2. Это известная ошибка. См. RSP-14772 . Это было исправлено в Delphi 10.2.

3. @AndreasRejbrand: комментарий со ссылкой на сообщение об ошибке и информацией об исправлении должен быть размещен в качестве ответа.

Ответ №1:

Это известная ошибка.

Об этом было сообщено Embarcadero в выпуске RSP-14772, и ошибка была исправлена в Delphi 10.2.

Лучшим решением является обновление до новейшей версии Delphi, которая также исправляет множество других ошибок.