Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Docking панели и глюк с прорисовкой


Автор: lukas 4.7.2010, 13:10
Здравствуйте, такая проблема с докинг панелями (DragKing = dkDock, DragMode = dmAutomatic):

Все отлично работает, но в висте и севене при перемещении этих док панелек происходит бурная перерисовка (подозреваю что рамка рисуется прямо на рабочем столе). В XP все нормально, а вот в новых системах переносить панельки невозможно. 

Как избавится от этого? Вот например в Delphi 2006 док панельки перемещаются в виде полупрозрачного прямоугольника. Как замутить нечто похожее?


P.S. Неродные компоненты для делфи не предлагать! 

Автор: DarkProg 4.7.2010, 18:49
Я так подозреваю что это из-за изменения в графической оболочке виндоуса и самих процедур перетакивания.
Заметил, эту ерунду и я, потому как работаю над весьма большим проектом где очень многое весит на Drag'n'Drop и сначала я и консультирующий меня человек решили, что косяк в том что используем слишком много ОЗУ, но после внушительной оптимизации ничего не нашли, а при перекидывании проекта на XP увидели что всё норм.

Метод борьбы не нашли и по сей день и пока что оставляем как есть.
Вот что собственно я нарыл.

Автор: RomanEEP 4.7.2010, 19:19
http://edn.embarcadero.com/article/33446
вместо  TDragDockObjectEx можно создавать прозрачную форму - будет выглядеть как в Delphi!

Автор: lukas 4.7.2010, 20:44
Цитата(DarkProg @  4.7.2010,  18:49 Найти цитируемый пост)
Я так подозреваю что это из-за изменения в графической оболочке виндоуса и самих процедур перетакивания.
Заметил, эту ерунду и я, потому как работаю над весьма большим проектом где очень многое весит на Drag'n'Drop и сначала я и консультирующий меня человек решили, что косяк в том что используем слишком много ОЗУ, но после внушительной оптимизации ничего не нашли, а при перекидывании проекта на XP увидели что всё норм.


Нет тут никакой магии, все начинается с такой строчки:

Код

GetDC(0) // 


Рисовать по рабочему столу в висте и севене вообще нельзя, это и приводит к таким фантастическим вещам.

Вот написал модуль, перетаскивает как полупрозрачные окошки. Вернее собрал из того что было в нете. Надо создать в событии onStartDock объект класса TDragDockObjectCep.

Но все равно, не идеально работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)