全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2311
推到 Plurk!
推到 Facebook!

BCB 2009之後 使用 rc資源檔的正確作法

 
hipig
高階會員


發表:31
回覆:75
積分:111
註冊:2007-01-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2018-04-26 13:51:50 IP:49.158.xxx.xxx 未訂閱
首先,網路上一堆資料都太舊了,連本站資料也是,而且本站經利多次升級很多原先用 code標籤的程式碼都殘缺不齊
使用 rc/dll資源非常方便的可以把想要的資料包進程式裡,雖然會增加空間,但在小型程式上非常好用。
網路上可以搜尋到的例子不外乎是包bmp檔,包wav還有不知道原作是誰的包unzip。
首先不需要自己建立 rcs檔案,在BCB IDE中直接點選 Project -> Resources即可(你要用終端機敲brcc32也行,這是老方法)
呼叫資源的方式bmp wav之類大同小異沒有特別的,這邊要注意是 RAD2009之後全面 unicode,所以在網路上能找到的code大多數都會賞你一個型態錯誤導致編譯失敗。
這邊舉個 rs資源內嵌字型檔然後應用的實際例子
https://gist.github.com/kikiqqp/4aa5ef6879f4e8d6a4dfec83ec4f5714
[code cpp]
void __fastcall TForm1::FormCreate(TObject *Sender)
{
char exefile[100], tmppath[100];
unsigned long ret;
GetTempPath(100, tmppath);
strcpy(exefile ,(AnsiString(tmppath) AnsiString("bold_led_board-7.ttf") ).c_str());
ret = GetFileAttributes(exefile);
if(ret == 0xffffffff ) //檢查temp目錄下是否有此字型
{
TResourceStream &rs = *new TResourceStream(UINT(HInstance), UnicodeString("F1"), (System::WideChar*)RT_RCDATA);
rs.SaveToFile(AnsiString(exefile));
delete &rs;
}
//載入特殊字型
AnsiString Test = AddFontResourceEx(exefile, FR_PRIVATE, 0);
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
char exefile[100], tmppath[100];
GetTempPath(100, tmppath);
strcpy(exefile, (AnsiString(tmppath) AnsiString("bold_led_board-7.ttf")).c_str());
//取消掛載字型
RemoveFontResourceEx(exefile, FR_PRIVATE, 0);
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
}
//---------------------------------------------------------------------------
[/code]
天下文件一大抄的錯誤之一是 HInstance
很多都寫成Hinstance
AddFontResource改用 AddFontResourceEx
另外 ResourceStream的部份也要注意,這邊已經跟過去的宣告方式有一點點不同,因應 unicode化要做些需調整。
最後 rc資源對 font的定義其實跟熟知的有差異,所以還是用RCDATA來處理吧

期待本站度過下一個10年然後 code不要再亂掉
編輯記錄
hipig 重新編輯於 2018-04-26 13:57:45, 註解 無‧
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2018-04-27 08:48:56 IP:220.136.xxx.xxx 未訂閱
謝謝您的分享!
系統時間:2024-05-06 6:30:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!