| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > Прозрачный фон иконок на Рабочем Столе |
| Автор: JusTalionis 25.9.2006, 16:57 |
| и как это сделать в VB? ЗЫ: для Win9X разумеется; (XP сама по себе это умеет.) |
| Автор: amt 26.9.2006, 21:34 |
| А ты где-нибудь искал? Я где-то это видел. Кто-то выкладывал пример, вот только не помню - то ли ехе-ник, то ли код. Поищи на форуме и в инете. |
| Автор: JusTalionis 27.9.2006, 10:56 |
| На Винграде искал, причем в первую очередь! Но по ключевому слову "прозрачный" не нашлось ничего. В Нете искал - нашлось только куча самописных утилит, которые делают это. Размер примерно в 20К, т.е. чё-то небольшое - типа запуска API может быть? Если код у кого есть - поделитесь, плизззз! А екзешник мне как-то никчему, - в лом его ломать |
| Автор: ~FoX~ 28.9.2006, 08:38 | ||||
| Идея такова: Поверх картинки на рабочем столе лижит ListView на котором собственно иконки и держуться.... Получаем хэндл этого диста и шлем ему месагу о смене цвета на нейтральный Код модуля:
Код формы:
Если чесно мне не удалось заставить правильно работать этот код, у меня цвет становился кислотно зеленым, но думаю это не большая проблема, просто гдето с константами напутал...Но общая идея верная, так что дерзай.....Удачи. Хотя этот код перенесенный с рабочего кода делфи... |
| Автор: JusTalionis 28.9.2006, 13:51 |
| Пасиб, попробую покрутить это дело; если получится, отпишу. ЗЫ: Отдельное БОЛЬШОЕ СПАСИБО за комменты в коде!!! |
| Автор: JusTalionis 29.9.2006, 10:47 | ||||
| Вторая часть марлезонского балета. Проверил: действительно, цвет фона устанавливается зеленым, и причем только на тех местах, которые были закрыты формой или чем-нибудь - то есть апдейт не происходит. Однако то, что этот цвет вообще меняется, показывает, что доступ к ListView все-таки получен правильно. Очевидно, "сообщение" на изменение цвета и апдейт посылается неверно. Попробовал поменять значение CLR_NONE и "магические числа" - но цвет все равно не менялся. Где могла бы быть ошибка? Цвет посылается через lParam. Я предположил, что в Declare перед ним пропущено ByVal, и вставил его. Компилятор немедленно выдал ошибку "несовпадение типов". Учитывая, что через lParam передаются числа, я установил ему As Long (вместо As Any). И вот тогда цвет начал меняться! В конечном счете, код получился таким:
и
Но апдейт все равно не делается!!!! Я не мог найти, почему. Проверил значения col - оба равны единице. Не знаю что она означает, но в моем дилетантском понимании, отсутствие ошибки обычно индицируется нулем. Друзья, помогайте, кто знает! До победного осталось чуть-чуть |
| Автор: JusTalionis 29.9.2006, 18:27 | ||||||
Я исходил не из типа числа, а из типа, который хочет функция (а они почти все требуют Long)
А это какой такой? Вот что говорит МСДН про апдейт:
Буковок много! И все незнакомые! Еще раз и по-русски Попробуй в первом параметре передать 0, пробовал по-всякому, и нули, и единицы, - нифига. или в цикле проапдейтить все элементы листа. Количество итемов тебе вернет LVM_GETITEMCOUNT А его сам неужели проапдейтить нельзя? |
| Автор: ~FoX~ 30.9.2006, 11:51 | ||||
Ну примерный перевод: Это сообщение обнавляет элимент listview-а. Если контрол имеет вид список и стиль АВТОУПОРЯДОЧЕНИЯ, эта макрокоманда заставляет контрол переупорядочить списк. Вы можете посылать это сообщение явно или, используя макрос ListView_Update. Под рукой нету компилятора поэтому проверить не могу:
Примерно так:
А в объявлении функции оставить as Any.....Ну вобщем то не морочься по этому поводу Вот тут в голову пришло: ListView не имеет собственного апдейта...но т.к. он является наследником TWinControl (или как там базовые классы обозначаются в ВБ) можно использовать месагу UpdateWindow.... |
| Автор: JusTalionis 2.10.2006, 14:29 |
| Ну не верится просто, чтоб собственного апдейта не было!.. Билл конечно Гейтс, но не настолько же!.. Оказалось, есть какие-то, которые выстраивают значки то ли по алфавиту, то ли еще как, на других эксплорер "выполнил недопустимую операцию" короче, я чуть весь Рабочий Стол себе не порушил Но почему-то не делает его под режимом "показывать стол как веб-страницу". В этом минус подобных шаманских методов: никогда не знаешь, где именно они перестанут работать А вот про наследование - оч интересная мысль! Кто-нибудь может практический код написать? |
| Автор: cardinal 3.10.2006, 00:42 |
| Модератор: Прикольные у вас тут дискуссии. Как добьетесь нужного результата напишите, пожалуйста, статейку для FAQ'a. |
| Автор: ~FoX~ 3.10.2006, 08:19 |
| cardinal, Да без проблем |
| Автор: ~FoX~ 4.10.2006, 07:51 | ||
Гмм.....не хочиться тебя расстраивать, но это не является апдейтом.....
|
| Автор: ~FoX~ 4.10.2006, 10:37 | ||||
| Небольшие ковыряния привели меня к выводу, что в то время как в ключен актив дисктоп, поверх нашего SysList-a лежит еще одно полноэкранное приложение и манипулировать нужно уже им.... А как это делать я пока не знаю Вот что вышло у меня при отключенном АД: Модуль:
Кнока
|
| Автор: JusTalionis 4.10.2006, 13:23 | ||
~FoX~:
Кста, попробовал твой вариант с перерисовкой всех итемов. Твой код без изменений, сработал сразу же! Но, к сожалению, в "режиме веб-страницы" так же точно - не апдейтит. Твой сегодняшний код тож попробую; что наблюдается - отпишу. cardinal: По этой теме ФАК написать не могу, так как сам еще толком не понимаю, но даже и найденный вариант пока еще - "шаманство": то есть, как работает в деталях не ясно, поэтому не может быть рекомендовано другим, так как надежно не известно, заработает ли у них как надо. Но могу предложить в ФАК два других своих поста: http://forum.vingrad.ru/index.php?showtopic=106860 и http://forum.vingrad.ru/index.php?showtopic=104868 Изложенное там проверено мною лично на различных машинах. |
| Автор: ~FoX~ 4.10.2006, 14:14 | ||
Он не совсем апдейтит, тоесть он сначала делает этот самы SETWORKAREAS, а уже он в свою очередь вызывает редрав и апдейт. А вот с актив дисктопом надо разбираться, там все сложнее, точнее принцип то то т же, но вот чем там сверху накрывается этот лист я пока не разобрался...Просто пока времени нет, может на днях займусь. З.Ы. За фак не боись, я уже накатал небольшую статейку, и Кардиналу отписал...Если хочешь могу скинуть тебе на почитать...Может ты чем ее дополнишь. |
| Автор: cardinal 4.10.2006, 23:28 |
| ~FoX~, я тебе отписал. JusTalionis, посмотрю. Пока напряг со временем, так что не торопитесь... |
| Автор: JusTalionis 6.10.2006, 11:00 | ||||
| ~FoX~ Проверил твой код. Перерисовка значков (как уже писал) работает, а этот код, хотя и "выглядит красивше", но не действует:
А я и не тороплюсь: посты ведь никуда с форума не денутся ...без ведома модераторов |
| Автор: cardinal 6.10.2006, 22:20 |
| ~FoX~, в какой раздел FAQ'а лучше думаешь твою статью вставить? |
| Автор: ~FoX~ 7.10.2006, 10:01 |
| Думаю либо в раздел операционная система либо статьи...Наверное лучше в статьи, потому что рабочий стол это частный случай работы с чужими контролами. |
| Автор: cardinal 7.10.2006, 14:23 |
| http://vingrad.ru/VB-ART-003067 Подредактирую потом... |
| Автор: JusTalionis 16.10.2006, 15:07 |
| Всем добрый день, дорогие друзья! Позвольте вас познакомить с моей прогой, о которой я так ломал здесь копья http://igrocvet.ru/soft/A-Wallp.zip (она же - из топика о временном файле http://www.forum.vingrad.ru/index.php?showtopic=103664&view=all ) Собственно, прога была готова уже давно, но я никак не мог найти, где ее выложить (наверное и там недолго задержится). Дарю всем безвозмездно! Кому не в лом, проверьте, нормально ли она у Вас будет работать; если что, отпишитесь, плиииииз!.. ~FoX~: На ActiveX - плюнул!.. ведь что-ж делать, нету идеального на свете!.. хотя, хотелось бы Апдейт сделал не перерисовкой всех иконок, как ты, а через свое "неправильное" 4161. Вроде работает. Еще раз, всем помогавшим - БОЛЬШОЕ СПАСИБО! |