Bug 2731

Summary: 1С 7.7: Регресс отображения объекта дерево+таблица внешней компоненты formex.dll
Product: WINE@Etersoft Reporter: Антон Азанов (Djelf) <aae>
Component: ОбщееAssignee: Илья Шпигорь <shpigor>
Status: CLOSED FIXED QA Contact:
Severity: minor    
Priority: P4 CC: baraka, kondratyuk, lav, night, shpigor, vitperov, vostok
Version: 1.0.9   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on: 571, 3214    
Bug Blocks: 760, 3305    
Attachments: Скришоты в WinXP, Wine 1.0.8, Wine 1.0.9
Тестовая обработка к 1С 7.7 + formex.dll
SuperGrid (исходники и тестовое приложение)

Description Антон Азанов (Djelf) 2008-10-25 18:10:16 MSD
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 отображается корректно.
Comment 1 Антон Азанов (Djelf) 2008-10-25 18:11:22 MSD
Created attachment 833 [details]
Тестовая обработка к 1С 7.7 + formex.dll
Comment 2 Анатолий Лютин 2008-10-27 17:54:29 MSK
Не работает ставка картинки, возможно из-за хака к Компасу.
Comment 3 Антон Азанов (Djelf) 2009-01-27 02:12:38 MSK
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.
Comment 4 Илья Шпигорь 2009-02-06 13:17:25 MSK
Выложил патч.

Проблема была в listview контроле, все иконки которого отрисовывал родитель. Во время отрисовки родитель вызывает LISTVIEW_GetItemMetrics, чтобы проверить куда вставлять текст, но listview ничего не знает, о том что было нарисовано не им, и возвращает неверное положение текста. Поэтому и получалась такая каша.

К сожалению эта проблема была и в версии wine 1.0.8. Просто там были хаки, устанавливающие постоянное смещение для текста listview контрола. Запуск SuperGrid сразу выявит это.

Решение заключается в доработке контрола, чтобы он начал реагировать на отрисовку родителя. Там в структуре LVITEM есть поле iIndent, в которое родитель заносит смещение от левого края. Теперь оно обрабатывается корректно и положение текста возвращается LISTVIEW_GetItemMetrics с учетом отрисовки родителя.

Правда, еще возможны некоторые незначительные проблемы с этим контролом. Уж больно он сложный.

Багу надо протестировать на приложении SuperGrid, и повторно проверить #3214 и #571, т.к. в ходе решения пришлось откатить старые хаки. 
Comment 5 Антон Азанов (Djelf) 2009-02-13 17:56:36 MSK
В 1.0.9-40/17 заработало корректно. В 1С тоже. Действительно, сейчас стало даже лучше чем в 1.0.8 
Большое спасибо за исправление.
Comment 6 Антон Азанов (Djelf) 2009-02-13 17:57:43 MSK
Извиня(In reply to comment #5)
> В 1.0.9-40/17
Извиняюсь, 1.0.9-41/17
Comment 7 Денис Баранов 2009-02-13 17:59:32 MSK
eter41\eter17
Принято.
Comment 8 Виталий Перов 2009-06-05 20:11:38 MSD
Возник конфликт с новыми изменениями в 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
Comment 9 Илья Шпигорь 2009-06-22 14:42:11 MSD
Необходимость в этом патче отпала - проблема решилась в оригинальном wine. На всякий случай выслал revert.
Comment 10 Vitaly Lipatov 2014-09-11 18:32:55 MSK
Для тех, кто не пользуется багзиллой или не умеет пользоваться групповым редактированием при поиске, закрываем задачи, которые они должны были принять.