Created attachment 832 [details] Скришоты в WinXP, Wine 1.0.8, Wine 1.0.9 Ubuntu 7.04, wine@etersoft.sql 1.0.9, 1c 7.70.027, formex.dll 2.0.5.93 Внешняя компонента Formex http://www.dorex.ru/?projects&formex (очень часто встречается в нестандартных конфигурациях и внешних обработках к 1С). На версии wine 1.0.9 объект внешней компоненты formex.dll "Дерево+Таблица" перестал корректно отображаться. На 1.0.7, 1.0.8 отображается корректно.
Created attachment 833 [details] Тестовая обработка к 1С 7.7 + formex.dll
Не работает ставка картинки, возможно из-за хака к Компасу.
Created attachment 1035 [details] SuperGrid (исходники и тестовое приложение) Возможно это поможет в решении проблемы. Исходников formex в публичном доступе нет, однако они входят в состав ВК 1С++ версии 2.0.3.7 (formex и 1c++ в одном флаконе) со свободным доступом к исходникам, исследование последних показало что объект Дерево+Таблица основывается на разработке SuperGrid http://www.codeproject.com/KB/combobox/supergrid.aspx В архив SuperGrid входят исходники и скомпилированное независимое приложение. Баг с отрисовкой иконок в 1.0.9 (и 1.0.10) в нем проявляется так же как и в 1C+FormEx.
Выложил патч. Проблема была в listview контроле, все иконки которого отрисовывал родитель. Во время отрисовки родитель вызывает LISTVIEW_GetItemMetrics, чтобы проверить куда вставлять текст, но listview ничего не знает, о том что было нарисовано не им, и возвращает неверное положение текста. Поэтому и получалась такая каша. К сожалению эта проблема была и в версии wine 1.0.8. Просто там были хаки, устанавливающие постоянное смещение для текста listview контрола. Запуск SuperGrid сразу выявит это. Решение заключается в доработке контрола, чтобы он начал реагировать на отрисовку родителя. Там в структуре LVITEM есть поле iIndent, в которое родитель заносит смещение от левого края. Теперь оно обрабатывается корректно и положение текста возвращается LISTVIEW_GetItemMetrics с учетом отрисовки родителя. Правда, еще возможны некоторые незначительные проблемы с этим контролом. Уж больно он сложный. Багу надо протестировать на приложении SuperGrid, и повторно проверить #3214 и #571, т.к. в ходе решения пришлось откатить старые хаки.
В 1.0.9-40/17 заработало корректно. В 1С тоже. Действительно, сейчас стало даже лучше чем в 1.0.8 Большое спасибо за исправление.
Извиня(In reply to comment #5) > В 1.0.9-40/17 Извиняюсь, 1.0.9-41/17
eter41\eter17 Принято.
Возник конфликт с новыми изменениями в pure. откатил патч: commit d1b35eb3d636223f8d232f54319007dfe9577d54 Author: Ilya Shpigor <shpigor@etersoft.ru> Date: Fri Feb 6 11:58:56 2009 +0300 comctl32: Some changes in listview control for the icons indent correct calculation (eterbug #2731 #571 #3214) Приложил исправленный, но возможно, что в чём-то ошибся. Требуется проверить не появилась ли снова бага, а также похожие баги #571 #3214
Необходимость в этом патче отпала - проблема решилась в оригинальном wine. На всякий случай выслал revert.
Для тех, кто не пользуется багзиллой или не умеет пользоваться групповым редактированием при поиске, закрываем задачи, которые они должны были принять.