问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

VB按钮如何设置颜色和按钮文字设置颜色

发布网友 发布时间:2022-04-19 12:30

我来回答

2个回答

热心网友 时间:2023-07-12 18:23

首先command的style要设为1,否则无法改变

然后在backcolor设置颜色

按钮的字体颜色不能改
如果想改字体颜色,简单点可以用image做按钮。

如果一定要,请看:

在工程中添加以下模块(Mole): 
Mole modExtButton.bas 

Option Explicit 

'================================================================== 
' modExtButton.bas 

' 本模块可让你改变命令按钮的文本颜色。 
' 使用方法: 

' - 在设计时将文本的Style设为Graphical. 

' - 随意设定背景色和图象属性. 

' - 在Form_Load中调用 SetButton : 
' SetButton Command1.hWnd, vbBlue 
' (你可以任意次的调用该过程甚至不必先调用 RemoveButton.) 

' - 在Form_Unload中调用 RemoveButton : 
' RemoveButton Command1.hWnd 

'================================================================== 

Private Type RECT 
Left As Long 
Top As Long 
Right As Long 
Bottom As Long 
End Type 

Private Declare Function GetParent Lib "user32" _ 
(ByVal hWnd As Long) As Long 

Private Declare Function GetWindowLong Lib "user32" Alias _ 
"GetWindowLongA" (ByVal hWnd As Long, _ 
ByVal nIndex As Long) As Long 
Private Declare Function SetWindowLong Lib "user32" Alias _ 
"SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, _ 
ByVal dwNewLong As Long) As Long 
Private Const GWL_WNDPROC = (-4) 

Private Declare Function GetProp Lib "user32" Alias "GetPropA" _ 
(ByVal hWnd As Long, ByVal lpString As String) As Long 
Private Declare Function SetProp Lib "user32" Alias "SetPropA" _ 
(ByVal hWnd As Long, ByVal lpString As String, _ 
ByVal hData As Long) As Long 
Private Declare Function RemoveProp Lib "user32" Alias _ 
"RemovePropA" (ByVal hWnd As Long, _ 
ByVal lpString As String) As Long 

Private Declare Function CallWindowProc Lib "user32" Alias _ 
"CallWindowProcA" (ByVal lpPrevWndFunc As Long, _ 
ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, _ 
ByVal lParam As Long) As Long 

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _ 
(Destination As Any, Source As Any, ByVal Length As Long) 

'Owner draw constants 
Private Const ODT_BUTTON = 4 
Private Const ODS_SELECTED = &H1 
'Window messages we're using 
Private Const WM_DESTROY = &H2 
Private Const WM_DRAWITEM = &H2B 

Private Type DRAWITEMSTRUCT 
CtlType As Long 
CtlID As Long 
itemID As Long 
itemAction As Long 
itemState As Long 
hwndItem As Long 
hDC As Long 
rcItem As RECT 
itemData As Long 
End Type 

Private Declare Function GetWindowText Lib "user32" Alias _ 
"GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, _ 
ByVal cch As Long) As Long 
'Various GDI painting-related functions 
Private Declare Function DrawText Lib "user32" Alias "DrawTextA" _ 
(ByVal hDC As Long, ByVal lpStr As String, ByVal nCount As Long, _ 
lpRect As RECT, ByVal wFormat As Long) As Long 
Private Declare Function SetTextColor Lib "gdi32" (ByVal hDC As Long, _ 
ByVal crColor As Long) As Long 
Private Declare Function SetBkMode Lib "gdi32" (ByVal hDC As Long, _ 
ByVal nBkMode As Long) As Long 
Private Const TRANSPARENT = 1 

Private Const DT_CENTER = &H1 
Public Enum TextVAligns 
DT_VCENTER = &H4 
DT_BOTTOM = &H8 
End Enum 
Private Const DT_SINGLELINE = &H20 


Private Sub DrawButton(ByVal hWnd As Long, ByVal hDC As Long, _ 
rct As RECT, ByVal nState As Long) 

Dim s As String 
Dim va As TextVAligns 

va = GetProp(hWnd, "VBTVAlign") 

'Prepare DC for drawing 
SetBkMode hDC, TRANSPARENT 
SetTextColor hDC, GetProp(hWnd, "VBTForeColor") 

'Prepare a text buffer 
s = String$(255, 0) 
'What should we print on the button? 
GetWindowText hWnd, s, 255 
'Trim off nulls 
s = Left$(s, InStr(s, Chr$(0)) - 1) 

If va = DT_BOTTOM Then 
'Adjust specially for VB's CommandButton control 
rct.Bottom = rct.Bottom - 4 
End If 

If (nState And ODS_SELECTED) = ODS_SELECTED Then 
'Button is in down state - offset 
'the text 
rct.Left = rct.Left + 1 
rct.Right = rct.Right + 1 
rct.Bottom = rct.Bottom + 1 
rct.Top = rct.Top + 1 
End If 

DrawText hDC, s, Len(s), rct, DT_CENTER Or DT_SINGLELINE _ 
Or va 

End Sub 

Public Function ExtButtonProc(ByVal hWnd As Long, _ 
ByVal wMsg As Long, ByVal wParam As Long, _ 
ByVal lParam As Long) As Long 

Dim lOldProc As Long 
Dim di As DRAWITEMSTRUCT 

lOldProc = GetProp(hWnd, "ExtBtnProc") 

ExtButtonProc = CallWindowProc(lOldProc, hWnd, wMsg, wParam, lParam) 

If wMsg = WM_DRAWITEM Then 
CopyMemory di, ByVal lParam, Len(di) 
If di.CtlType = ODT_BUTTON Then 
If GetProp(di.hwndItem, "VBTCustom") = 1 Then 
DrawButton di.hwndItem, di.hDC, di.rcItem, _ 
di.itemState 

End If 

End If 

ElseIf wMsg = WM_DESTROY Then 
ExtButtonUnSubclass hWnd 

End If 

End Function 

Public Sub ExtButtonSubclass(hWndForm As Long) 

Dim l As Long 

l = GetProp(hWndForm, "ExtBtnProc") 
If l <> 0 Then 
'Already subclassed 
Exit Sub 
End If 

SetProp hWndForm, "ExtBtnProc", _ 
GetWindowLong(hWndForm, GWL_WNDPROC) 
SetWindowLong hWndForm, GWL_WNDPROC, AddressOf ExtButtonProc 

End Sub 

Public Sub ExtButtonUnSubclass(hWndForm As Long) 

Dim l As Long 

l = GetProp(hWndForm, "ExtBtnProc") 
If l = 0 Then 
'Isn't subclassed 
Exit Sub 
End If 

SetWindowLong hWndForm, GWL_WNDPROC, l 
RemoveProp hWndForm, "ExtBtnProc" 

End Sub 

Public Sub SetButton(ByVal hWnd As Long, _ 
ByVal lForeColor As Long, _ 
Optional ByVal VAlign As TextVAligns = DT_VCENTER) 

Dim hWndParent As Long 

hWndParent = GetParent(hWnd) 
If GetProp(hWndParent, "ExtBtnProc") = 0 Then 
ExtButtonSubclass hWndParent 
End If 

SetProp hWnd, "VBTCustom", 1 
SetProp hWnd, "VBTForeColor", lForeColor 
SetProp hWnd, "VBTVAlign", VAlign 

End Sub 

Public Sub RemoveButton(ByVal hWnd As Long) 

RemoveProp hWnd, "VBTCustom" 
RemoveProp hWnd, "VBTForeColor" 
RemoveProp hWnd, "VBTVAlign" 

End Sub 


'然后回到FORM中: 
'添加CommandButton,不必更改它们的名称,将它们的Style设为Graphical,给第3个按钮设置一幅图片。 
'CommandButton也可以放置在一个容器如PictureBox或Frame中,模块会判断,如果需要的话将CommandButton的容器也子类化。 

'在Form中的代码: 
Private Sub Form_Load() 

'Initialize each button color. 
SetButton Command1.hWnd, vbRed 
SetButton Command2.hWnd, &H8000& '深绿色 
'Assign this one a DT_BOTTOM alignment because 
SetButton Command3.hWnd, vbBlue, DT_BOTTOM '含有图片,将文本放置在按钮底部 
SetButton Command4.hWnd, &H8080& '暗棕* 

End Sub 

Private Sub Form_Unload(Cancel As Integer) 

'手动解除按钮的子类化 
'这并不是必须的 
RemoveButton Command1.hWnd 
RemoveButton Command2.hWnd 
RemoveButton Command3.hWnd 
RemoveButton Command4.hWnd 

End Sub 

For m = 0 To 9 
SetButton CmdNum(m).hWnd, vbBlue 
Next 
For n = 1 To 4 
SetButton CmdCal(n).hWnd, vbRed 
Next 
For l = 2 To 4 
SetButton CmdOth(l).hWnd, vbRed 
Next

热心网友 时间:2023-07-12 18:23

右边该按钮的属性设置里都有。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
sometimesome timesometimessome times的区别 瓜地的午餐怎么造句 夏季宝宝不吃饭应该怎么办 狼人杀里面的白狼王模式怎么玩? 狼人杀白狼王和骑士:操作至上的高效玩法指南 狼人杀手游白狼王怎么玩 详细玩法攻略 狼人杀 狼人杀的白狼王怎么玩? 国产轮毂品牌有哪些 国产轮毂品牌哪个品牌好 国内轮毂有哪些品牌 岗位和职务怎么填 高手,stm32F103VBT6和stm32VET6的引脚功能是否一样 ek220的标况体积是指vb还是vbt VbT数字货币今天11月18为什么跌了20/100? 化学键理论中,VBT,CFT,MOT,LFT是指什么 天然气vb和vm和vbt表示什么意思 什么是VBT理论 华为8X 8A 8C 8MAX哪个厉害? 怎么查看已用流量? 手机怎么查看流量 摄徒A8与x6有多大区别? 零基预算的步骤 什么事零基预算? 零基预算的特点 零基定额管控? 零基预算和增量预算的区别 零基础学英语怎么学? 零基预算的程序包含哪几种 请问增量预算和零基预算是什么意思? 零基预算具有哪些特点?优点,缺点何在 什么是零基预算? 标准金属罐 20L标准体积怎么求? 高手stm32F103VBT6和stm32VET6的引脚功能是否一样 vb中生成exe文件 如何修改VB程序的Command控件字体颜色? 暗黑破坏神2 毁灭之王的各种游戏代码分别是什么 在vb调整命令按钮字体颜色的语言,急 如何将stm32f103vbt6的程序移植到stm32f103c8t6上 STM32f103vbt6 与STM32f103zet6编程方法都一样吗 stm32f103vbt6开发板原理图 华为荣耀8×和8c屏幕一不一样? 微信置顶聊天怎么取消 荣耀8c和荣耀畅玩8c是同一种手机吗? 华为荣耀好吗8C好吗? 借钱见人心还钱见人品是什么意思 借钱时,见人心;还钱时,见人品,你怎么看? 有这么一句话说借钱与还钱是怎么说的 何为借钱见人心,还钱见人品 要债见人心,还钱见人品,这句话该怎样理解? 借钱见人心,还钱看人品!