Страница: 1 |
Страница: 1 |
Вопрос: MsgBox
Добавлено: 09.06.08 21:26
Автор вопроса: Gilman
Использую для вывод ошибок MsgBox
Но у него нету свойств, где можно задать цвет формы, а также названия... подскажите как их задать?
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
Boconon
ICQ: 216390557
Вопросов: 25
Ответов: 71
Web-сайт:
Профиль | | #1
Добавлено: 09.06.08 21:41
Цвет задать нельзя, по крайней мере из VB.
А с названиями и значками все просто.
Для этого дела, чтобы не париться, особенно если новичек, юзай прогу MsgBoxGenerator, она, кажись, на этом сайте лежала. В проге все очень удобно: вводишь текст, заголовок, выбираешь значок, кнопки и получаешь готовый код для вывода сообщения.
Номер ответа: 2
Автор ответа:
Gilman
Вопросов: 2
Ответов: 7
Профиль | | #2
Добавлено: 09.06.08 22:12
Спасибо советом воспользовался
Номер ответа: 3
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #3
Добавлено: 10.06.08 11:49
Номер ответа: 4
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #4
Добавлено: 10.06.08 12:36
AgentFire, глупости не говори. Второй поток он запускать будет. Хуки еще никто не отменял, насколько я помню.
Номер ответа: 5
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #5
Добавлено: 11.06.08 18:48
А в чем собственно дело? Я люблю потоки
Номер ответа: 6
Автор ответа:
Holsten
Вопросов: 5
Ответов: 100
Профиль | | #6
Добавлено: 12.06.08 06:26
Дело в том, что потоки не любят нас
Подумай сам, в этом потоке нужно будет устроить бесконечный цикл с опросом всех окон для ожидания рождения своего msgbox.
Зачем это нужно, если есть SetWindowsHookEx(WH_CBT..
Номер ответа: 7
Автор ответа:
Holsten
Вопросов: 5
Ответов: 100
Профиль | | #7
Добавлено: 12.06.08 08:41
По сабжу:
Option Explicit
Private Sub Command1_Click()
MsgBox "SetWindowsHookEx(WH_CBT, AddressOf CBTProc, App.hInstance, App.ThreadID)"
End Sub
Private Sub Form_Load()
hmyhook = SetWindowsHookEx(WH_CBT, AddressOf CBTProc, App.hInstance, App.ThreadID)
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnhookWindowsHookEx hmyhook
End Sub
Option Explicit
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Const HCBT_CREATEWND = 3
Public Const GWL_WNDPROC = (-4)
Public Const WH_CBT = 5
Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public 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
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Public Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Public Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
Private prvproc As Long
Public hmyhook As Long
Public Function CBTProc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim clsname As String * 256
Dim namln As Long
If ncode = HCBT_CREATEWND Then
namln = GetClassName(wParam, clsname, 256)
If Left(clsname, namln) = "#32770" Then
prvproc = SetWindowLong(wParam, GWL_WNDPROC, AddressOf WndProc)
End If
End If
CBTProc = CallNextHookEx(hmyhook, ncode, wParam, lParam)
End Function
Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case Msg
Case &H14 'WM_ERASEBKGND
Dim rccl As RECT
Call GetClientRect(hwnd, rccl)
Call FillRect(wParam, rccl, 4)
Exit Function
End Select
WndProc = CallWindowProc(prvproc, hwnd, Msg, wParam, lParam)
End Function