none
Прозрачность цвета текста метки. RRS feed

  • Вопрос

  •  Здравствуйте. Я столкнулся с такой проблемой. У меня в Windows 7 Home Premium установлена Visual studio Community 2013 и не работает следующий код: 
    Public Class Form1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Randomize()
            Label1.ForeColor = Color.FromArgb(CInt(Rnd() * 256), 0, 0, 0)
        End Sub
    End Class.
    Прозрачность текста не меняется, а цвет текста удаётся менять задавая случайные параметры. По-моему этот код должен работать. Не могу понять, в чём причина?
    • Изменено Sergey_Bogatov 25 мая 2015 г. 20:14 Дополнил тест.

Ответы

  • Добрый день. Да правильно говорить альфа канал, который отвечает за прозрачность цвета. Если применить пример выше к фону, то он работает, то есть фон становится прозрачным, а для цвета текста это не работает. Мне это не понятно. Может быть это свойство где-то переопределяется? 

    Спасибо Вам, Алексей Лосев, за помощь.  

    • Изменено Sergey_Bogatov 26 мая 2015 г. 13:50
    • Помечено в качестве ответа Sergey_Bogatov 26 мая 2015 г. 20:09
  • В WinForms можно вручную рисовать текст:

    var Label1 = new Label
    {
        Parent = this,
        Font = new Font("Arial", 32, FontStyle.Bold),
        Height = 50,
        Width = 250,
        AutoSize = false,
        BorderStyle = BorderStyle.FixedSingle
    };
    
    Label1.Paint += (o, e) =>
    {
        e.Graphics.DrawString("Some Text", Label1.Font, new SolidBrush(Color.FromArgb(100, 0, 0, 0)), 0, 0);
    };

    Пример на C#.

    Отрисовываем текст нужной кистью с прозрачностью в событии Paint.

    Свойство Text должно быть пустым. Свойство AutoSize устанавливаем в False, иначе Label сожмётся, т. к. Text пустой.


    Причём не обязательно использовать контрол типа Label, т. к. мы рисуем вручную. Можно взять Panel или другой подходящий компонент.
    • Изменено Petalvik 26 мая 2015 г. 15:54
    • Помечено в качестве ответа Sergey_Bogatov 26 мая 2015 г. 20:09

Все ответы

  • Добрый день.

    Вы не прозрачность меняете, а альфа канал. Вам можно попробовать вычислить разницу между черным и цветом фона и сдвигаться от черного к цвету фона для имитации прозрачности.

    Отвечающий
  • Добрый день. Да правильно говорить альфа канал, который отвечает за прозрачность цвета. Если применить пример выше к фону, то он работает, то есть фон становится прозрачным, а для цвета текста это не работает. Мне это не понятно. Может быть это свойство где-то переопределяется? 

    Спасибо Вам, Алексей Лосев, за помощь.  

    • Изменено Sergey_Bogatov 26 мая 2015 г. 13:50
    • Помечено в качестве ответа Sergey_Bogatov 26 мая 2015 г. 20:09
  • В WinForms можно вручную рисовать текст:

    var Label1 = new Label
    {
        Parent = this,
        Font = new Font("Arial", 32, FontStyle.Bold),
        Height = 50,
        Width = 250,
        AutoSize = false,
        BorderStyle = BorderStyle.FixedSingle
    };
    
    Label1.Paint += (o, e) =>
    {
        e.Graphics.DrawString("Some Text", Label1.Font, new SolidBrush(Color.FromArgb(100, 0, 0, 0)), 0, 0);
    };

    Пример на C#.

    Отрисовываем текст нужной кистью с прозрачностью в событии Paint.

    Свойство Text должно быть пустым. Свойство AutoSize устанавливаем в False, иначе Label сожмётся, т. к. Text пустой.


    Причём не обязательно использовать контрол типа Label, т. к. мы рисуем вручную. Можно взять Panel или другой подходящий компонент.
    • Изменено Petalvik 26 мая 2015 г. 15:54
    • Помечено в качестве ответа Sergey_Bogatov 26 мая 2015 г. 20:09
  • Спасибо, Petalvik. У меня с С# плохи дела, но всё равно спасибо.