Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > системные цвета


Автор: SOY 28.4.2005, 23:35
как через VB узнать цветовую схему?
GetSysColor Lib "user32" (ByVal nIndex As Long) As Long - возвращает только системные цвета.

Автор: Guest 28.4.2005, 23:57
какую цветовую схему?
ты имеешь ввиду напр. forecolor или backcolor формы и т.д.? тык это прям в свойствах каждого объекта есть.

Автор: SOY 29.4.2005, 23:19
на рабочем столе щелкни правой кнопкой мыши и найди вкладку "Оформление". Там увидишь. В WinXP есть три цветовых схемы : Стандартная (Голубая), Оливковая, Серебристая.
Так мне нужно через VB узнать какая из этих схем выбрана.
Заранее спасибо!

Автор: Naghual 30.4.2005, 12:50
Текущая схема хранится в реестре по адресу: HKEY_CURRENT_USER\Control Panel\Current
в ключе: Color Schemes
А работа с реестром рассматривалась уже не раз на этом форуме. Вот хотябы http://forum.vingrad.ru/index.php?showtopic=49776.

Автор: Gannibal 3.5.2005, 16:26
Код

  Dim names() As String
  Dim values As Array

  Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    names = [Enum].GetNames(GetType(System.Drawing.KnownColor))
    values = [Enum].GetValues(GetType(System.Drawing.KnownColor))
    Dim i As Integer
    With ComboBox1
      .DrawMode = DrawMode.OwnerDrawFixed
      AddHandler .DrawItem, AddressOf PaintColor
      For i = 0 To names.Length - 1
        .Items.Add(String.Format("{0} = {1}", names(i), CInt(values.GetValue(i))))
      Next
    End With
  End Sub

  Private Sub PaintColor(ByVal sender As Object, ByVal e As DrawItemEventArgs)
    Dim g As Graphics = e.Graphics
    e.DrawBackground()
    Dim rectangle As Rectangle = New Rectangle(2, e.Bounds.Top + 2, _
        e.Bounds.Height, e.Bounds.Height - 4)
    e.Graphics.FillRectangle(New SolidBrush(System.Drawing.Color.FromName(names(e.Index))), rectangle)
    e.Graphics.DrawString(names(e.Index), e.Font, System.Drawing.Brushes.Black, _
        New RectangleF(e.Bounds.X + rectangle.Width, e.Bounds.Y, _
        e.Bounds.Width, e.Bounds.Height))
    e.DrawFocusRectangle()
  End Sub 

Автор: SOY 6.5.2005, 22:08
Чудненько! Спасибо всем!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)