|
Splitter: некоторые проблемы с рисовкой разделителя.
|
|||
---|---|---|---|
#18+
Ну-с, вернемся к теме сплиттера. Взаимное положение ListView/Treeview Сделал тестовый проект с двумя вертикальными разделителями. (прилагается) Делал аккуратно и в тесте, поэтому несколько прошлогодних глюков нашел и исправил: 1) "потеря фокуса" (Hook) была сделана неаккуратно. При щелчках одновременно/последовательно на разделителе правой, потом левой кнопкой мыши старый вариант вылетал. Исправил. 2) Некот. неточности с курсором мыши - исправил. В целом весьма неплохая конструкция получилась считаю. (Там Twip-ы практически везде, лучше бы Pixel-и, но неохота сильно править старые коды -лепил раньше все в Twip, поэтому заранее подогнал). Но 2 проблемы пока вижу: I. Еcли самая правая панель цвета скажем Application WorkSpace, то сплиттера не видно: Можно заменить: cSplitter Код: vbnet
на скажем Код: vbnet
где MyBrush выбирается из Combobox и при нек. вариантах будет виден (т.е. палка окрашивается в приемлимый иногда другой цвет). Но сплошных палок не хочу. Хочу классический как на верхней картинке (CreatePatternBrush) . Может можно его как-то цвет заставить менять что-ли в завис. от фона? Проблему понять не способен. Но так тоже не дело. (В оригинальной проге User может выбрать любой цвет правой панели!!!) II. Если в момент нажатия на сплиттер например нижняя часть скрыта другим окном, то палка рисуется неправильно и глючит. Чем полечить? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2011, 19:22 |
|
Splitter: некоторые проблемы с рисовкой разделителя.
|
|||
---|---|---|---|
#18+
Если (1) между treview/listview (левый разделитель) использовать "CreatePatternBrush" (не solid, как на картинке) (2) между listview/панель справа (правый разделитель) использовать непрерывную перерисовку (т.е. без палки вообще: m_cSplitLevel1.FullDrag = True) Это очень дурной тон? (2)между listview/панель мотивирую следущим. В правой панели находится картинка. Сама картинка (но не элементы панели) перерисовывается (вписывается в панель) в момент MouseUp, ибо непрерывная перерисовка понятно слишком жрет ресурсы и неразумна. Но если делать разделитель/палку с перерисовкой всего по MouseUp, как было хотел, то "прыг картинки" выглядит не очень, ибо 1) скачкообразное смещение левого угла - смещается. 2) и сразу уменьшение/увеличение изображения. Если картинка "плавно едет", а в момент отпускания мыши "уменьшение/увеличение", то смотрится гораздо приличней. + это полностью решает "Проблема #1" с невидимой правой палкой, хотя остается левая палка, которая может-таки быть "задвинута" в картинку (код перерисовки это "грамотно допускает"). Плюс ListView это таблица и хорошо бы по логике сразу видеть, какие поля открываются/закрываются. (1)между treview/listview мотивирую следущим. Мне так нравится. Listview при непрерывной правой перерисовке дает таки слишком много "мелькалки" (видимо за счет автоматической работы левого внутреннего разделителя+у меня использован доп. код который поддерживает именно левую панель с картинкой постоянной ширины, а не правую как было бы автоматом). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2011, 10:40 |
|
Splitter: некоторые проблемы с рисовкой разделителя.
|
|||
---|---|---|---|
#18+
Дмитрий77, по поводу первой проблемы: "виновата" математика. Тёмно-серый цвет фона - это RGB(128, 128, 128). Накладывается (применяется XOR) кисть "шашечки", состоящая из чёрных RGB(0, 0, 0) и белых RGB(255, 255, 255) точек, в итоге получается "шашечка" из тёмно-серых RGB(128, 128, 128) и сложно отличимых для невооружённого глаза от соседей менее тёмно-серых RGB(127, 127, 127) точек. Потенциальные выходы - а) другие цвета для кисти (SetBkColor, SetTextColor), б) другая операция наложения (например, AND; но это усложнит перерисовку, т. к. двойной XOR приводит к исходному состоянию), в) непрерывная перерисовка. По поводу глюка с отрисовкой при перекрытии другим окном: скорее всего, аккуратно воткнутый в нужное место DoEvents решит. В моей "песочнице" вроде такого не наблюдается. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2011, 16:41 |
|
Splitter: некоторые проблемы с рисовкой разделителя.
|
|||
---|---|---|---|
#18+
БенедиктПо поводу глюка с отрисовкой при перекрытии другим окном: скорее всего, аккуратно воткнутый в нужное место DoEvents решит. Да, как всегда правы: Код: plaintext
БенедиктПотенциальные выходы - а) другие цвета для кисти (SetBkColor, SetTextColor), б) другая операция наложения (например, AND; но это усложнит перерисовку, т. к. двойной XOR приводит к исходному состоянию), . Пока не пытался играться, но может подскажете как сделать. Фон картинки постоянный, но юзер может его задать. Предоставить задавать еще и "другие цвета для кисти" юзеру - это уж слишком. Иными словами, глядя на PictureFon.background, программа автоматом должна назначить цвет палки. Как бы это воткнуть? Бенедиктв) непрерывная перерисовка.. Я не поленился вставить картинку в тестовый проект (приложен), посмотреть/попереключаться через Combobox очень легко. Здесь нужны уже ваши "эстетическикие" советы, ваши рассуждения про то как юзер чего воспринимает не забыл. Вы наверно согласитесь что справа лучше "непрерывно", иначе картинка прыгает. Также мой предыдущий топик. Ключевой вопрос: а не дурной ли тон использовать два разношерстных сплитера. Но опять же, если слева сделать непрерывно, то при перерисовке реальный ListView с данными будет "стробировать" сильно, и уж больно палка нравится. И по поводу самой перерисовки, что можно улучшить..? У меня перерисовывается. 1) скачком по MouseUp обоих сплиттеров. 2) При Form_Size -но применен спец. таймер. a) Сделайте картинку широкой, задвиньте форму влево резко, чтоб потянула картинку б) А потом тоже самое но медленно. Таймер сейчас работает по принципу: пока очень часто долбите, перерисовывать не буду, успокоитесь - нарисую. Можно его конечно сделать: пока долбите, буду перерисовывать но не чаще чем интервал таймера. Плюс мне не очень нравится, как появляется картинка по кнопке View->Preview (верхнее меню). ... ну по поводу приложенного примера...устранил пока несколько глюков, в тесте радуешься, а вставил конструкцию в прогу - бывает и ключом по голове: 1) переинициализацию правого сплиттера заменил "спящим режимом", Listview при View->Preview неважнецки ведет себя при инициализации сплиттера (перемаргивает). 2) какой идиот догадался вставить в код сплиттера Код: plaintext
3) при нажатой правой кнопке и выходе за пределы палки надо убирать курсор мыши - разделитель. Сначала было сделал Код: plaintext
Код: plaintext
Ну, т.е. любая критика по улучшению сией конструкции принимается. P.S. Да, Бенедикт, сорри, как всегда не в тему, с дитерингом нет идей? Конвертация картинки Цветная >> 2 цвета(ч/б) с сохранением тонов Я там вроде докопал до причины излишне высокого качества: ulHTPatternSize , но страшные слова про драйвер принтера (а именно принтера мне точно не надо) меня испугали. Никак в эту GDIINFO влезть нельзя? C Ghostscript кстати не влезали глубоко? Оттуда никак функции диттеринга через API достать нельзя. libtiff/jpeg-lib... Меня бы это возможно устроило, знать бы как... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2011, 01:54 |
|
Splitter: некоторые проблемы с рисовкой разделителя.
|
|||
---|---|---|---|
#18+
БенедиктПотенциальные выходы - а) другие цвета для кисти (SetBkColor, SetTextColor), Это вообще не выход. Я попробовал. Ну да, SetBkColor и SetTextColor устанавливают цвет шашечек, красить можно в любые цвета. Но при попадании "на тот фон" эффект "исчезания" будет такой же. Кстати аналогично: Combobox-> 3DFACE -корректное поведение Combobox-> 3DHILITE - палка "пропадает" В чем-то там другом собака, м.б. в ваших XOR, но это я не знаю чего делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2011, 19:53 |
|
Splitter: некоторые проблемы с рисовкой разделителя.
|
|||
---|---|---|---|
#18+
БенедиктПотенциальные выходы - ... б) другая операция наложения (например, AND; но это усложнит перерисовку, т. к. двойной XOR приводит к исходному состоянию) Я попытался играться с константами PatBlt, если заменить PATINVERT -> PATCOPY, область "заштриховывается сплиттером", т.е. предыдущий фон не восстанавливается при перемещении сплиттера. М.б. где-то близко... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2011, 15:47 |
|
|
start [/forum/topic.php?fid=60&msg=37268113&tid=2158693]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 129ms |
0 / 0 |