|
Как получить иконку IDI_EXCLAMATION при размере шрифтов 150%?
|
|||
---|---|---|---|
#18+
Дело в следующем. В приложении вместо системных MsgBox используются свои собственные сообщения, но иконки берутся системные таким способом: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Проблема в том, что на 7 винде при размере системных шрифтов 150% иконки таким макаром рисуются мелкие и растягиваются, в то время, как системное MsgBox "Test", vbExclamation выдает нормальную крупную. Прилагаю тестовый примерчик, для проверки надо увеличить шрифт системы до 150% и нажать тестовую кнопку для вызова системного сообщения или можно со скриншотом сравнить, который в главное окно вставил. Выдранные иконки будут мелкими, две из них растянуты до 48, а системная в сообщении будет крупная и нормальная. Есть идеи, как получить крупную иконку программно? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 23:05 |
|
Как получить иконку IDI_EXCLAMATION при размере шрифтов 150%?
|
|||
---|---|---|---|
#18+
Pantalone, LoadIcon function LoadIcon can only load an icon whose size conforms to the SM_CXICON and SM_CYICON system metric values. То бишь у тебя есть только 16x16 и 32х32 Код: vbnet 1.
Ну это ты просто растягиваешь наверно 32х32 до 48х48. Вытаскивай эту иконку с размером 48x48 откуда-нибудь (с 32-битными цветами ясно дело - в VB6 только через ResHaker и т.п.) и пихай в ресурсы, потом делай LoadImage. Хотя ты ж хочешь "системную". А на 8.1 и на 10 она уже будет другая. А вообще авторВ приложении вместо системных MsgBox используются свои собственные сообщения ИМХО, а на фига, сообщения "свои" а иконку хочу "системную". Используй тогда уж системные сообщения и не морочь себе голову. А если масштаб не 150 а 200 а 300, что будешь делать? 64х64 и 96х96 пытаться выуживать? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 01:07 |
|
Как получить иконку IDI_EXCLAMATION при размере шрифтов 150%?
|
|||
---|---|---|---|
#18+
Да уж. А из ресурсов системы тоже толком не вытащить, хотя размер в этом случае нормальный получается, но Windows 7 в Shell32.dll нашел кучу значков с восклицательным знаком, а в XP таких в этой библиотеке нет ни одной. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 01:14 |
|
Как получить иконку IDI_EXCLAMATION при размере шрифтов 150%?
|
|||
---|---|---|---|
#18+
Pantalone, Попробуй еще с вот этим поиграться SHGetStockIconInfo function SHSTOCKICONID enumeration SIID_WARNING - это твоя иконка Немного кода в помощь: Код: vbnet 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. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141.
М.б. вот это поможет SHGSI_SHELLICONSIZE Modifies the SHGSI_LARGEICON or SHGSI_SMALLICON values by causing the function to retrieve the Shell-sized icons rather than the sizes specified by the system metrics. Хотя почему-то думаю что больше чем 32х32 (SHGSI_LARGEICON) не выудишь. Я использовал только для выуживания маленьких иконок 16х16 (SHGSI_SMALLICON). Ну и да, это не для XP. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 01:58 |
|
Как получить иконку IDI_EXCLAMATION при размере шрифтов 150%?
|
|||
---|---|---|---|
#18+
PantaloneДа уж. А из ресурсов системы тоже толком не вытащить, хотя размер в этом случае нормальный получается, но Windows 7 в Shell32.dll нашел кучу значков с восклицательным знаком Вытаскивать из ресурсов проще всего программой IcoFX, последняя оф. бесплатная версия 1.6.4 В shell32.dll иконка такая есть, макс. размер/качество 48х48 - 32 Причем если хочешь без головной боли рисовать именно 48х48 и не ломать голову по каким принципам винды выбирают размер/качество, то в свой ресурс кладешь именно один размер 48х48 -32, грузишь ее через LoadImage в ориг. размере. Код: vbnet 1.
а потом без всяких опять же масштабирований рисуешь Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 02:29 |
|
Как получить иконку IDI_EXCLAMATION при размере шрифтов 150%?
|
|||
---|---|---|---|
#18+
Дмитрий, благодарю за советы и код, может пригодится еще. Удалось найти все же где винда хранит стандартные иконки, помог Dependency Walker в момент вызова этой иконки, они лежат в c:\windows\System32\USER32.DLL, пока буду оттуда тягать, масштабируются нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 02:45 |
|
Как получить иконку IDI_EXCLAMATION при размере шрифтов 150%?
|
|||
---|---|---|---|
#18+
Дмитрий77MAKEINTRESOURCE А нет ли примера как эта штуковина объявляется? Что-то не могу найти. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 02:59 |
|
Как получить иконку IDI_EXCLAMATION при размере шрифтов 150%?
|
|||
---|---|---|---|
#18+
PantaloneДмитрий77MAKEINTRESOURCE А нет ли примера как эта штуковина объявляется? Что-то не могу найти. Код: vbnet 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.
Вроде ничего не потерял (чтоб не было дальнейших вопросов). MAKEINTRESOURCE(140) ссылается на иконку с ID=140, но 140-именно цифра, а не строка "140". VB-шный редактор ресурсов кажется умеет только строки( чтоб делать цифры можно использовать C-шный из 6-й студии, хотя C++ 6.0 на Win7 воткнуть еще большая проблема чем VB6), причем VB6 умеет только 256 цветов. Т.е. впихиваешь 256(или 16)-цветные дубли, компилируешь с ними exe, потом через reshacker меняешь иконки на полноцветные (в готовом exe) через bat-файл (+скрипт) В общем это целая кухня, если освоить, то уже проще. В .Net этих проблем нет (правда других хватает). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2016, 05:50 |
|
|
start [/forum/topic.php?fid=60&msg=39253188&tid=2155511]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 143ms |
0 / 0 |