首页

文章

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

右边该按钮的属性设置里都有。
李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... 出师表高锰酸钾有画面了吗 2021年幼儿园新学期致家长一封信 电脑屏幕一条黑线怎么办? 销售代理商销售代理商的特点 商业代理商业代理的特征 如何看微信有没有开通微众银行 为什么微众没有开户 微众银行怎么开户 微众银行APP开户流程是什么? 唐古拉山海拔唐古拉山海拔是多少 怎么看待取消跳广场舞的人的退休金 如何选购新鲜的蓝田水柿? 恭城水柿柿树作用 创维洗衣机使用教程 创维全自动洗衣机怎么使用 自动开门器 狗羊属相婚姻相配吗 3岁的小孩不会说话怎么办 高手,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好吗? 借钱见人心还钱见人品是什么意思 借钱时,见人心;还钱时,见人品,你怎么看? 有这么一句话说借钱与还钱是怎么说的 何为借钱见人心,还钱见人品 要债见人心,还钱见人品,这句话该怎样理解? 借钱见人心,还钱看人品!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com