天天看點

Borland C++builder資源檔案編輯

Borland C++builder資源檔案編輯

1 建立 現在從borland c++builder ->tools->Image Editor

Image Editor->File->New->Resource

在菜單中會出現resource 從new中選擇資源分類有 bitmap icon cursor

若選擇了bitmap  會出現選擇位圖的顔色和大小如果是從外部位圖的話就要知道它的大小 其下會出現bitmap1 它就是位圖檔案名 選中他單擊右鍵 edit 就進入繪圖狀态可以剪貼闆中把外部位圖考進來 然後就是儲存了

2在c++builder 中Project->Add to Project… 裝入資源檔案

3使用 a. Graphics::TBitmap *Bitmap;  //低顔色

         Bitmap=new Graphics::Tbitmap();

         Bitmap->Handle=LoadBitmap(int(hInstance),”Bitmap1”)

     //256種顔色

b. LoadFromResourceName(int Instance,const AnsiString ResName);

  LoadFromResourceID (int Instance,int ResID);

列如:

  1 Graphics::TBitmap *Bitmap;

        Bitmap=new Graphics::Tbitmap();

        Bitmap->LoadFromResourceName(int (Hinstance),”picture1”);

  2 Image1->Picture->Bitmap->LoadFromResourceName(int(HInstance),/"Bitmap1/");

  注意 大 小 寫 int(hInstance) int(HInstance)

手工操作

選用文本檔案輸入内容

Bitmap1 BITMAP “ C://windows//bitmap1.bmp”

用brcc32.exe編譯成資源檔案 他在bin目錄下 brcc32 –32 testwave.rc =>testwave.res

使用時在單元檔案cpp中 # pragma resource “D:cbuilderpicture.RES”

TForm1 *Form1;

注意

test.rc是一個純文字檔案,可用寫字闆建立,

但存盤時,檔案名上要加上雙引号即成  /"test.rc/",

否則會變成 wave.rc.txt

這種辦法可把聲音檔案加到你的.exe中:

1.建立純文字資源檔案如wave.rc,内容如下:

ID_WAVE WAVE /"C://testwave.wav/"

2.BCB中用Project->Add to Project 将test.rc

  添加到你的工程中(即你的程式中);

3.在程式中:

#include /"mmsystem.h/"

PlaySound(/"ID_WAVE/",HInstance, SND_RESOURCE);

Playsound( ) && rc

//---------------------------------------------------------------------------

void __fastcall TForm1::FromFileClick(TObject *Sender)

{

  PlaySound(/"mail.wav/", NULL, SND_FILENAME);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FromFileMemoryClick(TObject *Sender)

{

  TFileStream *WaveFile = new TFileStream(/"mail.wav/", fmOpenRead);

  BYTE        *wavemem   = new BYTE[WaveFile->Size + 1];

  WaveFile->Read(wavemem, WaveFile->Size);

  PlaySound(wavemem, NULL, SND_MEMORY);

  delete[] wavemem;

  delete WaveFile;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FromResourceClick(TObject *Sender)

{

  PlaySound(/"MAIL/", HInstance, SND_RESOURCE);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FromResourceMemoryClick(TObject *Sender)//res 可以 參數一是名稱,參數二是類型名稱 也就是RC中的 testwave  WAVE   “ c://testwave.wav” 可以是WAV ,WAV_DATA 任意的

{

  HANDLE ResHandle;

  BYTE *WavData;

  ResHandle = FindResource(HInstance, /"MAIL/", /"WAVE/");

  ResHandle = LoadResource(HInstance, ResHandle);

  WavData = (unsigned char *)LockResource(ResHandle);

  PlaySound(WavData, NULL, SND_MEMORY);

  FreeResource(ResHandle);

}

如何把資源檔案的文本讀入到一個變量?

TResourceStream *rs=new TResourceStream((int)HInstance,/"mydata/",/"txt/");

TStringList *ss=new TStringList;

ss->LoadFromStream(rs);

delete rs;

如何調用資源檔案中res的jpeg、avi,wav,midi,mp3檔案

Image中加入jpg可以用如下方法:

在檔案頭加入#include <jpeg.hpp>

在構造函數中加入

Image1->LoadFromResourceName(0, /"JPEG/");//你的資源名

Animate中加入avi可能也能用這種辦法,不過沒試過

BC++ Builder 3.0中各種資源的利用

煙台南大街建行科技部  李進

---- 在 編 寫 程 序 的 過 程 中, 經 常 要 用 到 各 種 資 源。 比 如 說, 想 給 自 己 的 程 序 換 個 自 己 的 圖 标, 使 用 一 些 活 潑 的 光 标 來 增 加 趣 味 性, 播 放 一 些 聲 音 和 動 畫 文 件, 或 者 使 用 别 人 寫 好 的 程 序 來 實 現 某 個 功 能。 我 們 往 往 希 望 将 這 些 資 源 直 接 放 到EXE 文 件 中 以 形 成 一 個 單 獨 的 可 執 行 文 件, 這 就 存 在 一 個 如 何 在 運 行 時 訪 問 和 使 用 這 些 資 源 的 問 題。

---- 在 編 譯 期 間, 這 就 要 用 到 一 種 文 件, 以 .rc 結 尾 的 資 源 定 義 文 件。

---- 一: RC 文 件

---- rc 文 件 是 個 文 本 文 件, 它 的 格 式 很 簡 單, 按 如 下 格 式 定 義:

---- 資 源 标 識 符 資 源 類 型 資 源 的 路 徑

---- 以 下 的 rc 文 件 定 義 了 一 個 聲 音 資 源, 兩 個 光 标 資 源, 三 個 圖 标 資 源 和 一 個exe 文 件 資 源。

src1.rc:

  S1        WAV    wav1.Wav

  C1      CURSOR  cursor1.cur

  C2      CURSOR  cursor2.cur

  I1        ICON    icone1.ico

  I2        ICON    icone2.ico

  I3        ICON    icone3.ico

  unzip    EXEFILE  pkunzip.exe

---- 你 可 以 将 寫 好 的 rc 文 件 加 到 你 的 project( 項 目) 中。 你 也 可 以 手 工 将 其 編 譯 為 供 程 序 直 接 使 用 的 二 進 制 資 源 文 件(.res 文 件)。 在BCB3.0 中, 可 以 使 用 命 令 行: brcc32 src1.rc src1.res 。

---- 二: 資 源 的 使 用

---- 下 面, 按 照 使 用 的 簡 繁 程 度, 依 次 說 明 各 類 資 源 的 使 用 方 法。 需 要 說 明 的 是, 下 面 講 述 的 使 用 方 法, 在 别 的 編 譯 環 境 下(BC, VC 等) 也 是 一 樣 的。

---- 1: 建 立 一 個 新 的 項 目

---- 啟 動 BCB3.0, 選 FILE- >new- >Application 建 立 一 個 新 的 項 目。

---- 在 project- >Add to Project 中, 加 入 寫 好 的 src1.rc 文 件。 當 然, 那 些 聲 音、 光 标、 圖 标 文 件 都 應 該 存 在。

---- 這 時, 我 們 有 了 一 個 空 的 窗 體(Form)。

---- 2: 能 夠 利 用 windows API 函 數 直 接 訪 問 的 資 源 有:

  圖 标    LoadIcon()

  光 标    LoadCursor()

  加 速 表  LoadAccelerators()

  位 圖    LoadBitmap()

  菜 單    LoadMenu()

  字 符 串  LoadString()

---- 前 五 個 API 函 數 使 用 方 法 都 一 樣, 帶 兩 個 參 數。

---- 第 一 個 參 數 指 明 資 源 的 存 放 地 , 第 二 個 參 數 為 rc 文 件 中 資 源 的 标 識。

---- 字 符 串 LoadString 除 這 兩 個 參 數 外, 還 有 兩 個 參 數, 指 明 字 符 串 緩 沖 區 的 地 址 和 大 小。

---- 下 面 的 一 小 段 程 序 示 範 了 圖 标 和 光 标 的 使 用。

---- 在 Form 上 放 置 一 個 按 紐, 在 其 OnClick 事 件 中 加 入 以 下 代 碼:

void __fastcall TForm1::Button1Click(TObject *Sender) {

// 将光标形狀改為自己定義的:

Screen- >Cursors[crDefault] = LoadCursor( HInstance, /"C1/");

// 将圖示改為自己定義的:

Icon = new TIcon() ;

Icon- >Handle = LoadIcon(HInstance,/"I1/");

Application- >Icon = Icon ;

  }

---- 其 中 的 HInstance 指 示 資 源 所 在 地 為 執 行 文 件。 編 譯 執 行 後, 點 擊 該 按 紐, 光 标 和 圖 标 都 會 換 成 新 的。

---- 3: 能 夠 通 過 windows API 使 用 的 資 源

---- 對 于 聲 音、 動 畫 等 文 件, 可 以 使 用 windows API 函 數 播 放。 但 是 不 象 上 面 幾 種 資 源, 需 要 遵 循 一 定 的 步 驟。 如 下 所 示, 依 次 調 用 FindResource, LoadResource, LockResource 函 數, 來 播 放 一 個Wav 聲 音 文 件。

---- ( 當 然, 獨 立 的 聲 音 文 件 可 以 在 運 行 時 直 接 播 放。 我 們 這 裡 讨 論 的 是 将 wav 文 件 編 譯 進 EXE 文 件 的 情 況)

---- 在 Form 上 放 置 第 二 個 按 紐, 在 其 OnClick 事 件 中 加 入 以 下 代 碼:

void __fastcall TForm1::Button2Click(TObject *Sender)

//定義資源塊

char *wav_handle ;

//裝入 Wav檔案

HRSRC h = FindResource(HInstance,/"S1/",/"WAV/");

  HGLOBAL h1 = LoadResource(HInstance, h);

  wav_handle = (char *)LockResource(h1);

//播放 Wav檔案。由于Wav檔案裝載在記憶體中,

  sndPlaySound函數要用 SND_MEMORY參數

sndPlaySound(wav_handle, SND_MEMORY ?SND_SYNC);

  }

---- 編 譯 執 行 後, 點 擊 該 按 紐, 會 播 放 一 次 聲 音。

---- 對 于 動 畫 等 文 件, 使 用 方 式 類 似Wav 文 件。( BCB 提 供 了 一 個TAnimate 控 件, 可 以 播 放 無 聲 的Avi 文 件)

---- 4: 不 能 直 接 通 過 windows API 使 用 的 資 源

---- 此 種 資 源 不 能 夠 由 windows API 直 接 訪 問 和 執 行。 但 是, 我 們 可 以 用 一 種 變 通 的 方 法 來 使 用 它。

---- 下 面 示 範 如 何 使 用 pkunzip.exe, 思 路 如 下: 程 序 運 行 時, 将pkunzip.exe 從EXE 文 件 中 分 離 出 來, 放 在 臨 時 目 錄 下, 用 ShellExecute() 執 行 它。

---- 在FORM 上 放 置 第 三 個 按 紐, 在 放 置 兩 個 Edit , 用 來 輸 入 pkunzip.exe 的 參 數。

繼續閱讀