понедельник, 1 апреля 2013 г.

А вы знаете про проблемы с WM_SIZE в Win64?

Проблемы таки - есть в Win64 вообще и в VCL - в частности. WM_Size - не всегда доходит. Потому что увеличился размер указателя и при большой вложенности контролов у MS где-то банально кончается стек. И в итоге сообщение до контролов банально не доходит. В результате получаем эффект того, что размеры формы (или другого контейнера) - изменились, а вот вложенные контролы - не пересчитали свои размеры. И дизайн формы - "поплыл". Скроллеры в воздухе повисли, ну и т.п. Причём проблема касается как Win32, так и Win64 приложений. Т.е. проблема зависит не от типа приложения, а именно от типа ОПЕРАЦИОННОЙ СИСТЕМЫ. Под которой приложение запускается.

Завтра я постараюсь найти ссылку на чужую статью, в которой детально описывается эта проблема.

А также постараюсь описать свой путь лечения VCL "на коленке".

7 комментариев:

  1. Знаем, решали фиксом от Embarcadero http://cc.embarcadero.com/item/25646

    ОтветитьУдалить
  2. О как... Я отстал от жизни.. Ну что же - хорошо...

    ОтветитьУдалить
  3. Пожалуйста, вы меня тоже натолкнули на полезные решения )

    ОтветитьУдалить
  4. :-) Захотите пообщаться - пишите. Буду очень рад!

    ОтветитьУдалить
  5. Не скачал пока патч. Удовлетворите моё любопытство и ЛЕНЬ... Там патч исходников библиотеки или что-то ещё?

    ОтветитьУдалить
  6. Там модуль, который прописывается в .dpr файл проекта и внедряется (по другому и не скажешь) в обработку WM_SIZE для VCL контролов, заставляя эти сообщения обрабатываться в простом цикле а не рекурсивно.

    ОтветитьУдалить