Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.07.17;
Скачать: [xml.tar.bz2];

Вниз

Ошибка в Windows Common Controls 6.0 или руки?   Найти похожие ветки 

 
DVM   (2003-04-23 22:34) [0]

Обращаюсь к знатокам 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-23 22:45) [1]

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

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

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

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

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


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

> Есть такой глюк.
> Как лечить:
> В 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-24 16:37) [3]

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

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


 
DVM   (2003-04-25 08:58) [4]

Ауууу-людииии! Неужели не у кого не возникала проблема? Все пишут только на VCL/MFC? И только для <=XP


 
Delfin   (2003-04-25 13:34) [5]

Привет DVM!
Честно говоря я не совсем разобраз, что у тебя именно не так, но если это что-то с шрифтом, то дело в языке ресурса, который ты используешь в своем модуле. Хотя это только недалекое предположение :(
Удачи.


 
DVM   (2003-04-25 13:36) [6]


> AlexKa

написанное выше не помогло даже для ListView созданного на VCL.
(само собой модуль после исправлений я перекомпилировал). Может что еще надо где исправить?


 
DVM   (2003-04-25 13:37) [7]


> Delfin

Посмотрите на картинки. При перетаскивании значок сдвинут влево относительно надписи под ним в режиме ICON


 
REA   (2003-04-25 15:01) [8]

Может пропатчить эти контролзы, а может плюнуть?


 
DVM   (2003-04-25 16:14) [9]


> Может пропатчить эти контролзы, а может плюнуть?

Чем пропатчить? А плюнуть нельзя, к тому же заставить работать можно, у Microsoft же в Эксплорере все работает как надо - все ровненько! Только вот как?

Я попробовал только что. Создал окно на Delphi 6, положил туда ListView, включил перетаскивание, подкючил манифест - криво работает, убрал манифест - нормально.

Та же картина, если VCL не использовать.


 
REA   (2003-04-25 17:00) [10]

Ну значит в манифесте где-то что-то. Форматы манифестов этих читал?


 
DVM   (2003-04-25 17:06) [11]

Я этот манифест c сайта Microsoft-а взял. Должно быть все правильно. Все остальное работает то как надо. Только вот ListView, собака, глючит в одном единственном месте.


 
Shurik   (2003-04-27 04:33) [12]

А кто может сказать, что такое этот манифест?


 
DVM   (2003-04-27 12:58) [13]


> А кто может сказать, что такое этот манифест?

Это XML файл, кторый должен располагаться в том же каталоге что и программа и должен носить то же имя что и сама программа.
Proga.exe >>> Proga.exe.manifest
Или его можно затолкать в файл ресурсов приложения.

Образец манифеста написан выше.

Так значит никто с таким глюком не сталкивался?


 
Illusion   (2003-04-27 15:35) [14]

Странно... Никогда с таким не встречался. Если баг появляется при использования манифеста, то значит проблемма может возникать в двух случаях:
бажный манифест, который сбивает настройки шрифта иконки (уровнения и сам шрифт сбивает), или же из-за манифеста подглючивает система. Во втором случаии тебе ничего не поможет, разве что запустить программу в реалтайм режиме. Только это КРАЙНЕ не рекомендуется делать... переход в реалтайм режим - SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);
что это даст? Помимо максимального возможного использования ресурсов системы это даёт повышенную защищённость учатска памяти программы.
З.Ы. Если прога делает что-то грузящее проц, это убьёт всю систему нафих при запуске проги....


 
DVM   (2003-04-27 15:50) [15]


> Illusion

Проблема в том, что ListView в ListView_CreateDragImage итем рисует не так как должен. В оригинале значок по центру надписи, а в изображении перетаскиваемого итема - слева от центра.
Скриншоты вверху. Система не подглючивает. Манифест от Майкрософта.

Лююююдииии!
Все у кого Delphi 4, 5, 6, 7. Система - XP.

Попробуйте у себя выполнить следующее:

1. Возьмите пустую форму.
2. Положите туда ListView, ImageList.
3. Добавьте 2-3 итема с иконками (режим ICON).
4. Разрешите перетаскивание итемов. Ну хотя бы так, как это сделано в статье:
http://www.delphimaster.ru/articles/dragndrop/index.html
5. Положите в папку с проектом манифест и попробуйте в работе.

Итемы будут таскаться неправильно!!!



 
Illusion   (2003-04-27 16:06) [16]

Ну чтож... Тогда мой те совет - успокойся или забей на манифесте. Если это возможно.


 
Shurik   (2003-04-28 04:19) [17]

Я так понял, что манифест влияет на поведение контролов, так что ли? А зачем он вообще нужен?


 
DVM   (2003-04-28 09:26) [18]


> Shurik

Он указывает системе, что для данной программы надо использовать ComCtl32.dll version 6. Подробности на:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/CommCtls/Userex/cookbook.asp

Почему именно XML мне неизвестно.


 
Shurik   (2003-04-29 13:52) [19]

А этот самый ComCtl32.dll версии 6-й, он чем от предыдущих отличается, кроме визуалього стиля?


 
DVM   (2003-04-30 12:25) [20]


> А этот самый ComCtl32.dll версии 6-й, он чем от предыдущих
> отличается, кроме визуалього стиля?

http://msdn.microsoft.com



 
LEON   (2003-04-30 20:24) [21]

мне кажется, что
без манифеста прога использует ComCtrl32.dll версии 5.0 (или 5.1)

а с манифестом - 6.0
в 5-ой глюка нету, а в 6-ой есть


 
Proton   (2003-05-03 07:22) [22]

Дусается что выравнивание по правому краю берется от шрифта выстановенного для LV. Попробуй его изменить.


 
DVM   (2003-05-05 10:37) [23]


> LEON


> без манифеста прога использует ComCtrl32.dll версии 5.0
> (или 5.1)

Необязательно 5, может и 4, короче, какую найдет.

> Proton


> Дусается что выравнивание по правому краю берется от шрифта
> выстановенного для LV

Так это не выравнивание, "искривление какое-то". Вряд ли дело в шрифте. Microsoft Windows Explorer XP - шрифт у него тот же, что и у меня. Но подпись под перетаскиваемым значком по центру.

Люди у кого Delphi 7 и XP, посмотрите, там (в D7) этот баг есть? Может борландовцы что подправили?



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.07.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.009 c
1-55575
Nucl
2003-07-02 19:54
2003.07.17
Как принудительно вызвать появление хинта у контрола ?


14-55765
Dimka Maslov
2003-07-02 14:02
2003.07.17
ALC comes back


1-55654
CAHbI4
2003-07-04 13:49
2003.07.17
Поиск в TListView


14-55761
vuk
2003-07-02 20:34
2003.07.17
Вот я не понял...


14-55808
NailMan
2003-06-30 15:56
2003.07.17
Фрактальный генератор случайных чисел





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский