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: | Связано с: | 571, 3214 | |
Дата напоминания: | |||
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 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. Для тех, кто не пользуется багзиллой или не умеет пользоваться групповым редактированием при поиске, закрываем задачи, которые они должны были принять. |