Einbinden von Bitmap-, Cursor- und Sound-Ressourcen in BCB-Anwendungen

  • öffnen des Objektgalerie-Fenster mit Datei -> Neu… -> Textdatei wählen
  • Namen und Typ der Ressourcen sowie die dazugehörigen Dateinamen eingeben
    • Ressourcen-Name (String den wir später für den Zugriff auf diese Ressource brauchen)
    • Typ der Ressource (BITMAP, CURSOR, ICON, WAVE oder AVI)
    • Name der Datei
  • Beispielaufbau der resource.txt
  • RES_LAKE BITMAP "mybitmap.bmp"
    RES_CURSOR CURSOR "mycursor.cur"
    RES_SOUND WAVE "mysound.wav"
    
  • Speichern der erstellten Textdatei als z.B. resource.rc
  • einbinden der Datei in das Projekt über den Menüpunkt Projekt -> Dem Projekt hinzufügen…
  • es ist nun möglich auf Bitmaps, Cursor, Sounds etc. mit Hilfe der Funktionen LoadFromResourceName() , LoadCursor(), PlaySound() usw. zuzugreifen.
  • Zum folgenden Beispiel gehören ein Formular frmMain und eine ComboBox cmbLoadPics. In die Ressourcen wurden folgende Objekte eingebunden
  • RES_LAKE BITMAP "reslake.bmp"
    RES_SYDNEY BITMAP "ressydney.bmp"
    RES_CURSOR CURSOR "resbluecurs.cur"
    RES_SOUND WAVE "respicture.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);
    }