顯示具有 BCB 標籤的文章。 顯示所有文章
顯示具有 BCB 標籤的文章。 顯示所有文章

2010年11月18日 星期四

多按鈕共用相同Click事件

小功能成就大系統...

介面設計最常使用的元件就是按鈕,
在BCB底下有多種不同功用的按鈕,Button, BitBtn, SpeedButton...等。

我們常常要撰寫當按下某個按鈕執行某個事件的功能,
BCB能方便地在設計者雙擊按鈕後,產生一個Click事件,
以便於撰寫對應的功能。

一個按鈕對應一個Click事件是很合理且直覺的作法,
若今天有10個按鈕則會有10個Click事件(廢話....),
但如果這10個Click事件底下所執行的動作很簡短,
並且有一定的相關性的時,如"計算機按下數字按鈕顯示於螢幕上",
則可以選擇更Smart且簡化程式的方式,如下說明:

1. 於Form上建立5個Button及1個Edit,如下圖所示


2. 分別為5個Button的Tag屬性設立從1到5
3. 雙擊btn1,在事件中寫入底下程式
  1. void __fastcall TFormMain::btn1Click(TObject *Sender)
  2. {
  3. TSpeedButton *tempBtn;
  4. tempBtn = (TSpeedButton *)Sender;
  5. switch(tempBtn->Tag)
  6. {
  7. case 1:
  8. // Tag 1 action
  9. edt_show->Text = tempBtn->Caption;
  10. break;

  11. case 2:
  12. // Tag 2 action
  13. edt_show->Text = tempBtn->Caption;
  14. break;

  15. case 3:
  16. // Tag 3 action
  17. edt_show->Text = tempBtn->Caption;
  18. break;

  19. case 4:
  20. // Tag 4 action
  21. edt_show->Text = tempBtn->Caption;
  22. break;

  23. case 5:
  24. // Tag 5 action
  25. edt_show->Text = tempBtn->Caption;
  26. break;

  27. default:
  28. break;
  29. }
  30. }
4. 最後把剩餘的Btn Click事件全部指到btn1Click
5. 完成,下班!!

2010年11月4日 星期四

GSP-功能新增(2010/11)

1. 基本統計數據及特徵標示
















-----------------------------------------------------
2. 多種Thresholding功能



















-----------------------------------------------------
3. Harr小波轉換














-----------------------------------------------------

4. Gaussion filter(包含產生濾波器係數及執行濾坡功能)



















-----------------------------------------------------

5. 濾波器係數新增及載入功能(通用的Convolution)

2010年4月30日 星期五

C++ Builder建立/使用 Lib筆記

今天來整理一下,如何在C++ Builder中建立及使用libary(靜態聯結函式庫)的筆記吧!

Q. 如何將已有的 .cpp及 .h製成 .lib?
1. 開啟C++ Builder
2. File/New/Other 選擇Libray 按OK
3. 此時會自動產生一個 Project1.bpf檔
4. 接著將要被打包的 .cpp透過 Add File to project加入到專案中 ( .h不用)
5. 將此專案儲存起來 (可依照功能/目的來命名,不一定要和 .cpp/.h同名)
6. Build此專案
7. 完成後,在目錄下會產生一個和專案同名的 .lib檔
8. 未來可將 .lib及 .h檔發佈出去

Q. 在C++ Builder開發環境下,如何使用 .lib及 .h檔?
1. 在拿到 .lib及 .h檔後,將這兩個檔案放到專案執行的目錄下或者,
.lib可放在Windows能搜尋到的目錄下即可,但 .h 一定要放在專案執行的目錄下
2. 透過Add File to project將 .lib加入到專案中 ( .h不用)
3. 在程式開頭處加入 #include "xxx.h"
4. 完成

2009年10月16日 星期五

My Scope

有通用訊號處理工具,當然也是要有"擷取訊號的工具"阿~~

我使用研華的USB-4761多功能資料擷取模組,
及它所提供的SDK開發了一套"示波器軟體",
目前就只有訊號顯示的功能,持續開發中....
先來看一下實際的擷取/顯示狀況!

2009年10月13日 星期二

General Signal Process Tool

從研究所到職場,都是在做影像/訊號處理相關的題目,
以影像處理而言,要開發一個檢測系統(軟體),
通常會使用現成的套裝軟體,如Matlab, NI Vision,
Matrox Inspector...等工具來進行前期的驗證測試,
等到確定初步的處理流程後,才會開始動手寫效率較高且專用的程式。
在此過程中,許多工程師會開始建立自己常用的影像處理/辨識函式庫,
達到Codes reuse的作用!!

我利用工作空閑的時間,著手開發一套
"通用型訊號處理軟體(General Signal Process Tool)",
目的就是將一些常用的功能,如基本數學運算, 時間域濾波,
多項式迴歸, 統計數值計算, AOI...等功能整理成函式庫(C++),
並寫一個簡易的UI,希望能輔助主系統的驗證與各種訊號處理的應用。
目前還在開發中....工作截圖如下:

2009年6月2日 星期二

BCB的 #pragma hdrstop ? 加速編譯速度的好幫手!

軟體工程師或程式設計師真的不好當! 會寫程式的人是滿山滿海, 但真正會欣賞程式是門美妙藝術的人, 我想就不多了...(我要慢慢地去欣賞它)

這個頭好像開得太大太遠了, 先拉回這篇文章的重點. 正所謂"工欲善其事, 必先利其器", 寫程式會遇到的一個問題就是編譯(Compiler)時間, 一開始程式碼少沒甚麼感覺, 一旦越寫越大(越寫越亂...XD)時, 就會令人都蘭國小. 要如何加速編譯速度呢?參考底下的文章吧!

http://edu.uuu.com.tw/article/010307a.htm

2009年5月19日 星期二

Application->ProcessMessages 測試(上)

台語有句話說: "有一好, 沒倆好!" , 古人亦有云: "魚與熊掌不可兼得" , 英文則是 "Trade-off"!
有失必有得在技術開發中是經常發生的難題, 該如何取捨總是讓工程師們抓破頭!!

設計一個UI軟體, 有時會遇到的"執行效率"與"使用者操作"的兩難, 在沒有想到用多執行緒來解決
同一時間進行兩(多)件事時, 這個Application->ProcessMessage函式或許能幫上一點忙.

UI最怕的是"軟體卡住"的窘境, 說白話點就是使用者無法操作軟體, 如按按鈕啦, 該更新的畫面沒有更新啦, 無法拖曳視窗啦...等, 最糟的情況為軟體當掉, 只有重新啟動才能解決, 不然就是UI正在等某一個運算, 那個該死的運算占用了CPU資源, 導致上述種種問題...(待續)

2009年4月27日 星期一

Multi-Thread 心得分享


Multi-Thread(多執行緒)是一個相當實用的程式技巧, 尤其在多核的CPU下更顯威力!

左圖為程式啟動時對應的CPU狀態, 中間圖為使用For迴圈進行計算之CPU狀態, 右圖為使用Multi-Thread進行計算之CPU狀態.

我們可以明顯地看出使用Multi-Thread能充分地利用多核心(此測試為4核心)的計算能力, 並且減少計算時間!!

2009年2月11日 星期三

分享記憶體優化及安裝 .net framework 經驗

一個程式設計師(程序員:大陸都降稱呼)最在意的事情,除了實現各項軟體功能外,再來就是要講求程式與執行檔 size, 執行效率, 記憶體使用...等,但天不從人願,其中的記憶體使用(也可以說軟體佔系統資源)總是最令人頭痛!!

以C/C ++開發程式而言,當然就是allocate/free以及new/delete要妥善使用了,但若"確定"排除這些問題的話,系統資源仍隨著時間一直長大,一直長大...那就不好玩囉!!然而,一條好的時間對記憶體使用曲線,初期應該最低,陸續上升後到達一個值後保持穩定,頂多有些抖動(可能是同時進行其他軟體操作)。如下圖所示 (使用BCB自行開發的記憶體監控程式)


在此介紹一個"記憶體優化軟體",叫做Minimem,可對於超過某一記憶體使用閾值的軟體進行即時優化(保持在一定範圍內)。相關下載及操作請參考這位大大。
<Minimem 1.2.2 下載>

由於Minimem安裝前電腦需具有 .net framework(有些軟體是以 .net framework進行開發的),但在安裝 .net framework時,往往需要網路連線,也就是下載M$的 .net framework安裝檔並執行它之後,一定要透過網路連結到伺服器才能下載完整的元件,但對於沒有網路環境的電腦該如何安裝呢?(客戶端電腦),此時就需要可攜式(Portable)或稱為可轉散發(Redistributable)套件進行安裝。

可轉散發(Redistributable)套件即包含了以 .net framework開發的應用程式所需要的所有元件,不需要透過網路連結就能在電腦上進行完整安裝。
<MS .Net Framwork 3.0 Redistributable Package 下載>

順便介紹一個可以偵測電腦上安裝了何種版本 .net framework的綠色軟體,叫做Framework Detector,可另外參考這位大大。



2009年1月17日 星期六

BCB note - Char & AnsiString Transformation

As title!
In string operation, we usually transform char to AnsiString data type for BCB objects such as Edit, StringGrid, Memo and Label etc. Besides, AnsiString transform to char data type is also used for traditional file read/write. The codes could be written below (Success testing in BCB):

// AnsiString To Char
AnsiString as = "test";
char *chr;
chr = as.c_str();

// Char To AnsiString
char *chr="test";
AnsiString as;
as = StrPas(chr);

2008年12月5日 星期五

BCB 執行檔啟動順序

BCB是一個事件驅動的視窗程式,習慣撰寫 VC的朋友們剛入門時,常會找不到"人"在哪(Main啦)??程式到底從何開始執行?? 今兒個就用Debug來簡單說一下程式執行的順序。

建立一個新的 BCB專案後,儲存所有檔案(預設命名)到你指定的資料夾後,開啟 Project1.cpp並在"WINAPI WinMain"設一個 debug point,用 F7去 Trace程式,就能發現程式就是從這裡開始的!!首先 Application->CreateForm() 會去執行 Form的建構子,接著再做 FormCreate,最後以 Application->Run()去執行 FormShow。

由以上可以知道,我們習慣把一些 initiation放在 FormCreate中,即每當程式啟動時都能去做一些參數初值設定,外部硬體初始化等動作。執行順序最後整理如下:
1. TForm1::TForm1
2. TForm1::FormCreate
3. TForm1::FormShow

來看一下實際測試錄影檔吧!!
(桌面錄影軟體: Freez Screen Video Capture)


2008年11月22日 星期六

雙螢幕來報到!

 雙螢幕(Dual Monitor)其實也不啥新技術,大多數人都會使用筆電的VGA端子(D-Sub)接至投影機進行簡報,而投影幕上的畫面和筆電上的畫面則以同步顯示。之前在實驗室看到學弟使用兩個LCD來工作,感覺很蠻不錯的,尤其在寫程式的時候格外"速吸(台語-舒適之意)"。

  目前的工作需要撰寫一些人機介面,而Borland C++ Builder是我常用的IDE,麻煩之處就是表單設計視窗(左)與程式碼視窗(右)的切換(F12都凹下去了),現在只要使用兩個螢幕就能方便地進行專案開發。