C++ Builder Snippets  

Splash-Screen beim Programmstart anzeigen:
 
  1. Fügen Sie Ihrem Projekt ein neues Formular hinzu (Menüpunkt "Datei -> Neues Formular"). Im folgenden Beispiel wird es frmSplash genannt.


  2. Setzen Sie die Eigenschaft BorderStyle des Formulars auf bsNone, FormStyle auf fsStayOnTop und Position auf poScreenCenter.


  3. Stellen Sie die Fensterbreite und -höhe ein.


  4. Plazieren Sie eine TImage-Komponente auf dem Formular (im folgenden Beispiel imgSplash) und setzen Sie ihre Eingenschft Align auf alClient und Stretch auf true.


  5. Laden Sie die anzuzeigende Grafik (TImage-Eigenschaft Picture).


  6. Entfernen Sie das Formular frmSplash aus der Liste der automatisch zu erzeugenden Formulare (Menüpunkt "Projekt->Optionen", Registerkarte "Formulare").


  7. Erweitern Sie die WinMain()-Funktion in der Datei projektname.cpp
    (nach der Zeile Application->Initialize()) um folgenden Code:

     if(AnsiString(GetCommandLine()).UpperCase().Pos("/NOSPLASH") == 0)
     {
       frmSplash = new TfrmSplash(static_cast<void *> (NULL));
       frmSplash -> Show();
       Application -> ProcessMessages();
     }

    Die If-Anweisung sucht die Kommandozeile der Anwendung nach dem String "/nosplash" durch und zeigt den SplashScreen nur wenn das Programm ohne diesen Parameter gestartet wurde.


  8. Ergänzen Sie die Dateien projektname.cpp und formmain.cpp um die Anweisung
    #include "FormSplash.h"


  9. Nach dem Abschluss der Programminitialisierung (hier in der OnShow- Ereignisbehandlung des Hauptformulars) schliessen Sie den SplashScreen mit Hilfe vom folgenden Code:

     if(frmSplash != NULL)
     {
       delete frmSplash;
       frmSplash = NULL;
     }


Quelltext der Anwendung:

//-------------------------- SplashScreen.cpp -------------------------------
#include <vcl.h>
#pragma hdrstop

#include "FormSplash.h"

USERES("SplashScreen.res");
USEFORM("FormMain.cpp", frmMain);
USEFORM("FormSplash.cpp", frmSplash);

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
  try
  {
    Application->Initialize();

    if(AnsiString(GetCommandLine()).UpperCase().Pos("/NOSPLASH") == 0)
    {
      frmSplash = new TfrmSplash(static_cast<void *> (NULL));
      frmSplash -> Show();
      Application -> ProcessMessages();
    }

    Application->CreateForm(__classid(TfrmMain), &frmMain);
    Application->Run();
  }
  catch (Exception &exception)
  {
    Application->ShowException(&exception);
  }
  return 0;
}
//---------------------------------------------------------------------------



//-------------------------- FormMain.cpp -------------------------------
#include <vcl.h>
#pragma hdrstop
#include "FormMain.h"
#include "FormSplash.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
//---------------------------------------------------------------------------

__fastcall TfrmMain::TfrmMain(TComponent* Owner)
  : TForm(Owner)
{
}

//---------------------------------------------------------------------------
// OnShow-Eventhandler des Formulars
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormShow(TObject *Sender)
{
  //--------------------------------------------
  // Initialisierungsphase:
  //--------------------------------------------

  /* Initialisierungsphase 1 */

  // Statusmeldung im Fortschrittslabel des Splash-Formulars anzeigen:
  if(frmSplash) frmSplash -> lblProgress -> Caption = "Loading language base...";
  // Windows Messagequeue abarbeiten lassen, damit das
  // Splash-Fenster aktualisiert werden kann:
  Application->ProcessMessages();
  // Verzögerungsschleife -> durch Initialisierungscode ersetzen !
  DWORD ilCounts = GetTickCount();
  while(GetTickCount() < ilCounts + 1000)
    Application->ProcessMessages();

  /* Initialisierungsphase 2 */

  // Statusmeldung im Fortschrittslabel des Splash-Formulars anzeigen:
  if(frmSplash) frmSplash -> lblProgress -> Caption = "Loading PlugIns...";
  // Windows Messagequeue abarbeiten lassen, damit das
  // Splash-Fenster aktualisiert werden kann:
  Application->ProcessMessages();
  // Verzögerungsschleife -> durch Initialisierungscode ersetzen !
  ilCounts = GetTickCount();
  while(GetTickCount() < ilCounts + 1000)
    Application->ProcessMessages();

  /* Initialisierungsphase 3 */

  // Statusmeldung im Fortschrittslabel des Splash-Formulars anzeigen:
  if(frmSplash) frmSplash -> lblProgress -> Caption = "Initiailizing...";
  // Windows Messagequeue abarbeiten lassen, damit das
  // Splash-Fenster aktualisiert werden kann:
  Application->ProcessMessages();
  // Verzögerungsschleife -> durch Initialisierungscode ersetzen !
  ilCounts = GetTickCount();
  while(GetTickCount() < ilCounts + 1000)
    Application->ProcessMessages();

  //--------------------------------------------
  // Splash-Fenster schliessen:
  //--------------------------------------------
  if(frmSplash != NULL)
  {
    delete frmSplash;
    frmSplash = NULL;
  }
}
//---------------------------------------------------------------------------

  Download BCB5
Projekt-Quellcode
Download
Demo-Exe

© '99-2001 by S. Kreutzmann