Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка в Windows Common Controls 6.0 или руки? [D6, WinXP]


Страницы:   1 2

DVM ©   (2003-04-23 22:34:00) 

Обращаюсь к знатокам WinApi и Windows Common Controls 6.0!

Недавно столкнулся с неправильным, или по крайней мере странным поведением SysListView32. После долгих изысканий я, наконец-то, научился делать Drag"n"Drop для ListView, созданного на WinApi. Все нормально работало, пока я не решил подцепить к своей программе манифест, для придания элементам управления XP-шного вида.

Манифест такой:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32" publicKeyToken="6595b64144ccf1df" name="Microsoft.Windows.Shell.ListViewDemo" version="6.0.0.0" processorArchitecture="*"/>
<description>Sample MSDN code for Tree View Drag and Drop</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls" version="6.0.0.0"
language="*"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
/>
</dependentAssembly>
</dependency>
</assembly>

Все заработало, но ListView стал не совсем правильно создавать образ перетаскиваемого итема.
Вообще-то это делаю я так:

hDragImageList := ListView_CreateDragImage(hListView, iPos, ptImage);
в обработчике LVN_BEGINDRAG. (это обычный метод)
далее манипулирую ImageList (ImageList_BeginDrag,ImageList_DragEnter,ImageList_DragMove, ImageList_EndDrag, ImageList_DragLeave...), но дело не в ImageList.

После(именно после) подключения манифеста при перетаскивании в изображении перетаскиваемого итема значок смещен относительно подписи влево точек этак на 20 (все выглядит криво). Без манифеста все нормально. Сломал всю голову, но ничего не придумал. Ведь у ListView_CreateDragImage нет больше никаких параметров.

Т.е. с новыми Common Controls, а именно с SysListView работа чем то отличается. Но чем? Кто знает? Может кому попадались какие то статьи и пр.

Очень буду благодарен за помощь!


DVM   (2003-04-24 16:37:00) [21]

Да, но моя программа не использует VCL, и TCustomListView тут ни при чем. Проблема где то глубже. Но все равно спасибо. Хоть что-то.

Кто нибудь сталкивался с подобным?????????????????


AlexKa   (2003-04-24 15:18:00) [22]

> Есть такой глюк.
> Как лечить:
> В ComCtrls.pas ищем
> procedure TCustomListView.UpdateColumn(AnIndex: Integer);
> в D6 это 15046 строка.
> Находим место:
> if FImageIndex <> -1 then
> fmt := fmt or LVCFMT_IMAGE or LVCFMT_COL_HAS_IMAGES;
> Исправляем на:
> if FImageIndex <> -1
> then fmt := fmt or LVCFMT_IMAGE or LVCFMT_COL_HAS_IMAGES
> else mask := mask and not (LVCF_IMAGE);
> И все. Вообще же с темами XP есть еще кое какие проблемы,
> ну например, не рисуется градиент в PageControl.
> Более менее нормальную поддержку Themes API обещают только
> в D7, где то к концу лета.
> Код приведен, естественно, для D5,D6.


DVM   (2003-04-23 22:45:00) [23]

Вот как это выглядит:

http://www.dm.rsl.ru/ListView_bug.jpg

Без манифеста все ок:

http://www.dm.rsl.ru/ListView_normal.jpg

Только на картинках не видно указателя мыши, но, я думаю все понятно.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо