VB 5/6-Tipp 0405: Einen Splash-Screen einbinden
von ActiveVB
Beschreibung
Jede Anwendung die etwas auf sich hält, hat ihn, den Splash-Screen. Dieser Tipp vermisst also die Desktopgröße und positioniert ein mit Bild versehehens Fenster vor das zu startende, eigene und eigentliche Programm.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Project1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Timersteuerelement "Timer1" Option Explicit Private Sub Form_Activate() If Form2.SplashLoaded Then Timer1.Interval = 500 Timer1.Enabled = True End If End Sub Private Sub Form_Unload(Cancel As Integer) Unload Form1 Unload Form2 End Sub Private Sub Timer1_Timer() Timer1.Enabled = False Unload Form2 Form2.SplashLoaded = False End Sub '---------- Ende Formular "Form1" alias Form1.frm ---------- '--------- Anfang Formular "Form2" alias Form2.frm --------- ' Steuerelement: Bildfeld-Steuerelement "Picture1" ' Steuerelement: Timersteuerelement "Timer1" auf Picture1 Option Explicit Private Declare Function SetWindowPos Lib "user32" _ (ByVal hwnd As Long, ByVal hWndInsertAfter As _ Long, ByVal x As Long, ByVal y As Long, ByVal _ cx As Long, ByVal cy As Long, ByVal wFlags As _ Long) As Long Private Declare Function SHAppBarMessage Lib "shell32.dll" _ (ByVal dwMessage As Long, pData As APPBARDATA) As _ Long Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Type APPBARDATA cbSize As Long hwnd As Long uCallbackMessage As Long uEdge As Long rc As RECT lParam As Long End Type Const ABM_GETTASKBARPOS As Long = &H5& Const SWP_NOMOVE As Long = 2& Const SWP_NOSIZE As Long = 1& Const SWP_FLAGS As Long = SWP_NOMOVE Or SWP_NOSIZE Const HWND_TOPMOST As Long = -1& Const HWND_NOTOPMOST As Long = -2& Public SplashLoaded As Boolean Private Sub Form_Activate() Timer1.Enabled = True End Sub Private Sub Form_Load() Dim sW As Long, sH As Long Dim dW As Long, dH As Long Dim TPos As APPBARDATA Dim TPX As Integer, TPY As Integer Picture1.Picture = LoadPicture(App.Path & "\Startlogo.gif") TPX = Screen.TwipsPerPixelX TPY = Screen.TwipsPerPixelY Call SHAppBarMessage(ABM_GETTASKBARPOS, TPos) sW = Screen.Width / TPX sH = Screen.Height / TPY If TPos.rc.Right >= sW Then dW = sW * TPX dH = (sH - (TPos.rc.Bottom - TPos.rc.Top)) * TPY Else dH = sH * TPY dW = (sW - (TPos.rc.Left - TPos.rc.Right)) * TPX End If Me.Left = (dW - Me.Width) / 2 Me.Top = (dH - Me.Height) / 2 Me.Show Call SetWindowPos(Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_FLAGS) SplashLoaded = True Timer1.Enabled = False Timer1.Interval = 500 End Sub Private Sub Timer1_Timer() Timer1.Enabled = False Form1.Show End Sub '---------- Ende Formular "Form2" alias Form2.frm ---------- '-------------- Ende Projektdatei Project1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
VB5 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
VB6 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 4 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Moses am 24.08.2005 um 10:35
Bei mir funktionierts nicht.... (VB6, Windows 2000 SP4)
Ist nicht die Mitte des Fensters mit StartUpPosition = Fenstermitte gewährleistet??
Kommentar von Defender am 04.12.2001 um 08:44
Also um noch mal auf die kompliziertheit zurück zu kommen:
Ich glaube das mit dieser Lösung ebenfalls gewährleistet ist das der Splashscreen,
1) In der Mitte ist und
2) nicht verdeckt wird.
Hier der Source Code:
'------- Hauptmenü -------
Private Sub Form_Load()
Load Splashscreen
Splashscreen.Show
Me.Hide
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim Antwort
Antwort = MsgBox("Wollen Sie wirklich beenden ?", vbQuestion + vbYesNo, "Beenden ?")
If Antwort = vbYes Then End
End Sub
'----- Splashscreen ----
Public Zähler As Integer
Private Sub Form_Load()
Zähler = 0
Timer1.Interval = 1000
Dim WWidth, HHeight
WWidth = (Screen.Width / 2) - (Splashscreen.Width / 2)
HHeight = (Screen.Height / 2) - (Splashscreen.Height / 2)
Me.Top = HHeight: Me.Left = WWidth
End Sub
Private Sub Timer1_Timer()
Zähler = Zähler + 1
If Zähler = 2 Then
Unload Me
Me.Hide
Form1.Show
Timer1.Enabled = False
End If
End Sub
Kommentar von Bard am 07.11.2001 um 18:20
So kompliziert, damit sichergestellt ist, dass der Splash-Screen in der Mitte des nutzbaren Bildschirmbereiches vor allen anderen Fenstern angezeigt wird.
Würde man es weniger "kompliziert" machen, würde das Fenster sehr schnell von anderen Anwendungen verdeckt werden.
Kommentar von Egal am 26.09.2001 um 16:29
Warum so kompliziert???