C++ Builder Snippets  

Einbinden von Bitmap-, Cursor- und Sound-Ressourcen in BCB-Anwendungen:
 
Siehe auch Resource String Dateien (*.RES) in einem C++ Builder Projekt verwenden.

Oft ist es notwendig (oder wünschenswert) Bitmaps, eigene Cursor oder Sounds in die ausführbare Datei der Anwendung einzubinden.

Gehen Sie dafür folgendermaßen vor:

  • öffnen Sie das Objektgalerie-Fenster mit Datei -> Neu... auf.

  • Textdatei wählen.

  • Geben Sie die Namen und Typ der Ressourcen sowie die dazugehörigen Dateinamen ein. Dabei wird als Erstes der Ressourcen-Name angegeben (String den wir später für den Zugriff auf diese Ressource brauchen). Als Nächstes kommt der Typ der Ressource (BITMAP, CURSOR, ICON, WAVE oder AVI) und als dritte Angabe der Name der Datei.
  • Beispielaufbau der resource.txt:
      RES_LAKE    BITMAP  "mybitmap.bmp"
      RES_CURSOR  CURSOR  "mycursor.cur"
      RES_SOUND   WAVE    "mysound.wav"
    
  • Speichern Sie die erstellte Textdatei als z.B. resource.rc

  • Binden Sie die Datei in das Projekt über den Menüpunkt Projekt -> Dem Projekt hizufügen... ein.

  • Nun können Sie auf Ihre Bitmaps, Cursor, Sounds etc. mit Hilfe der Funktionen LoadFromResourceName() , LoadCursor(), PlaySound() usw. zugreifen.

Zum folgenden Beispiel gehören ein Formular frmMain und eine ComboBox cmbLoadPics. In die Ressourcen wurden folgende Objekte eingebunden:
RES_LAKE    BITMAP  "res\\lake.bmp"
RES_SYDNEY  BITMAP  "res\\sydney.bmp"
RES_CURSOR  CURSOR  "res\\bluecurs.cur"
RES_SOUND   WAVE    "res\\picture.wav"
Items-Eigenschaft der Combobox beinhaltet 3 Strings: Zeichenfläche löschen, Bitmap-Ressource RES_LAKE und Bitmap-Ressource RES_SIDNEY. Beim änderungen der ItemIndex-Eigenschaft der ComboBox wird entsprechendes Bitmap auf Canvas des Formulars gezeichnet und eine Wave-Datei abgespielt. Als Cursor wird ebenfalls ein Cursor aus den Ressourcen verwendet.

Quelltext der Anwendung:

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MainForm.h"
#include "mmsystem.h"    // für PlaySound()

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
  : TForm(Owner)
{
}

//---------------------------------------------------------------------------
// Wird beim Anzeigen des Formulars ausgeführt:
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormShow(TObject *Sender)
{
  cmbLoadPics -> ItemIndex = 0;

  // Cursor aus Ressourcen laden und zuweisen:
  Screen->Cursors[crArrow] = LoadCursor(HInstance, "RES_CURSOR");
  Cursor = crArrow;
}

//---------------------------------------------------------------------------
// Eventhandler für OnClick-Ereignis der ComboBox
//---------------------------------------------------------------------------
void __fastcall TfrmMain::cmbLoadPicsClick(TObject *Sender)
{
  frmMain -> Invalidate();          // Zeichenfläche löschen
  Application->ProcessMessages();

  if(cmbLoadPics -> ItemIndex > 0)  // falls Bitmap zeichnen:
  {
    // TBitmap erzeugen:
    Graphics::TBitmap * pResImg = new Graphics::TBitmap;

    // Bitmap aus Ressourcen laden:
    if(cmbLoadPics -> ItemIndex == 1) // falls Bitmap RES_LAKE:
      pResImg->LoadFromResourceName(int(HInstance), "RES_LAKE");
    else if(cmbLoadPics -> ItemIndex == 2) // falls Bitmap RES_SYDNEY:
      pResImg->LoadFromResourceName(int(HInstance), "RES_SYDNEY");

    // Bitmap auf Canvas der frmMain zeichnen:
    Canvas->Draw(ClientWidth/2-pResImg->Width/2,
                 ClientHeight/2-pResImg->Height/2-20,
                 pResImg);

    // Speicher aufräumen
    if(pResImg != NULL) { delete pResImg; pResImg = NULL; }
  }

  // Sound aus Ressourcen abspielen:
  PlaySound("RES_SOUND", HANDLE(HInstance), SND_RESOURCE);
}
//---------------------------------------------------------------------------

  Download BCB4
Projekt-Quellcode
Download
Demo-Exe

© '99-2000 by S. Kreutzmann