|
|
|
CommandButton
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Скажите пожалуйста, как изменить цвет текста кнопки? Спасибо за советы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2006, 10:49 |
|
||
|
CommandButton
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2006, 11:19 |
|
||
|
CommandButton
|
|||
|---|---|---|---|
|
#18+
Говорит что метода ForeColor нет. Command1.ForeColor - дает ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2006, 11:29 |
|
||
|
CommandButton
|
|||
|---|---|---|---|
|
#18+
ForeColor есть в кнопке из VBA MSForms, в VB нет. Можно разве что сабклассить кнопку и писать самостоятельно нужным цветом по WM_PAINT. Однако овчинка выделки не стоит. Проще вставить рисунок с надписью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2006, 12:11 |
|
||
|
CommandButton
|
|||
|---|---|---|---|
|
#18+
В design-time изменить стиль(Style) кнопки на Graphical(1), в run-time: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2006, 12:18 |
|
||
|
CommandButton
|
|||
|---|---|---|---|
|
#18+
Спасибо из компонентов взял Формс и оттуда кнопку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2006, 12:22 |
|
||
|
CommandButton
|
|||
|---|---|---|---|
|
#18+
PA, вопрос читал? Цвет не фона, а надписи. Arthur26, ну и зря. А если на компе клиента не установлен офис? MSForms корректно работают только в комплекте с VBA. Минимальный комплект - 15мб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2006, 13:26 |
|
||
|
CommandButton
|
|||
|---|---|---|---|
|
#18+
Тогда есть решение этой проблемы? Кто-либо не сталкивался с этой проблемой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2006, 14:01 |
|
||
|
CommandButton
|
|||
|---|---|---|---|
|
#18+
Стандартными средствами решить нельзя или нестандартный контроль или через API Модуль 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 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") SetBkMode hDC, TRANSPARENT SetTextColor hDC, GetProp(hWnd, "VBTForeColor") s = String$(255, 0) GetWindowText hWnd, s, 255 s = Left$(s, InStr(s, Chr$(0)) - 1) If va = DT_BOTTOM Then rct.Bottom = rct.Bottom - 4 End If If (nState And ODS_SELECTED) = ODS_SELECTED Then 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 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 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 Форма добавить Command1,Command2,Command3,Command4 Option Explicit Private Sub Form_Load() SetButton Command1.hWnd, vbRed SetButton Command2.hWnd, &H8000& 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 style=graphical ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2006, 14:19 |
|
||
|
CommandButton
|
|||
|---|---|---|---|
|
#18+
авторТогда есть решение этой проблемы? Кто-либо не сталкивался с этой проблемой? авторПроще вставить рисунок с надписью во первых. Во вторых в этом же рисунке можно "нарисовать" смысл кнопки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2006, 14:55 |
|
||
|
CommandButton
|
|||
|---|---|---|---|
|
#18+
Большое спасибо miki1. Получилось, но жаль плохо разбираюсь в АПИ. А что такое ExtButtonSubclass? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2006, 16:46 |
|
||
|
CommandButton
|
|||
|---|---|---|---|
|
#18+
ExtButtonSubclass служит для функции обратного вызова AddressOf создаётся перехватчик сообщений Window на определённое окно (контроль) У каждого окно есть есть свой индентификатор hwnd (не у всех контролей) и на каждое сообщение пишется свой исполняемый код лучше всего про API для Visual Basic написано у Дана Апермана Я тоже не волшебник и некоторые вещи беру и использую как они есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2006, 11:57 |
|
||
|
CommandButton
|
|||
|---|---|---|---|
|
#18+
Спасибо Miki1. А есть где почитать, типа лекций, относительно сложных приемов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2006, 09:14 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=33985972&tid=2165308]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
153ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 440ms |

| 0 / 0 |
