![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 14 Всего: 58 |
Доброго времени суток!
Делаю фон в ListView, перекрывая WndProc:
Все работает отлично, но картинка заполняет "плиткой" все пространство ListvView. Вопрос такой: можно ли (и если да, то как) сделать так, чтобы картинка "растягивалась" на весь ListView? (как пример - "растягивание" обоев рабочего стола, если они меньше установленного разрешения экрана) Заранее спасибо! Это сообщение отредактировал(а) Keeper89 - 2.4.2009, 21:04 |
|||
|
||||
Alix |
|
|||
![]() L45 ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 4.5.2005 Где: Pskov/Spb Репутация: 3 Всего: 23 |
Если не ставить флаг LVBKIF_STYLE_TILE, этого не происходит?
Еще замечание из MSDN по поводу LVM_SETBKIMAGE:
Кстати, у меня этот код не работает :( Хотя sendmessage как и надо возвращает не ноль. Это сообщение отредактировал(а) Alix - 3.4.2009, 12:27 -------------------- Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой High tech. Low live. (с) Gardner Dozois |
|||
|
||||
Keeper89 |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 14 Всего: 58 |
Кроме этого кода надо еще обрабатывать WndProc:
Нет, в том то и дело, но если у вас получится, скажите ;) По поводу MSDN - читал, но слышал, что можно не писать эти функции. Это сообщение отредактировал(а) Keeper89 - 3.4.2009, 18:38 |
||||
|
|||||
Alix |
|
|||
![]() L45 ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 4.5.2005 Где: Pskov/Spb Репутация: 3 Всего: 23 |
Проблема как я понимаю в VCL окружающем ListView. Есть два решения: использовать безвэцээльный SysListView32, либо сделать так:
Так оно работает и замечательно растягивается. -------------------- Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой High tech. Low live. (с) Gardner Dozois |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 14 Всего: 58 |
Так, к сожалению, картинка рисуется поверх элементов ListView, а не в качестве фона... Это сообщение отредактировал(а) Keeper89 - 3.4.2009, 22:18 |
|||
|
||||
Alix |
|
|||
![]() L45 ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 4.5.2005 Где: Pskov/Spb Репутация: 3 Всего: 23 |
Что если их самоотрисовывать? Причем может даже в самом обработчике WM_PAINT
-------------------- Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой High tech. Low live. (с) Gardner Dozois |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 14 Всего: 58 |
||||
|
||||
Rrader |
|
|||
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 29 Всего: 191 |
Эти функции нужно вызывать обязательно. По теме - можно посмотреть, как это делает ListView проводника, но это будет довольно сложным делом. Отправная точка - придется декомпилировать и смотреть обработку NM_CUSTOMDRAW у родителя - занятие не для слабонервных... Одним глазом я взглянул на список на Рабочем столе, изучая IActiveDesktop, ListView при смене обоев и их опций вообще не получает LVM_SETBKIMAGE + не является OwnerDraw-списком. Еще вариант - можно использовать Bitmap - самостоятельно его расширять и передавать дескриптор в режиме LVBKIF_SOURCE_HBITMAP. Это сообщение отредактировал(а) Rrader - 4.4.2009, 15:41 |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 14 Всего: 58 |
Использовал, но результат тот же. Кроме того, если подставить флаги LVBKIF_STYLE_NORMAL, LVBKIF_SOURCE_HBITMAP ничего не работает, поэтому вариант насчет масштабирования картинки пока неясен. |
|||
|
||||
Rrader |
|
|||
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 29 Всего: 191 |
![]()
Тогда можно взглянуть, как это сделали ребята из MS. Если время будет, я посмотрю... |
|||
|
||||
Alix |
|
|||
![]() L45 ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 4.5.2005 Где: Pskov/Spb Репутация: 3 Всего: 23 |
Есть мнение, которое я увидел на многих форумах, что проблема в VCL-обертке. В действительности мне тоже не удалось заставить работать ни с каким флагом кроме TILE. Более того, любой поиск по SETBKIMAGE на русскоязычных и зарубежный страничках приводит к примеру в котором стоит TILE. Как будто все знают о проблеме, что ничего другое не работает, но тайл всех устраивает по самое нехочу. Попробую на днях с самостоятельным созданием окна SysListView, вдруг сработает ![]() Хороший вопрос. Это я погорячился - в который раз путаю ListView и ListBox ![]() -------------------- Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой High tech. Low live. (с) Gardner Dozois |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 14 Всего: 58 |
+1 Вызываем. З.Ы. Есть такой замечательный компонент как Mustang EasyListview, где есть свойство BackGround с возможностью вставки картинки. Но как там это реализовано, найти в коде не могу. З.Ы.2. Нашел вот такой способ: http://www.delphi3000.com/articles/article_4245.asp?SK=, буду думать как сделать без дополнительного компонента, просто переопределив события. Это сообщение отредактировал(а) Keeper89 - 4.4.2009, 19:45 |
|||
|
||||
Alix |
|
|||
![]() L45 ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 4.5.2005 Где: Pskov/Spb Репутация: 3 Всего: 23 |
где-то видел, что в поздних версиях delphi (2009?) у этого компонента появился проперти для установки картинок. В 2009 я его не нашел. Кстати, приаттачь исходники этого компонента, посмотрим. -------------------- Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой High tech. Low live. (с) Gardner Dozois |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 14 Всего: 58 |
||||
|
||||
Rrader |
|
|||
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 29 Всего: 191 |
LVM_SETBKIMAGE поддерживает всего два состояния - либо TILE, либо не TILE ![]() Приложил пример в аттач Присоединённый файл ( Кол-во скачиваний: 28 ) ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |