|
|
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Вот здесь обсуждался вопрос: /topic/740043&pg=1 Был предложен контрол Konst_Oneназывается он UpDown Было также упомянуто, что не удается придать ему XP/Vista стиль. Причину я нашел довольно быстро: я везде использую Common Controls 6 (глючные, как кто-то тут выразился), а они не поддерживают стили через манифесты. Если использовать Common Controls 5, то вопрос со стилями решается. Я не стал разводить полемику по этому поводу, не было времени, но сейчас думаю вернуться к данной теме. Тот контрол, бог с ним, но я использую всякие Listview/Treeview в большом к-ве и надо бы с ними разобраться. Т.е. для придания приложению правильных стилей мне надо заменить контролы на 5-ю версию. Вопрос с заменой на API я не рассматриваю, т.к. кодов много и это не тривиально. И в связи с этим несколько вопросов. 1) Существует ли удобный способ замены/преобразования? Т.е. понятно, что сначала добавлю \'5\', и когда все заменю, удалю \'6\'. Но меня смущает сам процесс замены отдельно взятого контрола, ибо он может быть сильно напичкан свойствами, можно конечно и на бумажку переписать, но долго и надо аккуратно, чтоб не упустить ничего. 2) Как правильно установить(и удалить) COMCTL32.OCX (и ей подобные) на произвольную систему (возможны XP/Vista/Win2003/2008,в перспективе Win7(но пока не рассматриваю) и любая комбинация x86/x64). Дело в том что с MSCOMCTL.OCX (6-я версия) я особо не парился, просто бухал в папку с программой при установке и все работало, при этом никаких глюков при установке и никакой самодеятельности на пользовательском компьютере. И это прекрасно прокатывает даже на x64-висте. А что касается COMCTL32.OCX то ей надо делать regsvr32, причем cmd на Vista x64 пришлось запускать "от Админа". Насколько я понимаю эти тонкости, мой инсталлятор итак всегда запускается из-под админа, но все же я задумался... Куда класть COMCTL32.OCX? В папку программы? Или в System32? Если в System32, то на x64 в System32 или в SysWOW64? И надо ли ее удалять? (если в System...?) А если она уже была до моей установки? И опять же надо ли делать regsvr32 /u (а вдруг была?) И не пошлет ли произвольная система мой инсталлер куда подальше с такими действиями? А вот ругань при установке мне меньше всего нужна... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2010, 04:46 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
В принципе поигрался с инсталлятором (Smart Install Maker) на тестовом приложении из одного exe: Есть 2 опции I. Файл 1) Путь извлечения 2) Если файл существует: Спросить/Спросить если новее/Заменить/Заменить если новее/Пропустить 3) Деинсталировать: ДА/нет II. ActiveX 1) Файл 2) Разрегистрировать при деинсталляции: ДА/нет Остановился на варианте: I. Файл 1) Путь извлечения =%SystemDir%\COMCTL32.OCX 2) Если файл существует:Пропустить 3) Деинсталировать: ДА II. ActiveX 1) Файл=%SystemDir%\COMCTL32.OCX 2) Разрегистрировать при деинсталляции: нет На x64 COMCTL32.OCX файл отправляется в SysWOW64, что наверно корректно. Возникают 3 ситуации: 1) COMCTL32.OCX уже был в %SystemDir% и был зарегистрирован: при установке ничего не меняется и пользуемся имеющимся файлом при деинсталляции опять ничего не меняется, т.е. COMCTL32.OCX не удаляется и не разрегистрируется,т.е. все остается как было. 2) COMCTL32.OCX уже был в %SystemDir% но НЕ БЫЛ зарегистрирован: при установке регистрируется имеющийся файл, им и пользуемся при деинсталляции COMCTL32.OCX не удаляется но остается зарегистрированным 3) COMCTL32.OCX НЕ БЫЛО в %SystemDir% при установке берется НАШ файл и регистрируется при деинсталляции наш COMCTL32.OCX физически УДАЛЯЕТСЯ, хотя регистрация и остается, но бесполезна за отсутствием файла. Вопросы все же по этой части остались: Если файл существует:Пропустить Опции "Спросить/Спросить если новее" меня не устраивают, это некрасиво и потом...передоверять юзеру ответ на вопрос с ответом на который сам сомневаешься... как то неправильно Опции "Заменить/Заменить если новее" ??? Когда я пытался так поступать с cdosys.dll, виста элементарно ругалась, но в том случае я просто в итоге отказался от установки cdosys.dll, т.к. оно обязано присутствовать на всех OS начиная с XP и правильный для каждой OS. Т.е. если "Заменить" то система со мной не поругается? А если "Пропустить", то не рискую нарваться на неправильную версию? (понятно, что случай, когда user взял файл Г.ocx и переименовал его в COMCTL32.OCX не рассматривается..) Разрегистрировать при деинсталляции: нет Скажем так, если я напишу "ДА", то моя прога при удалении удалит регистрацию существовавшую до ее установки. Как то неправильно А с другой стороны если я устанавливаю и регистрирую СВОЙ файл, то он удалиться, а регистрация останется, мусор в реестре... Я сам ненавижу когда чья-то прога при установке слишком много на себя берет, а при удалении не умеет "вынести за собой мусор" (если вообще умеет себя удалить, есть экземпляры которые вообще не делают uninstall, не обязательно вирусы). Хотелось бы конечно каких-то комментариев от тех кто на этом собак кушал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2010, 16:39 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
системные библиотеки обычно не требуют деинсталяции. чисти только папку со своей программой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2010, 11:00 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Существует ли удобный способ замены/преобразования?Открыть в текстовом редакторе *.vbp и заменить строку Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; mscomctl.ocx на Object={6B7E6392-850A-101B-AFC0-4210102A8DA7}#1.3#0; COMCTL32.OCX. В файлах *.frm заменить аналогичные строки в заголовках, а так же все строки типа MSComctlLib.TreeView на ComctlLib.TreeView. Это не решит все проблемы сразу, но по крайней мере сэкономит 90% времени. Если у вас используется тулбар с SubMenu, то их придется переложить на обычные менюшки, потому что у оригинального тулбара никаких субменю нет. Других архитектурных отличий нет, разве что у некоторых объектов отсутствуют некоторые редко используемые свойства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2010, 11:26 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Konst_Oneсистемные библиотеки обычно не требуют деинсталяции. чисти только папку со своей программой. Т.е. вы предлагаете: Код: plaintext 1. остается поверить Вашему опыту. А что ваш опыт говорит по поводу Код: plaintext Вариант "Пропустить" кажется мне наиболее безопасным. А не получится что там какое-нибудь непотребное старье лежит? (повторюсь, вариант что там лежит переименованная Г.ocx не рассматривается, ибо если таковая там лежит, то user "сам дурак"). Повторюсь также что любого варианта "заменить" я побаиваюсь, т.к. не хочу нарваться на "системную ругань" при инсталляции. AntonariyДмитрий77Существует ли удобный способ замены/преобразования?Открыть в текстовом редакторе .... В принципе я и сам так подумывал, за четкие инструкции чего на что менять спасибо. AntonariyЕсли у вас используется тулбар с SubMenu, .... Таковых не держим, есть только с кнопочками... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2010, 23:01 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Дмитрий77 Возникают 3 ситуации: 1) COMCTL32.OCX уже был в %SystemDir% и был зарегистрирован: Если файл более младшей версии находился и был зарегистрирован в каталоге: Ё:\У бабушки на печке\ то программа инсталлятора должна заменить его новой версией именно в этой папке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2010, 23:51 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Так, бабушку с печкой можно и подвинуть... только бабушки-дедушки отдыхают... мне уже не до этого. Потому что я сделал то что предложил Antonary и ужаснулся тому чего увидел. Кнопки на Тулбар стали обычными, но это бог с ним...не самое страшное Самые большие проблемы вижу с Listview... FullRawSelect не вижу, многого не вижу. У меня все алгоритмы с перестановкой столбцов основаны на.... ListView1(0).ColumnHeaders("Name").Position что ж ее перерисовывать теперь каждый раз... с картинками в заголовках столбцов проблемы... ListSubItems(i). и т.п. не работатает... .ListSubItems(i).ToolTipText Я в печали.... 6-ки м.б. и глючные но интеллекта поболе будет и я этим интеллектом сильно воспользовался при написании проги. Неужели никак их нельзя со стилями подружить? Т.е. какие варианты? 1) частичная замена 6->5, чтоб хоть что-то выглядело потребно, как то не то... 2) постепенная замена на API, ну эт.я замучаюсь с Listview 3) замена все же всего на 5 и дописывание через API, можно конечно, но опять кучу всего писать и все равно кучу всего изучать а приложение этими сабклассами над контролами итак перегружено... 90% экономии времени это мягко сказано...до того как я это сделал (за 15 минут), я тоже думал что это и будет основная проблема. Всего то нужно чтоб стили применялись, м.б. есть какое другое решение, не требующее переписывания 2/3 кодов, которые к сути-то программы не относятся. М.б. есть современные какие контролы, аналог 6, но с поддержкой всех этих манифестов. 5-ку то в 6-ку небось легче превратить.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 00:44 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
авторКнопки на Тулбар стали обычнымиА какими были? Хорошо бы скриншоты какие-нибудь. авторFullRawSelect не вижуНужно с помощью апи добавить стиль LVS_EX_FULLROWSELECT (&H20). Это просто. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. авторс картинками в заголовках столбцов проблемыКакие? авторListSubItems(i). и т.п. не работатает... Код: plaintext автор.ListSubItems(i).ToolTipTextПожалуй, это самое сложное по сравнению с предыдущими пунктами. Но в принципе тоже ерунда. автор3) замена все же всего на 5 и дописывание через API, можно конечно, но опять кучу всего писать и все равно кучу всего изучатьЭто лучший вариант. автор90% экономии времени это мягко сказано...до того как я это сделал (за 15 минут), я тоже думал что это и будет основная проблема.Поверьте, это все равно быстрее, чем если бы вы взялись пересоздавать все руками. Быстрее только оставить все как было. авторМ.б. есть современные какие контролы, аналог 6, но с поддержкой всех этих манифестов.Что-то есть на vbaccelerator, но не советую. Все, что вы видите на скриншоте, это пятые контролы, приправленные api (крестик закрытия таба в контролы не входит, сам рисую). По-моему овчинка выделки стоит. Jah loves you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 11:17 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Antonariy, >>Кнопки на Тулбар стали обычными >А какими были? Хорошо бы скриншоты какие-нибудь. Да что скриншоты... http://sql.ru/forum/actualthread.aspx?tid=750468 Плоским я сделал, но надо уменьшить высоту 420->360 (видимо в точках) иначе сверху вплотную к меню (как и было) а снизу большой зазор до Treeview/Listview. (высота кнопки 330). 420 он лепит минимум для стандартных кнопок. С этим промучился так и не нашел ответа... >>У меня все алгоритмы с перестановкой столбцов основаны на ListView1(0).ColumnHeaders("Name").Position... >LVCOLUMN.iOrder — это чуть сложнее, готового примера нет. А вот это если не осилю, то грош цена... Она у меня загружает со статическими индексами а все position запоминает в реестре и применяет сразу после загрузки или переставляет при настройке последовательности столбцов я пока это отключил при загрузке, чтоб хотя бы запустить в компиляторе, но это боюсь основная проблема Потом ширина первого столбца (где только иконка) почему-то прыгнула, пока не выяснял. >Нужно с помощью апи добавить стиль LVS_EX_FULLROWSELECT (&H20). с этим уже разобрался в первую очередь довольно быстро С картинками и примечаниями разобраться думаю не сложно, но это потом. Пока что задачи. 1) чтоб Запускалась в компиляторе 2) Чтоб закрывалась без вылета (в реестре запоминает несуществующие position) 3) Чтоб компилировалось На пункте (3) думаю большинство глюков отловится. Ну а потом играться и смотреть на глюки... >>3) замена все же всего на 5 и дописывание через API, можно конечно, но опять кучу всего писать и все равно кучу всего изучать >Это лучший вариант. Лучший то он лучший, но это читай переписывать прогу с нуля. Надо все же сделать замену 6->5, получить рабочую прогу, а от контролов можно потом отказываться последовательно (по настроению), т.е. например StatusBar просто , а с Listview (у меня их 3шт-массив и сильно накручены) черт ногу сломит, поэтому отказаться в лоб это пуля в голову. Ну и если меня когда-либо хватит на все это, то в итоге убрать ссылку на контролы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 11:51 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Konst_Oneсистемные библиотеки обычно не требуют деинсталяции. чисти только папку со своей программой. Т.е. вы предлагаете: Код: plaintext 1. нет, Я предлагаю регистрировать только новые версии системных библиотек исключительно в системных директориях. При деинсталляции их вообще не трогать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 12:07 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Konst_One, я написал Код: plaintext 1. Код: plaintext вы пишите Код: plaintext Код: plaintext вы пишите Код: plaintext Код: plaintext 1. Пункт (2) во первых будет выполнен по-любому (в инсталляторе в ActiveX опции либо регистрировать, либо нет), а во вторых это правильно,т.к. вдруг там новая версия лежит и она не зарегистрирована. Если так то что думаете по поводу возможной ругани системы при замене файла? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 12:42 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
авторПункт (2) во первых будет выполнен по-любому (в инсталляторе в ActiveX опции либо регистрировать, либо нет), а во вторых это правильно,т.к. вдруг там новая версия лежит и она не зарегистрирована это делать не надо. если не заменяли, то ничего и не делаем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 13:09 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Konst_One, так заменить и регистрировать это независимые пункты. (нет опции не регистрировать если не заменяли) и потом регистрировать по любому разумно. Я когда-то бухнул ocx в system, регистрировать не стал, и забыл про нее. А инсталлер ее увидит, заменять не станет и регистрировать тоже не станет. И что? У меня другая проблема возникла (с одной-главной формой). Картиночки везде вдруг раз-все "черненько"-образные. Думал ресурся съелись, перегрузил VB, перегрузил PC-не помогает. Мувнул опять из резервной копии проекта (где "6") эту форму в подопытный проект, заменил все на "5" в блокноте. Работает, картинки цветные. Поковырялся с кодами, запустил, опять чернота. (exe даже пока скомпилировать не могу из-за проблем с кодами, чтоб посмотреть чего там будет:цветное или черное). В чем проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 13:57 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Без тестового примера сказать сложно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 13:59 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Antonariy, легко сказать, предлагаете сделать тестовый из одного тулбара 6, переделать в 5 и посмотреть чего будет, вряд ли это воспроизведется. Вчера игрался такого не было. Я даже не могу exe сделать, пока не перепишу хорошую часть кодов, а это работа надолго. Ну допустим перепишу с черными картинками, потом перекину опять 6 в 5 и заменю коды в форме на то что переписал, но это ж повторится, а если буду дорабатывать проект уже с "5".? не дело... Причем происходит как-то внезапно (сохранение даже не обязательно), но если раз произошло то не помогает уже ничего, т.е. даже на другом pc этот проект уже показывает черные. Скорее всего внутренние ресурсы vb где-то на грани. Можно конечно попробовать вручную пересоздать ImageList-ы. Посмотреть, что будет. ...уже посмотрел, добавил ImageList с двумя цветными картинками, цветными они были очень недолго, и главное эта скотина автосохраняет эту дрянь в этом непотребном виде. Мне кажется слишком много всего в приложении, 5-е контролы не выдержат. Они гораздо более глючные чем 6-е. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 15:37 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Они гораздо более глючные чем 6-е.Вы не любите кошек? Вы просто не умеете их готовить ))) Я пришел к противоположному выводу. Jah loves you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 15:51 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Да люблю я их готовить... Даже с этим справился... >>У меня все алгоритмы с перестановкой столбцов основаны на.... >LVCOLUMN.iOrder — это чуть сложнее, готового примера нет. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. а толку...эти почерневшие иконки меня вконец расстроили Это признак нехватки ресурсов. Но ресурсы есть,если бы их не было,я бы получил "Out memory" в куче других прог. И с "6" такого никогда не было. А на тестовом приложении я вам это не покажу, потому что там будет один тулбар и один ImageList и им всегда все хватит. А фиг его знает, м.б. в форме много кода, м.б. еще чего, м.б. сабклассинги на "5" случайно так действуют. >замена все же всего на 5 и дописывание через API, можно конечно, но опять кучу всего писать и все равно кучу всего изучать >Это лучший вариант. Ну лучший наверно оставлять 6-ку и постепенно переписывать на API. Потому как заменить на "5" означает все разбомбить, кое-как запустить и потом долго восстанавливать из руин. Кошки это хорошо, но на тек. момент больше хочется выть от безысходности. Вы мне там где-то давали контролы через API, пойти чтоль посмотреть, но это не на пару дней как надеялся через 5 (надежда еще теплится, но все меньше). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 16:24 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Сколько у вас форм в проекте? Попробуйте создать новый проект, подключить пятые контролы, скопипастить на форму ImageList с этими черными иконками и то, что там у вас с ним связано. Jah loves you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 16:39 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Дмитрий77а толку...эти почерневшие иконки меня вконец расстроили Это признак нехватки ресурсов. Но ресурсы есть,если бы их не было,я бы получил "Out memory" в куче других прог. Почерневшие иконки это может быть признак нехватки GDI+ ресурсов? В частности там было ограничение на 9999(по моему) открытых дескриптора в рамках одного приложения. Сам на это нарывался. Попробуй посмотреть в task manager'e Закладка "Процессы", в меню "Вид" пункт "Выбрать столбцы", там поставить птицу на "Объекты GDI" Ы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 16:39 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
и ещё помниться была какая-то засада с цветностью иконки, которую помещаешь в imagelist, из-за этого она портилась при сохранении проекта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 16:42 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Konst_Oneи ещё помниться была какая-то засада с цветностью иконки, которую помещаешь в imagelist, из-за этого она портилась при сохранении проектаImageList из ocx не поддерживает 32 бита. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 17:10 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
>Сколько у вас форм в проекте? 11штук, но проблема возникает только в основной, и только с ImageList-ами, и только после конвертации в версию 5, ну собственно все картинки в основном в них и сидят. >скопипастить на форму ImageList с этими черными иконками и то, что там у вас с ним связано цветным оно уже не станет даже в другом проекте. >Попробуй посмотреть в task manager'e... "Объекты GDI" попробовал в среде разработки при запуске и вообще показывает 1200-1230 неважно "6" или "5". Скомпилированный exe ("6") выдает в 2 раза меньше т.е.620-630. >была какая-то засада с цветностью иконки, которую помещаешь в imagelist, из-за этого она портилась при сохранении проекта для мелких стараюсь использовать 256цветов ибо делать больше в vb6 накладно, а меньше соотв. неэстетично. Но данный глюк возникает не при сохранении а после нескольких просто запусков, но потом уже не лечится никак. Возникло первый раз после того как поигрался с кодом что привел выше (вместо .Position) возможно после того как закомментировал сохранение этих position в реест при закрытии (до того как я это сделал VB у меня просто вылетал при закрытии вместе с компилятором из-за несоответствия кода 5 и 6, но глюка с иконками не было). М.б. какое неосвобождение ресурсов при корректном именно закрытии приложения. Для получения черного эффекта надо запутить и закрыть приложение (не среду) несколько раз. Надо б поиграться конечно, свеже конвертированную форму только запомнить, чтоб каждый раз не переделывать... М.б. почему-то получается 1200*8=>9999 надо отследить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 17:14 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Дмитрий77>Сколько у вас форм в проекте? 11штук, но проблема возникает только в основной, и только с ImageList-ами, и только после конвертации в версию 5, ну собственно все картинки в основном в них и сидят.11 форм — это скромный проект, нехватки ресурсов или переполнения GDI быть не может. Дмитрий77>скопипастить на форму ImageList с этими черными иконками и то, что там у вас с ним связано цветным оно уже не станет даже в другом проекте. Вот я и хочу на это посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 17:21 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Antonariy, У меня это произошло на простецком приложении с одной формой Я просто делал анимацию иконки в трее, приложение было сервисом, и иконка обеспечивала связь с космосом. Приложение писал на NET в 2005 студии. Как потом выяснилось загрузка иконки в объект наращивала счетчик GDI дескрипторов, а уничтожение объекта не приводило к освобождению использованного дескриптора. Игорь Горбоносв общем переделал так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 18:08 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
VB6 в этом плане больше защищен от дурака. Нужно делать что-то уж совсем непотребное непосредственно через gdi, чтобы добиться такого эффекта. Или забывать выгружать навороченные динамические юзерконтролы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 18:16 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
AntonariyДмитрий77>скопипастить на форму ImageList с этими черными иконками и то, что там у вас с ним связано цветным оно уже не станет даже в другом проекте. Вот я и хочу на это посмотреть. Я отослал вам на e-mail. test6-это чистая "6", скопированная из оригинала чистой 6-ки test5-это переделка 6->5 через блокнот + внутри ф-ция плоских кнопок и на всяк.случай в архиве эта же переделка но сразу после переделки, мне один раз удалось испортить даже в этом тесте как испортил? предположения: был запущен большой проект 5, но как не крутил повторить не удалось м.б. банально чуть попутал кавычки и пробелы в заголовке "5"-ки, в форме там кавычки и пробелы GDI/gdi+ как бы в большом проекте используется не хило(из моих топиков с участием Бенедикта вам несложно это понять) , но на 6-ках никаких глюков никогда не было, думаю это ни причем. TestBlack это собственно уже копия из большого проекта в чистую 5-ку после того как все уже произошло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 20:06 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
О-па! глюк происходит все-таки при сохранении. Но не обязательно при первом сохранении, и не обязательно при первом запуске после рокового сохранения. Это ввело в заблуждение. Т.е. ресурсы походу вообще ни при чем, а причем: AntonariyДмитрий77Существует ли удобный способ замены/преобразования?Открыть в текстовом редакторе *.vbp и заменить строку Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; mscomctl.ocx на Object={6B7E6392-850A-101B-AFC0-4210102A8DA7}#1.3#0; COMCTL32.OCX. В файлах *.frm заменить аналогичные строки в заголовках, а так же все строки типа MSComctlLib.TreeView на ComctlLib.TreeView. Это не решит все проблемы сразу, но по крайней мере их создаст. Никоим образом не обвиняю.Сам так хотел поступить Значит че, надежней вооружиться карандашиком и блокнотиком (а лучше двумя мониторами и двумя PC, с этим хотя бы проблем нет) и вперед,добавляем 5-ку, меняем колеса по одному с проверкой промежуточных результатов. Под конец удаляем 6-ку?...анализом абракодабров в блокноте желания заниматься как бы нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 20:44 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Час сидел, вставлял эти картинки в ImageList-5. Напрасно, тот же эффект с 3-х запусков,сохранений. Получается, глючность ImageList v.5. Была идея попытаться пристыковать ImageList v.6 но понятно, провалилась. Тупик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2010, 22:52 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Если этот хренов ImageList-5 грузить картинками динамически при старте, то он не глючит, но для хранения изображений он никуда не годен. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Но,блин, опять же, манифест исправно срезает нижнюю строчку иконки (если кнопка enabled=false) на классическом интерфейсе. В сочетании с добавлением 60-ти лишних точек к высоте тулбара снизу не есть очень гуд.(видимо это не исправить,т.к. тупица вычисляет высоту по выпуклым классическим кнопкам а не по flat) Пришлось перерисовывать disable-картинки урезанными на нижнюю строчку, чтоб было более менее и одинаково на разных с-мах. Да нет нормально, но это только один тулбар кот. почти без замены кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2010, 01:41 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Ну а с этим, СтрипTAB-ом что делать? Нет стиль к нему прекрасно применяется, но как совместить цвета? Левые контролы я смотрел, но это не то. А нельзя просто рамку и тексты прозрачными сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2010, 03:19 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Я отослал вам на e-mail.Посмотрел. Я почти уверен, что в ImageList вы добавляли gif с прозрачным фоном. ImageList с ним работать толком не умеет. Вместо этого нужно фон сделать фиолетовым, к примеру, и задать фиолетовый MaskColor, после этого все будет пучком 100%. Jah loves you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2010, 12:47 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Да не почти, а уверен на те же 100%, я вспомнил, как натыкался на этот эффект, и поначалу лечил его, заливая фон серым, а потом догадался, для чего нужен MaskColor. Дмитрий77Нет стиль к нему прекрасно применяется, но как совместить цвета?Это вы про что? Jah loves you. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2010, 12:54 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
AntonariyДа не почти, а уверен на те же 100%, я вспомнил, как натыкался на этот эффект, и поначалу лечил его, заливая фон серым, а потом догадался, для чего нужен MaskColor. Дмитрий77Нет стиль к нему прекрасно применяется, но как совместить цвета?Это вы про что? Jah loves you. +1 очень похоже масккалор хитрая штука и малиновый цвет битмапов в примерах от микрософта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2010, 13:07 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
AntonariyЯ почти уверен, что в ImageList вы добавляли gif с прозрачным фоном. Ну, не угадали. В основном исходники иконок взяты отсюда: (Microsoft Fax XP) fxsclntR.dll Toolbar-128 Bitmap-130 Bitmap-131 Все эти дела ретушируются, бьются по 16х16 , раньше делал bitmap с белым фоном, но потом стал делать ico с прозрачным, но bimap-ы где-то остались частично. (инструменты vc++6;IcoFX 1.6 ) А что на счет моей идеи загрузки из PictureBox(0 to N)? Иконки в PictureBox хранятся кстати надежно? В смысле вставляются в exe? Мне кажется да. (потому что большие картинки надо вставлять в ресурсы, или тащить отдельно, насколько знаю...) В принципе, у меня их не так много всего, чтобы было лениво нарисовать массив картинок. Но и не так мало, чтобы над всем этим (да и над собой тоже) еще раз издеваться. Мой способ работает на ура вроде как. AntonariyДмитрий77Нет стиль к нему прекрасно применяется, но как совместить цвета?Это вы про что? Кто-то тут обмолвился что TabStrip самый глючный, теперь понял. В XP/Vista стиле для него применяется градиентная подложка, т.е. все фреймы, label-ы etc кот. вы на него накладываете имеют цвет ButtonFace по умолчанию и будут выглядеть как заплатки. Причем цвет подобрать невозможно, ибо там градиент. В основном все решения сводятся либо к очень большому к-ву кода, что на.. не нужно, ибо я не посвящаю программу TabStrip-у, либо какие-нибудь "красивые" (читай непотребные) tab-ы не имеющие с XP стилем ничего общего. Плюс практически все решения имеют глюк: при переключении стиля и запущенном окне это будет выглядеть непотребно, но это бог с ним: микросовтовские родные окна при переключении стиля тоже слегка страдают. Другая бяка, что эти новоявленные громоздские контролы могут быть подстроены под XP, но выдадут такую дрянь на Висте, что...шли бы они лесом. Самое красивое и очень простое решение я нашел здесь: http://www.vbforums.com/showthread.php?t=507336 и к нему склоняюсь. Идея: 1) Frame или Picture должен быть полностью вписан в прямоугольную основную область TabStrip-а (опытным путем нашел, что +10(точек?) от верхнего и левого края и (-50) от нижнего и правого края будет в самый раз.. если не так, поправьте ) 2) взять цвет в верхнем левом углу первого таба и закрасить в этот цвет все вышеописанные Frame-ы Picture и все что внутри. Градиентов конечно не будет, но это не очень заметно, а стильные полоски-подсветки вверху и общий характер цвета фона все сохраняется, выглядит отлично. Вот код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Автор высказывает следующие переживания (и он прав): but when using it in the Form_Paint or Form_Initialize event in order to do it automatically, it's too fast and gets the color behind the form (i.e. desktop background). и действительно,в Form_Initialize это не срабатывает. Но помозговав с минутку, я таки нашел решение: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Посему вопрос: имеет ли право это решение на жизнь? хорошо ли использовать таймер? Или можно отследить событие "стиль применен" иначе? Какой ставить интервал таймера чтоб не сглючило? (Interval=10 напр. не заметен, а если Interval=200, то уже заметно на глаз.) Или все же есть более грамотное решение (а-ля прозрачный фон, Но естественно не +10 дополнит.глючных контролов + 100 страниц кода) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2010, 14:47 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
авторВ основном исходники иконокНе суть важно, избавляйтесь от прозрачного фона. Или используйте свой способ, как хотите. авторА что на счет моей идеи загрузки из PictureBox(0 to N)?Тогда уж в ресурсы программы, PB охочи до оперативки. А еще есть забавный контрол PictureClip, в него можно поместить один рисунок, например блок 1х10 иконок, и обращаться как к двумерному массиву, он порежет самостоятельно. Не знаю, правда, дружит ли он с прозрачным фоном. авторНо и не так мало, чтобы над всем этим (да и над собой тоже) еще раз издеваться.По крайней мере в будущем имейте это ввиду, избавляйтесь от прозрачности заранее. автор(опытным путем нашел, что +10(точек?) от верхнего и левого края и (-50) от нижнего и правого края будет в самый раз.. если не так, поправьте )Поправляю: высота табов зависит от размера шрифта, который может быть изменен системно. Эту высоту нужно выяснять сообщением TCM_GETITEMRECT. Еще вам будет полезна эта функция: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. авторимеет ли право это решение на жизнь? хорошо ли использовать таймер?Да, если нет желания сабклассить форму в поисках подходящего сообщения. Или, если у вас на форме какой-нибудь юзерконтрол, можно использовать его событие Show. авторИли все же есть более грамотное решениеКстати да, я однажды сделал прозрачный контейнер именно для использования с табстрипом. Могу выложить, если надо, он не глючный) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2010, 16:20 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Кстати да, я однажды сделалВернее нашел и доделал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2010, 16:27 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
>Тогда уж в ресурсы программы, PB охочи до оперативки. Ну хорошо, прямой вопрос. 50-100 маленьких иконочек 16х16х256цв в PictureBox-ах не отменит мировую революцию? Потому как честно уже неохота это переделывать по крайней мере сейчас. У меня еще ListView-ы впереди, ибо от идеи "все и сразу" я отказался, последовательно вожусь с каждым, и забот как видим хватает. >Поправляю: высота табов зависит от размера шрифта, который может быть изменен системно. Я поигрался: у меня в табе и всяких label-ах жестко зашит Ms Sans Serif 8, поэтому ничего не меняется. М.б. тогда не стоит заморачиваться? При стилях немного съезжает, но я взял незаметный запас (на XP дельта больше-под нее и надо ориентироваться, на классике ,и похоже на висте тоже, градиентов нету и нет проблем) так что опять: может не заморачиваться? Меня больше волновал вопрос разного разрешения экрана, компьютер же мыслит в пикселях, а у меня заданы точки, как VB стандартно предлагает. Но тесты показали, что все в порядке. >Еще вам будет полезна эта функция:..OpenThemeData... возможно, надо поковыряться. Но только, я не вдумывался пока...ради момента переключения стилей... мммм 1) Таймером что ли долбить систему? ради отследить событие вероятность которого "раз в жизни да и то не факт", кто ж стили меняет при запущенных куче приложений... 2) Потом в моем варианте не так уж похабно этот момент выглядит, как в тех контролах. >Кстати да, я однажды сделал прозрачный контейнер именно для использования с табстрипом. Могу выложить, если надо, он не глючный) Я бы взглянул хотя бы из любопытства. ДА, если несложно. Но уже склоняюсь к своему варианту. Видимо оставлю старт-таймер с интервал=10 (береженого бог бережет). Стараться имеет смысл только ради XP конкретно, ибо на Висте у меня все вообще Original(градиентов похоже там и правда нет). А я же разные контролы использую внутри Tab->Frame(Picture) примитивные, но все же, возиться придется возможно. И потом принцип у меня: поменьше OCX. Microsoft Common Controls было исключением, через API тяжеловато бывает, но, видите как нарвался не по детски. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2010, 17:17 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Дмитрий7750-100 маленьких иконочек 16х16х256цв в PictureBox-ах не отменит мировую революцию?Нет, конечно, но лучше используйте Image. Дмитрий77ради отследить событие вероятность которого "раз в жизни да и то не факт"Дело не в этом, а в том, что я, например, для достижения нужного мне эстетического результата подгоняю все с точностью до пикселя, а при переключении стилей толщина всяких бордюров меняется, и там, где при включенных стилях все было идеально, при отключенных появляются всякие лишние полосы и т.п. В качестве выхода из положения использую эту функцию в Form_Resize. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2010, 17:33 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Antonariy, я вот смотрю на этот ваш контрол. Судя по всему чего-то очень простое. Во-первых общий вопрос-если я его использую мне ж ни каких ocx за собой тащить не надо? Так? Вроде так. Во вторых, как он поможет в решении с TabStrip? Он ведь сам имеет какой-то цвет? Т.е. кладу на него Label: Label будет иметь цвет вашего контрола. Кладу TextBox-Textbox не будет прозрачным, у меня Textbox-ы в половине случаев там используются, чтоб выделялся текст. Но я основного не понял: мне же надо чтобы он сам был прозрачным, чтобы подложка была под цвет TabStpip (чтоб видеть градиенты). Т.е. я не улавливаю... >для достижения нужного мне эстетического результата подгоняю все с точностью до пикселя, а при переключении стилей толщина всяких бордюров меняется в случае с моей реализацией TabStrip, если подогнано под XP, то на остальных бордюров не будет в силу одинаковости цвета. Но насчет "подгоняю"... Меня пока чуть злит Тулбар? Как его высоту подсократить через API? Понимаю что зависит от высоты кнопки, но как ему сказать через API: ну ка приведи высоту в соотв. с высотой кнопки и с учетом того что ты flat, потому что в OCX v.5 к высоте добавляется снизу лишнее, я уже писал выше. И как побороть обрезание иконки на одну строку снизу если Button.enable=false; Стиль=классика;манифест=используется, тоже упомянул про это. Т.е. я эту нижнюю строку рисунка вообще убрал для disable. (Типа enable-есть тень снизу;disable-тени нет), но с ней лучше было бы, картинки и так мелкие..16х16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2010, 19:57 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Контрол имеет цвет только в дизайн-тайме, при запуске становится прозрачным, никаких библиотек не требует. Какие-то свойства нужно установить в дизайне, сейчас не помню и не на работе, чтобы посмотреть. Насчет тулбара, выложите скриншот, а то не очень понятно, что там обрезается. Может и не обрезается, а перекрывается нижними контролами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2010, 21:01 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Antonariyникаких библиотек не требует. Это конечно хорошо... AntonariyКонтрол имеет цвет только в дизайн-тайме, при запуске становится прозрачным Прозрачным он становится, но применительно к обсуждаемому вопросу он принимает цвет формы, а не цвет/градиент табстрипа. И глюки с цветом шрифта на label что в него вставлена, даже в дизайн-тайм. Не понимаю чего происходит...Без тестового примера и объяснения рецепта приготовления вряд ли осилю. AntonariyНасчет тулбара, выложите скриншот, а то не очень понятно, что там обрезается. Может и не обрезается, а перекрывается нижними контролами. Ничего там не перекрывается... из картинок обе проблемы хорошо видны. С обрезанием все понятно. Под ним ListView : Listview.top=toolbar.height Просто для Control-6 я устанавливаю высоту ToolBar =360 в режиме flat в дизайне а для Control-5 у меня этого режима в дизайне нет, поэтому приходится соглашаться на =420 Но когда я применяю код: Код: plaintext 1. 2. 3. Играть пытался Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2010, 01:06 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
авторПрозрачным он становится, но применительно к обсуждаемому вопросу он принимает цвет формыПо непонятной причине в режиме прозрачности он сам себя делает невидимым. Рабочий пример в аттаче, на форму кинут контрол, в дизайне никакие свойства не задаются, все в Form_Load. авториз картинок обе проблемы хорошо видны.Понятно, это глюк Disabled. Нужно создать второй ImageList с кнопками для отключенного режима (я думал вы так и делаете), например сделав их черно-белыми. Еще можно попробовать стиль TBSTYLE_WRAPABLE, при его наличии работают всякие дополнительные эффекты. Например можно задать отступы от края кнопки до картинки: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2010, 11:24 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Аттач забыл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2010, 11:26 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Antonariy, с контролом все понятно Код: plaintext 1. я использую textbox-ы locked=false (это даже не важно), чтоб можно было по ним ходить, а для них прозрачность не сработает В данном конкретном случае думаю придется оставить свой вариант, а ваш иметь в виду на будущее. >Нужно создать второй ImageList с кнопками для отключенного режима (я думал вы так и делаете), например сделав их черно-белыми. Черно-белые картинки я и использую, каждая вторая на скриншоте, но в том же ImageList, когда делаю disabled, то меняю номер картинки. А второй ImageList это как? Там же вроде один только указывается? >Например можно задать отступы от края кнопки до картинки: Ну это мне как-то не очень нравится... И вы ничего не сказали про "лишнюю высоту" тулбара 420-360=60. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2010, 12:43 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Дмитрий77vbMagenta(это что за Magenta кстати?)-вот этого не хватало для понимания, но... Object BrowserConst vbMagenta = 16711935 (&HFF00FF) Member of VBA.ColorConstants Такой себе ядовито-малиновый цвет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2010, 12:52 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Игорь ГорбоносДмитрий77vbMagenta(это что за Magenta кстати?)-вот этого не хватало для понимания, но... Object BrowserConst vbMagenta = 16711935 (&HFF00FF) Member of VBA.ColorConstants Такой себе ядовито-малиновый цвет :)Ну почему малиновый???))) Это расово фиолетовый цвет, RGB(255, 0, 255) чистоганом. Малиновый — RGB(220, 20, 60). Цвет может быть любой, главное чтобы TransparentColor и BackColor совпадали. Дмитрий77я использую textbox-ы locked=false (это даже не важно), чтоб можно было по ним ходить, а для них прозрачность не сработаетВы проверяли? Какая разница, какое у них состояние? Работает всегда. Не работает лишь для безоконных контролов, меток например, поэтому их приходится имитировать с помощью Print. Дмитрий77А второй ImageList это как?А, ну да, в ocx эту возможность не включили (хочется взять и уе$%@tь). Вообще тулбару можно назначить два имаджлиста (a ListView целых три), один с картинками для кнопок в их нормальном состоянии, другой — в отключенном. Придется опять подключать апи. Кстати, в архиве с апишными контролами есть файл CommCtrl.tlb, в нем объявлены все CommonControls-константы и некоторые функции, рекомендую подключить. Откомпилированному файлу он не нужен. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Дмитрий77Ну это мне как-то не очень нравится...Дело вкуса. На больших интерфейсах проще попадать по крупным кнопкам. На скриноте "Администратора образования" с предыдущей страницы как раз такие увеличенные кнопки, меньше, чем 32, но больше, чем 16. Дмитрий77И вы ничего не сказали про "лишнюю высоту" тулбара 420-360=60.И вряд ли скажу без примера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2010, 14:07 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
AntonariyДмитрий77я использую textbox-ы locked=false (это даже не важно), чтоб можно было по ним ходить, а для них прозрачность не сработаетВы проверяли? Какая разница, какое у них состояние? Работает всегда. Не работает лишь для безоконных контролов, меток например, поэтому их приходится имитировать с помощью Print. Проверял, с Textbox не получается(см.картинку). М.б. плохо проверял, еще проверю. Antonariy Дмитрий77А второй ImageList это как?А, ну да, в ocx эту возможность не включили (хочется взять и уе$%@tь). Вообще тулбару можно назначить два имаджлиста (a ListView целых три), один с картинками для кнопок в их нормальном состоянии, другой — в отключенном. Придется опять подключать апи. Кстати, в архиве с апишными контролами есть файл CommCtrl.tlb, в нем объявлены все CommonControls-константы и некоторые функции, рекомендую подключить. Откомпилированному файлу он не нужен. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. А в этот API-ImageList картинки из PictureBox вставить нельзя, как в обычный? С ресурсами сейчас неохота морочиться. Antonariy Дмитрий77И вы ничего не сказали про "лишнюю высоту" тулбара 420-360=60.И вряд ли скажу без примера. Пример: рисуем Toolbar в Control-5 У него кнопки обычные в дизайнере. Пытаемся сделать height=360. Не получается. Соглашамся на 420. Через API делаем его FLAT (код был выше). Становится FLAT. Но высоту сохраняет 420. В итоге между ним и listview (см.правую картинку выше, listview.top=toolbar.height) образуется серый зазор Дельта=60, потому что норм. высота для flat =360 (см. левую картинку). Какой еще пример нужен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2010, 16:49 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Дмитрий77А в этот API-ImageList картинки из PictureBox вставить нельзя, как в обычный?Да ради бога, просто для меня как раз проще с ресурсами. Дмитрий77(см.картинку)Картинки не грузяццо. Дмитрий77Какой еще пример нужен?Конкретный, в виде проекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2010, 16:56 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Картинки в ресурсах и их фон -это отдельная тема. 32-бит-картинки-тоже отдельная тема. Создание ImageList через API-тоже отдельная тема. Для всех трех ImageList можно использовать обычный ImageList. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Нет не то. Когда мы имеем TB_SETDISABLEDIMAGELIST, то мы вообще не отображаем картинку в режиме disable. Мы просто отображаем другую цветную (пусть бы и черно-белую) картинку, это не так хорошо смотрится как disabled, где винды рисуют "негатив". Хорошо, я пошел другим путем. Просто перерисовал 16х16 в 17х17, оставив нижнюю строчку иконки пустой, т.е. та же картинка 16х16, но с добавлением пустой строки снизу и пустого столбца справа(слева). Antonariy, что думаете? Два проекта disable и disable17 я послал вам. 17 не похабно смотрится? там две кнопки, загружают разные Imageлисты в Toolbar и галка для реального disabled. Срезание будет на 16 на классич. интерфейсе на exe-шнике. Вот уменьшать картинки до 15 уже похабство. Заодно с высотой Toolbar не глянете. TB_AUTOSIZE делает высоту Toolbar 420 для 16х16 и 435 для 17х17. Я считаю что это избыток, приблизительно 60 точек под кнопками лишние. Либо надо применить еще какой-нибудь стиль... Toolbar 6-й версии имеет базовую высоту 360 для 16х16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2010, 02:51 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
С высотой ничего в голову не приходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2010, 12:34 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
AntonariyС высотой ничего в голову не приходит. Да бог с ним. Уже подретушировал-извратился. Вставил один Toolbar в другой. Внешний 420 и обеспечивает "полоску" между меню и Toolbar. Внутренний 435 (т.к. 17х17 ) и его Top чуть смещен вниз, т.е. кнопки получились как бы посредине высоты внешнего Toolbar и низ скрыт. Получилось думаю нормально. Счас занимаюсь самым мерзким Listview, ломаю голову над другим Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Вопрос конечно в LVSIL_GROUPHEADER . Не хочет ImageList-ы назначать-никакие. По крайней мере использовать не получается. Если сравнивать с Toolbar (полный код приведен выше), то там используется некая фишка: Код: plaintext 1. 2. Код: plaintext Т.е. в Control-5 он тупо использует ImageListListView для header-ов, если назначить два первых ImageList через VB, а если их не назначать и пытаться применять LVM_SETIMAGELIST (при неназначенных ImageList) то картинок нет нигде. И еще странность, но пока не копал. У меня ширины столбцов для ListView считываются из реестра. Если запомнить их при закрытии приложения кот. Control-6 а потом открыть в Control-5 то столбцы сильно шире, и походу при тех же значениях Width. Ощущение что использует другие координаты. Можно конечно подкоректировать default-ы, но мне тогда придется удалять ветвь реестра где эти ширины хранятся при инсталляции новой версии, а не хотелось бы. А если не удалить то будет похабство при первом запуске, и user должен будет уменьшать их вручную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2010, 14:13 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Насчет LVSIL_GROUPHEADER. Заголовки столбцов это отдельный контрол: Код: plaintext 1. 2. Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2010, 14:49 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Antonariy, пытаюсь по вашему методу: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Не хочет...Ощущение что пытаюсь забить тот же гвоздь, но другим кувалдометром. MsgBox pvHeaderhWnd показывает вроде похожие на правду Long-и, а HDM_SETIMAGELIST видимо не срабатывает, т.к. функция, что дальше, лепит картинку из основного ImageList, а не из желаемого. Вашу SendMessage Long я конечно вижу, ну попытался еще вот так вот Код: plaintext 1. 2. 3. 4. Вообще-то... >лепит картинку из основного ImageList М-м-м...то что лепит это уже неплохо... а не проще ли забить и добавить 3 лишние картинки в основной ImageList, жалко что ли... Пусть оттуда их и берет. Что думаете? ================================== AntonariyавторУ меня ширины столбцов для ListView считываются из реестра. Если запомнить их при закрытии приложения кот. Control-6 а потом открыть в Control-5 то столбцы сильно шире, и походу при тех же значениях Width. Ощущение что использует другие координаты. Тоже на это натыкался, но не понял, в чем засада. Просто сделал кнопку, устанавливающую размеры по умолчанию, если расползутся. Происходит это редко. Дык расползутся они только один раз - при установке новой версии с "5" после старой версии с "6". (если user уже устанавливал программу ранее) Деинсталлятор старой версии не удаляет эти параметры из реестра. Единственный способ удалить при установке новой версии. Они по разному интерпретируют одну и ту же ширину . Для "5" дефолты придется тупо уменьшить методом теста. Или они еще "в процессе" могут глючить? Если так, то не радует... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2010, 15:58 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Вообще-то... >лепит картинку из основного ImageList М-м-м...то что лепит это уже неплохо... а не проще ли забить и добавить 3 лишние картинки в основной ImageList, жалко что ли... Пусть оттуда их и берет. Что думаете? Это дурной вариант..У меня размерность картинки другая: в основном листе 16х16, а в заголовках 12х12, можно конечно добавить поля по 2 с каждой стороны, но это съест место, опять эстетика пострадает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2010, 16:23 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Все, разобрался Вот это не работало Код: plaintext Теперь воюю с прозрачным цветом иконок в Listview-Header. В Control-6 они будучи загнанными в ImageList изначально (иконки с прозрачными местами) были по умолчанию прозрачными. Здесь: Код: plaintext 1. 2. 3. Пытался уже битмапы в ресурсы загонять, например делаю фон синим и типа Код: plaintext 1. 2. 3. 4. 5. Не могу понять сути этой MaskColor. Что делать-то? Лучше конечно с обычными ico, кот. загружены в Picturebox-ы с бесцветным фоном и обычным ImageList, там тоже этот MaskColor есть, но помогает только Backcolor, да и то не до конца, как выяснили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2010, 04:05 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Не могу понять сути этой MaskColor. Что делать-то?Суть в том, что imagelist самостоятельно делает прозрачными области указанного цвета. Такие области называются маской. Свойство ImageLis'а MaskColor задает этот цвет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2010, 10:32 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Antonariy, для самого ListView это работает, а для header оно лепит цвет фона, в чем и проблема. Тестовый пример P.S. А файлы как нормально тут прилеплять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2010, 17:55 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Не знаю чего с этой прозрачностью делать. По идее можно попытаться менять цвет фона ImageList, видимо читая цвет какого-то пикселя, как это придумал с TabStrip. Но здесь куча сложностей: 1) Выделяется только один header, а фон един для всех картинок. 2) Надо будет эти картинки каждый раз перерисовывать-обновлять 3) Надо думать как считать текущий цвет каждого header 4) Надо еще понимать событие при кот. столбец меняет цвет. понятно сабклассинг этих хидеров (у меня это headres кажется и так сабклассятся, но от этого не легче). 5) а если там в xp гребаные градиенты используются как в TabStrip то вообще ж., фиг отследишь где чего и почему меняется. Сдается мне, путь сей не есть правильный и как то проще делается. Для кнопки напр. этот MaskColor надо задавать и он должен совпадать с MaskColor для ImageList. А с header я нигде никакого намека на это не вижу(автоматически здесь не работает). Но с 6-ми контролами вроде по default-у они прозрачные получаются (в смысле плюют на цвет фона), значит в API чего-то должно быть. --------------------------------- А по поводу ширины столбцов. Не, там хуже. ColumnHeaders(i).width надо выкидывать в помойку сразу и не думая. Простые тесты показывают, что если 1-100; 2-200 ; 3-300 то ширина устанавливается не линейно, а по какой-то логарифмической шкале, и мало того что дикая нелинейность, если эти значения пытаться запоминать, то эта мерзость фиг их потом еще и отобразит также (т.е. реальные ширины будут в след. раз другие). Но здесь хотя бы выход наклевывается. Что-нибудь типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2010, 04:08 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Дмитрий77для самого ListView это работает, а для header оно лепит цвет фона, в чем и проблема. Получилось. Чего только не пытался. Уже вот это накопал Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. 6. http://btmtz.mvps.org/listview/ http://btmtz.mvps.org/listview/lvheadersorticons.zip Вернее все-таки понимание(или так фишка легла) что здесь VB ImageList не прокатит: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Кстати вопрос. Как уже упомянул, >Вашу SendMessageLong я конечно вижу Так вот в тестовом(мелком) примере у меня строчка (без Long) Код: plaintext ----------------------- На Висте в некоторых программах (но далеко не всех) примеры: Почта Виндоус, Fax and Scan listview имеет какой-то другой вид, т.е. не только шапка по-вистовски, но и сами Items в Report выглядят по-вистовски, т.е. с закругленными выделениями-примечаниями и с голубой прозрачной подсветкой. Это как сделать? Или это вообще принципиально другой контрол? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2010, 04:32 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
AntonariyавторУ меня ширины столбцов для ListView считываются из реестра. Если запомнить их при закрытии приложения кот. Control-6 а потом открыть в Control-5 то столбцы сильно шире, и походу при тех же значениях Width. Ощущение что использует другие координаты. Тоже на это натыкался, но не понял, в чем засада. Просто сделал кнопку, устанавливающую размеры по умолчанию, если расползутся. Происходит это редко. Собственно, давно уже до этого сам допер. Но если интересно, официальное заключение: FIX: Problem with ListView's ColumnHeader Width Property How To Set the Column Width of Columns in a ListView Control Принялся пока курочить другой свой exe-шник. Новая проблема: Код: plaintext 1. 2. 3. Изучаю пока вот это чудо: http://btmtz.mvps.org/listview/ LVCustomDraw: How to use custom draw in the ListView http://btmtz.mvps.org/listview/lvcustomdraw.zip Неужели только сабклассить и NMLVCUSTOMDRAW ? Или можно че попроще придумать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2010, 03:06 |
|
||
|
xp/vista style; common controls 5/6; regsvr32 на x86/x64
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Новая проблема: Код: plaintext 1. 2. 3. Осилил: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. В моем случае ListView был вставлен в PictureBox, а PictureBox был вставлен во Frame, а Frame вставлен в Form. Чтобы добраться до этой "иголки", пришлось сабклассить PictureBox, этого оказалось достаточно. Таблицу цветов строчек храню в их Tag-ах, т.е. достаточно Item.tag=vbBlue Listview1.Refresh =============================== но Refresh на 5-х контролах свинит, т.е.даже не рефреш, а попытка изменить Item/SubItem кот. Selected но вне зоны видимости программно. Т.е. у вас ListView напр. отображает строка=500, а selected строка=2 и программа меняет вам эту строку=2.(через vb-модель) Дык вот свинья в том, что этот гад перепрыгнет на вторую строчку. Если скажем у вас содержание ListView обновляется по таймеру(отдельные строки), то вы будете тянуть HScroll вниз, а эта скотина будет тянуть вас вверх. Посему пришлось накатать еще ряд ф-ций, плюс быстро понял, что если с SubItems/Image начинаешь работать через API, то это можно даже без лишних сабклассингов, но VB-модель надо хоронить с момента первого применения API, ибо двояко(через API и через VB) можно прочитать разве что Item.Text , попытки двойного обращения будут вести к бардаку в голове и программе. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. ================================ Хотелось бы тут вспомнить про Toolbar. AntonariyДмитрий77Хотелось бы каких-то идей-направлений (хотя бы).NM_CUSTOMDRAW Antonary, ну допустим влезу я во все это (первый опыт типа есть) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. И допустим я вымучаю все и вся и что-то сделаю. А всякие NM_<VISTA>DRAW или NM<XP>DRAW пошлют мой NMCUSTOMDRAW куда подальше. Простой пример для классики то есть, я ссылку давал, но XP/Vista стили действие того примера обнуляют, здесь небось тоже самое будет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2010, 04:18 |
|
||
|
|

start [/forum/topic.php?all=1&fid=60&tid=2159846]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
92ms |
get tp. blocked users: |
2ms |
| others: | 228ms |
| total: | 430ms |

| 0 / 0 |
