Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: MsgBox Добавлено: 09.06.08 21:26  

Автор вопроса:  Gilman
Использую для вывод ошибок MsgBox
Но у него нету свойств, где можно задать цвет формы, а также названия... подскажите как их задать?

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 Boconon



ICQ: 216390557 

Вопросов: 25
Ответов: 71
 Web-сайт: microsoft.com
 Профиль | | #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
Цвет задать нельзя, по крайней мере из VB.
Можно. Запускаем второй поток, открываем из него MsgBox, из первого ловим окошко и перекрашиваем во что надо :D

Ответить

Номер ответа: 4
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #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

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам