vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Oberfläche · MessageBox   |   VB-Versionen: VB4, VB5, VB601.12.03
MessageBox mit eigenem Icon

Dieser Tipp verrät, wie man in der MessageBox ein eigenes Icon als Bildsymbol anzeigen kann.

Autor:   Torsten ArfellerBewertung:  Views:  23.628 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Immer wieder taucht im Forum die Frage auf, wie man ein eigenes Icon in einer MsgBox platzieren kann. Bis jetzt war die Antwort, dass es z.B. mit den  sevXPControl ActiveX v1.0 geht, wie gesagt bis jetzt.

Dabei gibt es insgesamt 3 API's, mit denen man eine MsgBox anzeigen lassen kann. Mit der API-Funktion MessageBoxIndirect können wir das Problem lösen. Und damit die MsgBox mit einem Ton daherkommt, nehmen wir auch noch die API-Funktion MessageBeep dazu.

Einen kleinen Nachteil hat das Ganze allerdings. Das Icon wird nur in der kompilierten EXE-Datei angezeigt.

Alles was wir nun brauchen ist ein Modul, eine Form mit einem Button (Command1) und einem Label (Label1) darauf, sowie eine Ressourcendatei, in die wir unser Icon als Iconressource auslagern.

Fügen Sie nachfolgenden Code in das Modul ein:

Option Explicit
 
' Benötigte API-Deklaration
Public Declare Function MessageBoxIndirect Lib "user32.dll" _
  Alias "MessageBoxIndirectA" ( _
  lpMsgBoxParams As MSGBOXPARAMS) As Long
 
' Damit die MsgBox auch einen Ton von sich gibt...
Public Declare Function MessageBeep Lib "user32" ( _
  ByVal wType As Long) As Long
 
Public Type MSGBOXPARAMS
  cbSize As Long             ' Größe der Struktur in Bytes
  hwndOwner As Long          ' Fensterhandle, dem die MsgBox zugeordnet ist
  hInstance As Long          ' Instanzhandle der Anwendung, die die
                             ' Iconressource beinhaltet, falls ein
                             ' benutzerdefiniertes Icon angezeigt werden soll.
  lpszText As String         ' Text,der in der MsgBox angezeigt werden soll
  lpszCaption As String      ' Text der Titelleiste der MsgBox
  dwStyle As Long            ' eine oder ein Kombination der dwStyle
                             ' Konstanten, z.B. Art u. Anzahl der Buttons,
                             ' eigenes Icon, Modalität etc.
  lpszIcon As Long           ' der Name der Icon-Ressource
  dwContextHelpId As Long    ' die HelpContextID, wenn der Help- Button mit
                             ' angezeigt werden soll
  lpfnMsgBoxCallback As Long ' Adresse einer Funktion, die Ereignisse
                             ' empfangen soll
  dwLanguageId As Long       ' SprachID für Buttonbeschriftung. Ist die
                             ' gewählte Sprache nicht installiert, wird
                             ' die Standardsystemsprache verwendet
End Type
 
' MessageBoxIndirect Rückgabe-Konstanten: können nach Klick auf
' einen Button abgefragt werden
Public Const IDABORT = 3     ' Beenden wurde gewählt
Public Const IDCANCEL = 2    ' Abbrechen wurde gewählt
Public Const IDIGNORE = 5    ' Ignorieren wurde gewählt
Public Const IDNO = 7        ' Nein wurde gewählt
Public Const IDOK = 1        ' OK wurde gewählt
Public Const IDRETRY = 4     ' Wiederholen wurde gewählt
Public Const IDYES = 6       ' Ja wurde gewählt
 
' dwStyle-Konstanten
Public Const MB_ABORTRETRYIGNORE = &H2  ' Abbrechen, Wiederholen, Weiter
Public Const MB_HELP = &H4000           ' Hilfe: wird nur in Verbindung
                                        ' mit einem anderen Button angezeigt
Public Const MB_OK = &H0                ' OK
Public Const MB_OKCANCEL = &H1          ' OK, Abbrechen
Public Const MB_RETRYCANCEL = &H5       ' Wiederholen, Abbrechen
Public Const MB_YESNO = &H4             ' Ja, Nein
Public Const MB_YESNOCANCEL = &H3       ' Ja, Nein, Abbrechen
Public Const MB_ICONERROR = &H10        ' Fehler Symbol
Public Const MB_ICONEXCLAMATION = &H30  ' Ausrufezeichen Symbol
Public Const MB_ICONINFORMATION = &H40  ' Informations Symbol
Public Const MB_ICONQUESTION = &H20     ' Fragezeichen Symbol
Public Const MB_DEFBUTTON1 = &H0        ' Standardbutton ist Button 1
Public Const MB_DEFBUTTON2 = &H100      ' Standardbutton ist Button 2
Public Const MB_DEFBUTTON3 = &H200      ' Standardbutton ist Button 3
Public Const MB_DEFBUTTON4 = &H300      ' Standardbutton ist Button 4
Public Const MB_APPLMODAL = &H0         ' Messagebox modal zum Programm anzeigen
Public Const MB_SYSTEMMODAL = &H1000    ' Messagebox modal zum System anzeigen
Public Const MB_TASKMODAL = &H2000      ' Messagebox modal zum Thread anzeigen
Public Const MB_DEFAULT_DESKTOP_ONLY = &H20000 ' (WinNT/2000) die Dialogbox wird
                                               ' nur auf dem Standard Desktop
                                               ' angezeigt
Public Const MB_RIGHT = &H80000         ' Der Text wird rechts ausgerichtet
Public Const MB_RTLREADING = &H100000   ' Richtet die Schrift der Dialogbox von
                                        ' rechts nach links, falls dies der
                                        ' Systemstandard ist
Public Const MB_SETFOREGROUND = &H10000 ' Die Messagebox wird in den
                                        ' Vordergrund gebracht.
Public Const MB_USERICON = &H80&        ' (MSGBOXPARAMS) Legt fest, dass ein
                                        ' benutzerdefiniertes Icon angezeigt
                                        ' werden soll
Public Const MB_TOPMOST = &H40000       ' MsgBox wird als 1. in der Z-Order-
                                        ' Reihenfolge angezeigt
 
' dwLanguageId-Konstanten
Public Const LANG_BULGARIAN = &H2
Public Const LANG_CHINESE = &H4
Public Const LANG_CROATIAN = &H1A
Public Const LANG_CZECH = &H5
Public Const LANG_DANISH = &H6
Public Const LANG_DUTCH = &H13
Public Const LANG_ENGLISH = &H9
Public Const LANG_FINNISH = &HB
Public Const LANG_FRENCH = &HC
Public Const LANG_GERMAN = &H7
Public Const LANG_GREEK = &H8
Public Const LANG_HUNGARIAN = &HE
Public Const LANG_ICELANDIC = &HF
Public Const LANG_ITALIAN = &H10
Public Const LANG_JAPANESE = &H11
Public Const LANG_KOREAN = &H12
Public Const LANG_NEUTRAL = &H0
Public Const LANG_NORWEGIAN = &H14
Public Const LANG_POLISH = &H15
Public Const LANG_PORTUGUESE = &H16
Public Const LANG_ROMANIAN = &H18
Public Const LANG_RUSSIAN = &H19
Public Const LANG_SLOVAK = &H1B
Public Const LANG_SLOVENIAN = &H24
Public Const LANG_SPANISH = &HA
Public Const LANG_SWEDISH = &H1D
Public Const LANG_TURKISH = &H1F
 
Public Const SUBLANG_CHINESE_HONGKONG = &H1D
Public Const SUBLANG_CHINESE_SIMPLIFIED = &H2
Public Const SUBLANG_CHINESE_SINGAPORE = &H4
Public Const SUBLANG_CHINESE_TRADITIONAL = &H1
Public Const SUBLANG_DEFAULT = &H1
Public Const SUBLANG_DUTCH = &H1
Public Const SUBLANG_DUTCH_BELGIAN = &H2
Public Const SUBLANG_ENGLISH_AUS = &H3
Public Const SUBLANG_ENGLISH_CAN = &H4
Public Const SUBLANG_ENGLISH_EIRE = &H6
Public Const SUBLANG_ENGLISH_NZ = &H5
Public Const SUBLANG_ENGLISH_UK = &H2
Public Const SUBLANG_ENGLISH_US = &H1
Public Const SUBLANG_FRENCH = &H1
Public Const SUBLANG_FRENCH_BELGIAN = &H2
Public Const SUBLANG_FRENCH_CANADIAN = &H3
Public Const SUBLANG_FRENCH_SWISS = &H4
Public Const SUBLANG_GERMAN = &H1
Public Const SUBLANG_GERMAN_AUSTRIAN = &H3
Public Const SUBLANG_GERMAN_SWISS = &H2
Public Const SUBLANG_ITALIAN = &H1
Public Const SUBLANG_ITALIAN_SWISS = &H2
Public Const SUBLANG_NEUTRAL = &H0
Public Const SUBLANG_NORWEGIAN_BOKMAL = &H1
Public Const SUBLANG_NORWEGIAN_NYNORSK = &H2
Public Const SUBLANG_PORTUGUESE = &H2
Public Const SUBLANG_PORTUGUESE_BRAZILIAN = &H1
Public Const SUBLANG_SPANISH = &H1
Public Const SUBLANG_SPANISH_MEXICAN = &H2
Public Const SUBLANG_SPANISH_MODERN = &H3
Public Const SUBLANG_SYS_DEFAULT = &H2

Und jetzt der Aufruf und die Auswertung in der Form:

Private Sub Command1_Click()
  Dim MsgResult As Long
  Dim MsgPar As MSGBOXPARAMS
 
  ' Mesagbox-Eigenschaften setzen
  ' Das Icon wird in der IDE NICHT angezeigt!
  With MsgPar
    .cbSize = Len(MsgPar)
    .dwLanguageId = (SUBLANG_GERMAN * 1024) Or LANG_GERMAN
 
    ' MB_TOPMOST besser als MB_SYSTEMMODAL
    .dwStyle = MB_YESNOCANCEL Or MB_TOPMOST Or MB_USERICON
 
    .hInstance = App.hInstance
    .hwndOwner = Me.hWnd
    .lpszCaption = "hier steht der Text der Titelleiste"
 
    .lpszText = "... und hier der Text der MsgBox." & vbNewLine & "" & _
      vbNewLine & "Beachten Sie, dass das Icon nur in der" & vbNewLine & _
      "kompilierten .exe dargestellt wird!"
 
    .lpszIcon = 101 ' Name einer Icon-Ressource
                    ' wird erst in der .exe angezeigt
    .lpfnMsgBoxCallback = 0
  End With
 
  ' MsgBox-Beep erzeugen
  MessageBeep MB_ICONINFORMATION
 
  ' MessageBox aufrufen
  MsgResult = MessageBoxIndirect(MsgPar)
 
  ' MessageBox auswerten und in Label anzeigen
  If MsgResult = IDYES Then
    Label1.Caption = "Ja wurde gewählt"
  ElseIf MsgResult = IDNO Then
    Label1.Caption = "Nein wurde gewählt"
  ElseIf MsgResult = IDCANCEL Then
    Label1.Caption = "Abbrechen wurde gewählt"
  End If
End Sub



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.