MSGBOX COM TEXTO COLORIDO OU NEGRITO

USUARIO.EXCLUIDOS 31/05/2007 22:43:51
#219252
Como consigo colocar uma palavra do MSGBOX [txt-color=#3333ff]colorido [/txt-color]ou negrito ?
USUARIO.EXCLUIDOS 01/06/2007 00:27:00
#219254
Não tem como fazer isso usando o msgbox, a sua opção é criar um form com as mesma dimenções do tela do msgbox e colocar a foto, simplificando deixar o msgbox ai vc escolhe a fonte que quiser.



ALEXANDREMOTA 01/06/2007 00:27:48
#219255
Que eu saiba não é possóvel mudar as cores de um msgbox pois podemos ver que nem nas mensagens do windows isso ocorre! Para isto você terá que montar sua própria caixa de mensagem com um form.
USUARIO.EXCLUIDOS 01/06/2007 02:55:25
#219261
Lamento, não existem parâmetros na função e nem no método MSGBOX que permitam tal edição.

Será necessário mesmo programação para conseguir este efeito, talvez haja algum exemplo no site embora eu nunca tenha visto.

Mas convenhamos, não será o fim do mundo fazer um programa destes.

No que contribuí ? Ajudei que vc não precisa mais ficar esperando aparecer ou ficar procurando o que não existe.
ROBIU 01/06/2007 07:01:30
#219271
Paty, Essa ocx é uma Msgbox configurável, você pode mudar a cor do texto, dos botões E PRINCIPALMENTE A COR DO FUNDO. A mensagem é sempre negrito(Eu posso colocar isso como opção na próxima versão. Usa uma sitaxe semenhante à Msgbox do Windows.Agora colocar apenas uma palavra em negrito ou colorido não dá. pode conseguir isso com a mensagem inteira.
Caixa Msgbox Personalizada. Pega e confira.
LIONHEART 01/06/2007 07:37:18
#219272
Anja, é impossivel.
A Msgbox não passa de uma chamada a uma API do Windows feita pelo próprio VB. Ela não é configuravel.

A sugestão seria usar essa OCX do Roberto Martins e transformar a label que ele usa para o texto em um RichTextBox, assim, vc poderia mudar o texto conforme a sua necessidade.

Fora isso, não existe outra forma, senão um formulario pra isso.
USUARIO.EXCLUIDOS 01/06/2007 11:38:49
#219333
Veja bem, eu e o Lion afirmamos que msgbox não tem esta parametrização ... não que ninguém tenha criado uma OCX com esta funcionalidade.
Não precisa procurar mais na MsgBox eu quis dizer, quanto a outra OCX eu desconheço, isto não significa que não exista ... mas termino do mesmo jeito que no outro post.
Não será o fim do mundo criar uma função que faça isto.
MORDOR 01/06/2007 14:47:19
#219383
Você pode instalar um Hook na aplicação para saber quando uma MsgBox for criada. A partir daí você pode obter os controles posicionados nela e fazer qualquer alteração tal como enviar uma mensagem WM_SETFONT para alterar a fonte do Label que exibe a mensagem, ou fazer subclassing dele para modificar partes dos texto quando ele for desenhado. No link abaixo existe um exemplo em VB.NET, dê uma olhada como funciona a técnica e os termos usados pelo autor para poder procurar e encontrar um exemplo para VB6.

http://msdn.microsoft.com/msdnmag/issues/02/11/CuttingEdge/
MORDOR 01/06/2007 14:56:17
#219386
Pra facilitar um pouco seu trabalho, no link abaixo tem um exemplo de como criar um Hook no VB6 justamente para mecher no MsgBox, daí você pode usar a API GetDlgItem para obter o handle do Label na MsgBox e enviar para ele a mensagem WM_SETFONT usando a API SendMessage para alterar a fonte quando a janela for criada.

http://vbnet.mvps.org/index.html?code/hooks/messageboxhookcentre.htm
CLEVERTON 01/06/2007 15:57:11
#219406
Resposta escolhida
Patricia, até onde eu conheço, o que vc vai conseguir é mudar (tipo da fonte, negrito, italico, sublinhado, tracado) com trabalho de API.

mas veja este exemplo em anexo. talvez te agrade.
MORDOR 01/06/2007 20:23:20
#219426
Preparei o código para exibir a mensagem em negrito.

Num módulo:
Option Explicit

Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Private 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 CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
Private Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const WH_CBT = 5
Private Const HCBT_CREATEWND = 3
Private Const HCBT_ACTIVATE = 5
Private Const FW_BOLD = 700
Private Const LF_FACESIZE = 32

Private Const WM_SETFONT = &H30
Private Const WM_GETFONT = &H31

Private hHook As Long

Private Type LOGFONT
lfHeight As Long
lfWidth As Long
lfEscapement As Long
lfOrientation As Long
lfWeight As Long
lfItalic As Byte
lfUnderline As Byte
lfStrikeOut As Byte
lfCharSet As Byte
lfOutPrecision As Byte
lfClipPrecision As Byte
lfQuality As Byte
lfPitchAndFamily As Byte
lfFaceName(LF_FACESIZE) As Byte
End Type

Private Function MsgBoxHookProc(ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

If uMsg < 0 Then
MsgBoxHookProc = CallNextHookEx(hHook, uMsg, wParam, lParam)
End If

Dim windowHandle As Long
windowHandle = wParam

Dim RetVal As Long, lpClassName As String
lpClassName = Space(256)
RetVal = GetClassName(windowHandle, lpClassName, 256)
lpClassName = Left(lpClassName, RetVal)

'Verifica se uma janela está sendo ativada e se é uma caixa de diálogo
If uMsg = HCBT_ACTIVATE And lpClassName = "#32770" Then

'Obtém o handle do Label na MsgBox
Dim labelHandle As Long
labelHandle = GetDlgItem(windowHandle, 65535)

'Verifica se o Label foi encontrado
If labelHandle Then

'Altera o estilo da fonte
Dim LF As LOGFONT
Dim hCurrFont As Long
Dim hHeaderFont As Long

hCurrFont = SendMessage(labelHandle, WM_GETFONT, 0, ByVal 0)

If GetObject(hCurrFont, Len(LF), LF) > 0 Then
LF.lfWeight = FW_BOLD
hHeaderFont = CreateFontIndirect(LF)
SendMessage labelHandle, WM_SETFONT, hHeaderFont, ByVal True
End If

End If

End If

MsgBoxHookProc = CallNextHookEx(hHook, uMsg, wParam, lParam)

End Function

Public Sub InitializeHook()
hHook = SetWindowsHookEx(WH_CBT, AddressOf MsgBoxHookProc, 0, GetCurrentThreadId())
End Sub

Public Sub TerminateHook()
UnhookWindowsHookEx hHook
End Sub


Para utilizar:
InitializeHook
MsgBox "Mensagem linha1" & vbCrLf & "Mensagem linha 2", vbYesNo
TerminateHook


Se quiser alterar a cor do texto, será necessário fazer subclassing da MsgBox e processar a mensagem WM_CTLCOLORSTATIC retornando o handle para um Brush que definirá a cor do texto.
Tópico encerrado , respostas não são mais permitidas