在vb调整命令按钮字体颜色的语言,急

把命令按钮的字改成蓝字,我初中水平,不要回答太复杂
2024-11-02 09:37:27
推荐回答(3个)
回答1:

VB6按钮只能改背景色,不能改前景色,如果一定要改的话,需要大量的API函数和代码 ,有一个变通的方法,就是自己做一个按钮的图形文件,将按钮的Style属性设置为1 - Graphical,Picture属性设置为图片文件 ,见图:

回答2:

给你个变通的方法:改用cleckbox按钮,将属性里的style设为1-Graphical。这样外观就与命令按钮一致了,然后在Forecolor设置字体颜色。
当然为了防止按扁原有程序加个if:
if check1.value=1 then
*********
正常代码
********
end if
希望对你有帮助童鞋

回答3:

在设计中直接改变forecolor属性
或者在工程中添加以下模块(Module):
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 命名为 frmDemo。添加 4 个 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