Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Просто хороший человек
 Аватар для sannee
392 / 182 / 24
Регистрация: 26.04.2011
Сообщений: 434

Можно ли добиться полупрозрачности кнопки

24.09.2011, 19:23. Показов 2403. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли добиться полупрозрачности кнопки? и как это можно организовать...
Заранее спасибо...

Добавлено через 22 часа 49 минут
Что, даже нет предположений как это можно сделать??
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2011, 19:23
Ответы с готовыми решениями:

Как добиться полупрозрачности элементов управления
Мне надо сделать кнопку полу-прозрачной. Какой параметр этому соответвует?

Можно ли добиться DDoS?
Если написать программу client/server, Программа client - регистрируется на неком сайте, где распознал каптчу, чрез WinSock,...

можно ли добиться ежедневной индексации
возник такой вопрос, можно ли (и если да то как?) добиться того что бы робот яндекса заходил на сайт каждый день (ну или почти каждый) и...

6
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
24.09.2011, 19:29
Задать фон кнопки с нужным параметром альфа канала.
0
Просто хороший человек
 Аватар для sannee
392 / 182 / 24
Регистрация: 26.04.2011
Сообщений: 434
24.09.2011, 21:02  [ТС]
А можно поподробней... как это можно сделать?
0
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
24.09.2011, 21:46
насчет полупрозрачности именно кнопки я не знаю, но можно создать картинку с альфа каналом к примеру 50%, установить у pictureBox свойство BackColor = Transparent и наслаждаться полупрозрачностью.

кстати более удачным вариантом, как мне кажется, будет использовать MenuStrip, Item-у которого так же можно присвоить изображение с альфа каналом, но MenuStrip снимет необходимость как то изменять внешний вид при наведении на кнопку, тем самым показывая что она кликабельна.
1
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
24.09.2011, 22:57
Всё же я ошибся. С кнопкой так сделать нельзя. Попробуйте или сделать свой элемент управления, или придется использовать WPF.
1
21 / 21 / 0
Регистрация: 30.08.2012
Сообщений: 122
Записей в блоге: 5
06.12.2012, 00:46
Как задать эту альфа-картинку и что это вообще?
0
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
06.12.2012, 02:34
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Ох откопали же) когда я отвечал, я не умел создавать собственные элементы управления, вот я быстренько набросал код для кнопки с прозрачностью. Текст на кнопке в методе ButtonRender.DrawButton как то не очень рисуетcя, поэтому я применил сглаживание текста AntiAlias, а он на маленьких шрифтах хуже себя ведет, чем стандартный (зато на больших лучше), поэтому наверно есть смысл прорисовывать текст вручную, по идее должно помочь, лень пробовать.
C#
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
public class TransparentButton:Control
    {
        double alpha = 0.5;
        bool focused = false;
 
        public TransparentButton()
        {
            SetStyle(ControlStyles.SupportsTransparentBackColor|ControlStyles.OptimizedDoubleBuffer, true);
            Invalidate();
        }
 
        private unsafe Image GetTransparentImage(Image original, double alpha)
        {
            Bitmap bmp = new Bitmap(original);
            System.Drawing.Imaging.BitmapData bmp_data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            byte* start_byte = (byte*)bmp_data.Scan0;
            int count_bytes = bmp_data.Stride * bmp.Height;
            for (int i = 0; i < count_bytes; i += 4)
                if (*(start_byte + i + 3) != 0)
                    *(start_byte + i + 3) = (byte)(*(start_byte + i + 3) * alpha);
            bmp.UnlockBits(bmp_data);
            return bmp;
        }
 
        protected override void OnMouseLeave(EventArgs e)
        {
            focused = false;
            this.Invalidate();
            base.OnMouseLeave(e);
        }
 
        protected override void OnMouseEnter(EventArgs e)
        {
            focused = true;
            this.Invalidate();
            base.OnMouseEnter(e);
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {            
            Bitmap bmp = new Bitmap(this.Width, this.Height);
            Graphics g = Graphics.FromImage(bmp);
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
            if (!focused)
            {
                ButtonRenderer.DrawButton(g, new Rectangle(0, 0, this.Width, this.Height), this.Text, this.Font, TextFormatFlags.VerticalCenter | TextFormatFlags.WordEllipsis | TextFormatFlags.HorizontalCenter, focused, System.Windows.Forms.VisualStyles.PushButtonState.Normal);
                bmp = new Bitmap(GetTransparentImage(bmp, alpha));
            }
            else
                ButtonRenderer.DrawButton(g, new Rectangle(0, 0, this.Width, this.Height), this.Text, this.Font, TextFormatFlags.VerticalCenter | TextFormatFlags.WordEllipsis | TextFormatFlags.HorizontalCenter, focused, System.Windows.Forms.VisualStyles.PushButtonState.Hot);
            e.Graphics.DrawImage(bmp,0,0,this.Width,this.Height);
            base.OnPaint(e);
        }
    }
Изображение с альфа каналом (при условии, что поддерживается частичная прозрачность) это 32-ух битное изображение (тут я могу конечно ошибаться на счет того, что именно 32-ух битное), где каждый пиксель несет информацию о RGB составляющей + Alpha канал (0 - 255, 0 - абсолютно прозрачный). У гиф изображений тоже поддерживается прозрачность, но частичной прозрачности не поддерживается, так гифке не обязательно быть 32-ух битной, там слегка другая технология.

да, забыл кстати, она прозрачна условно, т.е другие компоненты через кнопку не просматриваются только фон формы, можно сделать так что бы даже контролы были видны, но я так на вскидку не вспомню в чем прикол. Еще есть ButtonRenderer.DrawParentBackground возможно это что то рядом лежащее, не знаю, я не очень увлекаюсь этими прозрачностями, уже перегорел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.12.2012, 02:34
Помогаю со студенческими работами здесь

Нужен PR 5, как можно добиться?
доброго времени ) может быть, кто может подсказать хотя бы максимально приближенные к реальности цифры. по раскладу: есть...

Сохранение листа в отдельную книгу. Как добиться удаления макроса и кнопки его запуска на копии?
Всем доброе утро. Помогите пожалуйста решить несколько задач по данному коду: 1. Нужно, чтобы при сохранении листа в новую книгу, на...

Можно ли несколькими операциями добиться такой ситуации?
12 единиц и нулей стоят по кругу. Изначально одно из них единица, остальные нули. Разрешено менять в пятерке стоящих подряд все числа на...

Старенький компьютер - как можно добиться большей производительности ?
Здравствуйте, уважаемые форумчане,подскажите пожалуйста,имеется компьютер :core2duo e7300,geforce gt9800 1gb ,5 гб оперативы,винда 7...

Можно ли только перестановкой уравнений добиться преобладания диагоналей элементов
Подскажите в задаче! Правила, 5.18. Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru