|
Как (самому) нарисовать заливку в стиле Vista-Explorer?
|
|||
---|---|---|---|
#18+
Нарисовать надо "самому", т.к. нужно применить независимо от тек. стиля, не говоря о том, что волшебное слово Код: plaintext
Пытаюсь делать это с помощью CreateGradientBackground (спасибо Бенедикту, исходник ф-ции напр. тут: http://www.sql.ru/forum/actualfile.aspx?id=8878628 ) Код: plaintext 1. 2. 3. 4. 5.
Код: plaintext 1.
Т.е. либо цвета напутал, либо все же там 4 цвета, а не три. Анализировал цвета спец. программой: Верхняя полоска: 12695690 10456648 Нижняя полоска: 7824148 11247700 Т.е. так понимаю в центре переход не градиентом, а ступенькой: 10456648=>7824148 Есть еще пример как это рисовать: http://www.vbforums.com/showthread.php?t=547618 Но он не на vb6 и там цвета указаны так: Код: plaintext 1. 2. 3. 4. 5. 6.
Пытался мудрить: Код: 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. 50. 51. 52. 53. 54. 55. 56.
Код: plaintext 1. 2.
Т.е. вопрос как бы правильно этот стиль нарисовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2010, 18:34 |
|
Как (самому) нарисовать заливку в стиле Vista-Explorer?
|
|||
---|---|---|---|
#18+
Да, на картинке справа, крайне модный последние пару лет стиль, состоящий из двух градиентов. "Анализирую цвета спец. программой" - это Gimp или Photoshop вы так обозвали? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2010, 18:42 |
|
Как (самому) нарисовать заливку в стиле Vista-Explorer?
|
|||
---|---|---|---|
#18+
Edd.Dragonэто Gimp или Photoshop вы так обозвали? Всего лиль какой-то ColorPic 4.1. Но вопрос как нарисовать и какие все же правильные 4 цвета. Функция предложенная Бенедиктом 3-х ступенчатая. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2010, 18:49 |
|
Как (самому) нарисовать заливку в стиле Vista-Explorer?
|
|||
---|---|---|---|
#18+
Дмитрий77Edd.Dragonэто Gimp или Photoshop вы так обозвали? Всего лиль какой-то ColorPic 4.1. Но вопрос как нарисовать и какие все же правильные 4 цвета. Функция предложенная Бенедиктом 3-х ступенчатая. Правильные цвета берем конечно же на концах градиентов. Код: plaintext 1.
а как нарисовать - не знаю. WinAPI и подобные ему API для стилизации форм не помню. Если отдельно два градиента нарисовать некак, а на весь контрол бекграунд рисуется одной функцией, то никак. Тогда как варианты: - растянутая картинка (как обычно и делается или делалось в XP); - готовите картинку нужного размера во время работы проги один раз и в качестве бекграунда используете ее (какими функциями - это уже к знатокам API бейсика). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2010, 19:00 |
|
Как (самому) нарисовать заливку в стиле Vista-Explorer?
|
|||
---|---|---|---|
#18+
Ну, вот так то получше. Как я это сделал, прилагается. Сначала было попытался содрать отсюда. Apply a Gradient to Any Control that Has an hDC Но быстро послал этот пример, т.к. он рисует на hdc напрямую, что влечет кучу безобразий с перерисовками, эффектом ластика и т.п. Поэтому переделал 3-ч ступенчатую конструкцию "от Бенедикта", упомянутую выше в 2-х ступенчатую (ломать не строить). 4-х ступенчатая оказалась не позубам, хотя не сомневаюсь это не очень сложно если шаришь. Так что два Picturebox друг под другом Ваши цвета из hex в long перевести не сумел. Совет AntonariyНа будущее, 0х = &H. данный когда-то /topic/757817&hl=%ef%e5%f0%e5%e2%e5%f1%f2%e8 чего-то не прокатил, так что брал "свои наработки". Но, на самом деле, недаром лучше вызывать родной стиль, если это возможно... Во-первых в нижней полоске градиент нелинейный, т.е. в оригинале темного больше. Во-вторых там еще есть градиент по горизонтали, и любая прога-анализатор вам это покажет. Но, если это "просто полоска", а не тулбар, то сгодится и так. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2010, 04:58 |
|
Как (самому) нарисовать заливку в стиле Vista-Explorer?
|
|||
---|---|---|---|
#18+
Дмитрий77, градиент можно делать не только прямоугольниками, но и произвольным образом, разбивая поверхность на треугольники. В частности, эффекта как в полосе "Organize - Views", при котором заливка меняется и по вертикали, и горизонтали, можно попытаться достичь при наличии по крайней мере двух больших (полоса покрывает сравнительно небольшую часть их площади) треугольников (горизонтальная линия раздела - отрезок их общего ребра), или четырёх и более маленьких треугольников. В качестве иллюстрации выкладываю пример параболического градиента. P.S. Если когда-либо имели дело с DirectX, то методика подготовки данных очень похожа на таковую для вызова Direct3DDevice.DrawIndexedPrimitive(D3DPT_TRIANGLELIST, ...). P.P.S. Если будете сильно мучить GradientFill(), то функция, будучи аппаратно ускоренной, при некоторых условиях способна обрушить ОС, имейте ввиду (как и DirectX-ные). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2010, 20:59 |
|
Как (самому) нарисовать заливку в стиле Vista-Explorer?
|
|||
---|---|---|---|
#18+
Бенедикт, Энто все красиво, но озвученную задачу хотя бы из четырех цветов (без учета горизонтали), но одной функцией сделать можно? Т.е. наложить 2 градиента на один битмап. Приведенные 2 полоски это конечно сойдет, но два кулбара под один тулбар подкладывать же не выйдет например. С кнопкой кстати ничего не посоветуете? Как облагородить кнопку которая поверх картинки? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 06:25 |
|
Как (самому) нарисовать заливку в стиле Vista-Explorer?
|
|||
---|---|---|---|
#18+
Дмитрий77, ну есть же инструментарий. Прямая сетка, две полосы, линейная интерполяция цвета в точках сетки. Конечно, 100%-ного попадания не получится, в оригинале, кстати, ещё и граница осветлена, но довольно близко к. По кнопке ничего не скажу, ибо конец года, не до экспериментов. Попробуйте посмотреть, будет ли тот же эффект, если кнопку создавать через CreateWindowEx(). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 13:43 |
|
Как (самому) нарисовать заливку в стиле Vista-Explorer?
|
|||
---|---|---|---|
#18+
Дмитрий77, а, ну и Кэп Очевидность подсказывает: если где видите хорошую, годную кнопку, натравите на неё Spy++. Вдруг что найдётся. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2010, 13:47 |
|
Как (самому) нарисовать заливку в стиле Vista-Explorer?
|
|||
---|---|---|---|
#18+
Бенедиктну есть же инструментарий. Прямая сетка, две полосы, линейная интерполяция цвета в точках сетки... Это для Вас инструментарий. Для меня - хождение по мукам. Несколько часов ушло чтоб сделать из Вашего примера функцию CreateGradientBackComplex(), кот. относительно легко применима чтоб заполнить любой контрол в размер....как смог (результат прилагается). Долго думал что есть Код: plaintext 1.
Но не понял зачем оно там. Из-за этого bSetup вторая картинка никогда не нарисуется. Не знаю зачем она там, убрать не рискнул, пристукнул ее частично путем добавления ложных вызовов перед вызовом функций Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
БенедиктP.P.S. Если будете сильно мучить GradientFill(), то функция, будучи аппаратно ускоренной, при некоторых условиях способна обрушить ОС, имейте ввиду (как и DirectX-ные).... Задумался над Вашими словами, уже ведь тупо "наловчился" применять где не лень: Код: plaintext 1. 2. 3. 4.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
По идее Form_Paint не нужен если AutoRedraw, но мне понравилось рисовать еще большие полноцветные иконки на hdc поверх фона: Код: plaintext 1. 2. 3.
По хорошей идее иконку думаю можно сразу нарисовать на виртуальное hdc при создании битмапа, т.е. внутрь функции CreateGradientBackground, но это как нибудь потом. Единственное, в одном месте я таки оставил изначальный вариант с перегенерацией картинки, потому что размер PictureBox меняется при изменении размера формы и фон-подложку надо регенерировать. И даже не убиваю в конце. Вроде фурычит и через сутки-двое не падает. Кстати вопрос. Надо ли делать? Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 04:15 |
|
|
start [/forum/topic.php?fid=60&msg=37010058&tid=2159147]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 320ms |
total: | 443ms |
0 / 0 |