powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как изменить цвет текста на кнопке? Стандартной.
4 сообщений из 4, страница 1 из 1
Как изменить цвет текста на кнопке? Стандартной.
    #37928840
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема в чем:
Сделал как здесь:
Как облагородить кнопку которая поверх картинки?
Наложил кнопку поверх картинки.
Ну научился картинки на кнопке рисовать:
Код: vbnet
1.
2.
        SetWindowLong Com1.hwnd, GWL_STYLE, GetWindowLong(Com1.hwnd, GWL_STYLE) Or BS_ICON
        SendMessage Com1.hwnd, BM_SETIMAGE, IMAGE_ICON, ByVal lngIcon1


Обошел даже глюк на XP теме (кнопка превращается в классику при попытке сделать Or BS_ICON):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
   Case WM_NOTIFY
      Static lvcd As NMLVCUSTOMDRAW
      MoveMemory lvcd, ByVal lParam, Len(lvcd)   ' every structs' member is a Long
      Select Case lvcd.nmcd.hdr.code
        Case NM_CUSTOMDRAW
...
                  If lvcd.nmcd.hdr.hwndFrom = Form1.Com1.hwnd Then
                    If state_id = PBS_DISABLED Then
                      DrawIconEx lvcd.nmcd.hdc, x, y, lngIcon1_bw, 24, 24, 0, 0, DI_NORMAL
                    Else
                      DrawIconEx lvcd.nmcd.hdc, x, y, lngIcon1, 24, 24, 0, 0, DI_NORMAL


Дальше сделал кнопки прозрачными(работает только на 7-ке, воруется стиль 7-рочной кнопки "Свернуть все окна")
Код: vbnet
1.
    SetWindowTheme Com1.hwnd, StrPtr("VerticalShowDesktop"), 0



Выглядит здорово, но шрифт текста черный - хотелось бы белый или поиграться. (На фоне темной картинки буков почти не видно).
==================
Что пробовал:
1) Вклиниться в процедуру которой подрисовываю background
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  Select Case Msg
    Case WM_CTLCOLORBTN:
      SetBkMode wParam, TRANSPARENT
      GetWindowRect lParam, rc
      tPt.x = rc.Left
      tPt.y = rc.Top
      MapWindowPoints 0, GetParent(lParam), tPt, 2
      rc.Left = tPt.x
      rc.Top = tPt.y
      SetBrushOrgEx wParam, -rc.Left, -rc.Top, tPt
      NewDigitsWindowProc = hbshBackDigits
      Exit Function
    ' ======================================================


т.е. пытался воткнуть туда
SetTextColor wParam, RGB(X, Y, Z)
-не получилось

2) Пытался опять же из CUSTOMDRAW
Код: vbnet
1.
2.
3.
                       Case CDDS_PREPAINT
                        Case CDDS_ITEMPREPAINT
                           lvcd.clrText =


Но это увы не listview, где можно строчки раскрасить

3) Пытался там же рисовать этот текст на hdc
Код: vbnet
1.
2.
3.
4.
                      Dim sPrintText As String
                      sPrintText = "Print this text"
                      SetTextColor lvcd.nmcd.hdc, vbBlue
                      DrawText lvcd.nmcd.hdc, sPrintText, Len(sPrintText), rc, DT_TOP 'Or DT_WORDBREAK


Не рисует текст вообще.

Все примеры VB6 что находил используют стиль кнопки Graphical -это порнушка.

В "Калькулятор" цвет надписей как-то изменен. Судя по тому, что цифры на классике не прыгают при нажатии (на классике должны), рисуется на hdc.

Могу конечно вставить иконки с текстом Or BS_ICON либо рисовкой на hdc кнопки, но это накладно и цвет оперативно менять нельзя (не для всех же цветов/кнопок надписи на иконках делать).
...
Рейтинг: 0 / 0
Как изменить цвет текста на кнопке? Стандартной.
    #37928852
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фу, кажется нашел ответ.
TextOut
Button Colors With Windows API

Вот так рисует синий текст:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Private Declare Function TextOut Lib "gdi32.dll" Alias "TextOutA" _
  (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _
  ByVal lpString As String, ByVal nCount As Long) As Long


    Case WM_NOTIFY
      Static lvcd As NMLVCUSTOMDRAW
      MoveMemory lvcd, ByVal lParam, Len(lvcd)   ' every structs' member is a Long
      Select Case lvcd.nmcd.hdr.code
        Case NM_CUSTOMDRAW
...
              CDDS_PREPAINT

                      Dim sPrintText As String
                      sPrintText = "Print this text"
                      SetBkMode wParam, TRANSPARENT
                      SetTextColor lvcd.nmcd.hdc, vbBlue
                      TextOut lvcd.nmcd.hdc, 0, 0, sPrintText, Len(sPrintText)



Как из родной надписи сделать цветную думаю теперь разберусь.
...
Рейтинг: 0 / 0
Как изменить цвет текста на кнопке? Стандартной.
    #37931006
ATC 999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий77,

как с тобой можно связаться? хочу заказать тебе одну программу. kadet_spb@list.ru
...
Рейтинг: 0 / 0
Как изменить цвет текста на кнопке? Стандартной.
    #37931118
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ATC 999,

Заинтриговали. Я Вам отписался со своего e-mail. Вообще я на заказ очень редко что-то делаю. Объясните что надо и почему именно от меня. Телефония?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как изменить цвет текста на кнопке? Стандартной.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]