跳到主要內容

截至2006/04/19的C/C++精華文章!

所有有關於C/C++語言的文章都在這裡。
在BCB 中的多國語言程式製作
說明在BCB中如何撰寫多國語言程式。
一 個類似Popen的C++類別
附件的程式是一個C++的類別,專門供Win32平台下面使用類似popen的功能。可以透過他來執行其他命令,並且存取該 程序的stdin, stdout, stderr等pipe資料。也可以將console視窗隱藏,或者透過method將程序結束。
BCB 中的RTTI機制
RTTI 在BCB中其實有兩個意義。首先,針對一般標準的C++中所定義的,RTTI是所謂的Run-Time Type Identification的縮寫。傳統的程式語言中,所謂的資料型態僅在Compile-Time有所作用。舉例而言,您宣告了一個變數a,並且指定 其型態為整數。您如何在Run-Time期間知道他的型態是整數呢?很遺憾的是,在原來的C/C++中您是無法知道這樣的事情的。或陰z會問,這樣的資訊 有何作用?若是您考慮物件的繼承關係,您就會發現其重要性了。
如 何產生shared object(.so)檔案
如何產生shared object(.so)檔案?
在BCB 中使用StringTable
通 常寫軟體時,如果剛開始的時候沒有注意到將來要考慮i18n的問題時。到後面要補救就會變的工程浩大。不過,如果您的軟體是使用BCB Enterprise Edition所開發時,那麼這個步驟將會變得簡單一些。不過,前提是你必需使用Enterprise Edition才行。因為只有 ExterpriseEdition上面才有Translation Manager可用。
Microsoft Visual C++ Toolkit 2003
Microsoft Visual C++ Toolkit 2003是一套給C++使用的Compiler及Linker的程式。主要的目的是要給那些需要編譯出Windows環境下程式的使用者使用。
解 決PopupMenu在TTrayIcon上使用的問題
如果你有在BCB中使用TTrayIcon來製作TrayIcon的弁遄A你一定會覺得在BCB下面寫TrayIcon真是 輕鬆又簡單。不過當你想再加上PopupMenu時,事情似乎就不是那麼盡如人意了。
BCB 下的簡易萬用字元檢查
許多時候,我們會需要使用類似於命令列檔案名稱的萬用字元判斷。舉例來說,有時候需要檢查使用者輸入的檔案是否為 ".jpg"的檔案。
BCB 移動及縮放沒有邊框的視窗
在BCB中,如果想要做出類似於3M-PostIt這樣的視窗,就要把Form->BorderStyle設定為 bsNone。如此一來,視窗的Title bar及邊框就會消失了,但是不幸的是你也就失去了操作視窗的能力。
BCB 中開啟正在使用中的檔案
在Windows中,如果企圖要開啟正在使用中的檔案,將會傳回開啟失敗。這是因為正在使用的檔案是不允允許寫入的,但是還 是可以讀取它。
在BCB 下判斷目前Win32作業系統是哪種?
Win32Platfrom是一個global變數,在建立一般的BCB程式時都會有這個變數,透過這個變數就可以得知目前 所使用的Win作業系統是95或是NT。
Windows 下建立捷徑的的程式碼
在Windows平台下,要建立一個捷徑,可不如使用他這麼簡單。要透過Windows的COM物件去使用Shell的功能 才有辦法做到。
在BCB 中製作多國語言程式
如 果您寫的軟體需要考慮到轉換成為不同語言,那麼由Borland C++ Builder EnterpriseEdition 所提供給您的多國語言翻譯環境將是極為有幫助的。他可以很快的幫助您將各國語言版本製作出來。並且也提供動態的方式讓您可以輕易的製作出您所需要的版本。 甚至可以讓您在不用變動程式碼本身的狀態下,將GUI 的外觀字型等進行適度的調整。除了多國語言介面的製作外,透過本文後面所敘述的技巧,將可以讓您動態的切換不同的語系。這些BCB 都已經幫您處理得很好了,不過有些小細節您仍然需要注意,小心的處理或是避開,否則很容易的做不出來您想要的結果。
控 制其他視窗的位置及大小
看過不少人在網路上面問要如何控制別的程式視窗的大小及位置。其實,很簡單!只要取得該視窗的Window Handle然後透過Windows API中的MoveWindow()即可做到。
BCB 中將以空白字元分隔的字串分割的範例
很多時候,我們會希望將一個以空白分隔的字串加以分割成一個一個的字。也許其中的分隔字元有時有一個或是多個不一定。
BCB 中將兩個時間相減求天數的方法
其實,在BCB中有一個非常好用的時間class,TDateTime。利用他我們不僅可以很容易的將字串形式的時間轉換成 為可以計算的時間物件,也可以很輕易的求出兩個時間之間的差距。
BCB 中製作靜態執行檔
所 謂的靜態可執行檔就是一種不需要搭配其他的DLL就可以直接使用的執行檔。很多人常常在問,為何自己做出來的檔案在其他沒有安裝BCB的電腦就不能執行? 主要的原因就是在於當你用BCB寫一個程式時,無論這個程式有多簡單。或多或少都會用到一些BCB所提供的動態程式庫。當把執行檔拿到一台沒有安裝 BCB的電腦時,因為沒有這些DLL,所以就沒有辦法執行了。
如 何用BCB偵測使用者切換
在Windows XP中,提供了一個切換使用者的功能,這個功能對於使用者來說是個很好用的功能。但是對於某些程式的設計者來說卻是一個惡夢。因為這個功能,產生一些不同 與以往程式的行為。因此,如果能夠在自己的程式中設計一個機制來偵測是否目前的session已經被更動,就可以進一步的處理一些同步的問題了。
取 得桌面的檔案管理員視窗
有 些時候也許您會想要控制桌面(Desktop),有些比較熟Windows API的人,可能會馬上想到使用GetDesktopWindow()來取得桌面視窗。可是,這個函式所捉到的視窗其實不是真正的具有檔案管理員的視窗。 因此,下面提供的兩個函式,可以讓您抓到真正具有檔案管理功能的視窗。
在BCB 中如何讓Main form在Startup時隱藏
在BCB中預設的狀況下,都一定會顯示主要的Form。不過,在某些應用之下我們會希望能夠一開始的時候就將所有的Form 通通隱藏起來。若只是單單的將Form的Visible屬性設定為false是沒有用的。
包 裝OutputDebugString()為printf()的樣式
下面的程式碼是將OutputDebugString()函式將以包裝後,使其具有類似於printf的變數功能,這在顯示 除錯資訊時,是非常有用的。
BCB 的TIniFile沒作用?
TIniFile是一個提供INI檔案存取能力的VCL元件。但是第一次用的人,又沒有仔細的閱讀它的說明。常常會遇到一個 問題。就是指定的INI檔案沒有辦法被讀取或是寫入。
一 個計算Form上有多少相同類別的範例
常有人問要怎麼知道Form上面所有相同類別元件的個數,或是取得他們。希望下面這個範例對於有類似的問題的人有所幫助。
使 用auto_ptr解決memory leak的問題
auto_ptr是在C++的STL被引進的機制之一,釵hC++初學者對於這個機制的用法並不是很清楚,甚至對於為何要使 用這樣一個機制也不瞭解。本文將對這個機制做一個說明。
基 本避免Memory Leak的技巧
很多程式初學者比較沒有在注意一些Memory處理上的問題。其實只要平時稍微注意一下,就可以避免掉很多問題,而且也可以 讓你的程式更好以及更穩定。
何 謂callback function?
簡 單的說,如果你使用了某個function,那麼你就是『call』了一個function。如果系統或是函式是要求你給一個function pointer,這個function pointer指到一個實際的函式(多半這個函式是你自己寫的)。然後它會在適當的時間呼叫此function,則此function就是所謂的 callback function。因為這個function是被『callback』了。
BCB 中轉換螢幕座標到元件內部的座標
如果您曾經用過GetCursorPos()這個函式取得游標的位置。您或雪|為了如何將這個函式所取得的座標轉換成特定元 件內部座標而煩惱吧。
BCB 中改變相同型態元件的方法
常有人問到怎麼樣改變畫面上相同型態元件的方法。有些人可能會回答利用一個陣列去存放這些元件,透過瀏覽這個陣列的方式將元 件一個一個的改過來。其實,善用VCL所提供的機制,我們可以用另外一種更具變化的方法來做。
BCB 的Typinfo::GetPropList()無法Link的問題

將 剪貼簿文字自動貼到其他視窗的方法
一位網友問了如何將文字貼到其他視窗的問題,我把他給我的範例修改一下貼在這裡
ShellExecute 的用法
在Windows下面,要讓自己的程式能夠執行其他的程式,我想最簡單的作法就是透過ShellExecute()這個函式 來做。
使 用萬用字元的方式搜尋檔案
這個範例主要是在BCB下,提供一個函式SearchFile,透過他可以透過萬用字元的方式來找尋特定目錄下的檔案。
BCB 的TOpenDialog無法自動回復的起始目錄的問題
TOpenDialog有個InitialDir的設定,可是設定後卻無法在每次Dialog開啟時自動回到該目錄。應該如 何做呢?
將 多個Object files(.o)結合為一個
雖然說大部分的狀況下,您應該都是將許多的Object file合成一個lib檔案。但是,說不定有些時候您想要將它們merge成一個較大的object file,而非lib檔案。本文將說明如何完成這項任務。
取 得BCB的TRichEdit元件的Scrollbar資訊
在使用TRichEdit元件時,有時我們會想要取得他的ScrollBar的資訊。可是在TRichEdit的 Property中似乎沒有對應的項目,也沒有對應的Method可供呼叫。那麼要如何才能知道目前ScrollBar的位置等資訊呢?
張貼留言

這個網誌中的熱門文章

解決Python script無法在cp65001的console下執行的問題

你是否有這樣的經驗,明明沒問題的script,拿到某的電腦一直看到下面的訊息而無法執行。
LookupError: unknown encoding: cp65001 cp65001是什麼鬼!?其實,它就是UTF8阿!只是,Microsoft喜歡叫他cp65001(code page 65001號)。附帶一提,我們常用的Big5是cp950。想要知道你目前所使用的code page可以在Windows的console視窗執行

Portable Python

我常常需要把Python寫的script帶到其他電腦使用,因此,一個免安裝,可攜帶的Python就顯得十分重要。最近看過了幾個可攜式Python的方案,下面這個PortablePython是我覺得最合我意的方案。因為它提供了大部分會用到的Python module及工具,甚至連wxPython及PyGame也有。同時也有好用的Python編輯器PyScripter。所有開發Python所需的開發工具都一應俱全了!把它放到隨身碟中,就不用到處幫人安裝Python了。

PortablePython: http://www.portablepython.com/

Windows Installer死掉了嗎?

最近我的電腦發生了奇怪的事情。只要是與Windows Installer有關的東西,都無法動作了。也就是說,我無法安裝包裝成msi的軟體。也無法加以移除。搞了半天,始終沒有頭緒。一度動念頭想要將整台電腦重灌。

不過,經過一路追蹤問題,我發現是Windows Installer的服務無法啟動,而造成整個問題。透過系統管理工具中的『服務』,去啟動Windows Installer服務時,每次都看到代碼1067的錯誤訊息。無論怎麼重灌Windows Installer也無法解決。

今天突然靈光一閃,我開始把正在執行的程式一個接著一個砍掉,一邊砍一邊去啟動Windows Installer服務。試了好久,都快要放棄的時候。忽然我的Windows Installer就run起來了。趕快看一下是砍了哪個程式變成這樣的。終於被我找到罪魁禍首了!!就是下面這個程式造成的。只要把這個服務停掉,我的Windows Installer就復活了!!!


感謝匿名網友提供另外一個小技巧:
『只要在windows installer服務的內容裡,在登入那頁勾"允許服務與桌面互動" 就輕鬆解決囉!』

BTW, 我沒實際試過,有遇到這個問題的人,請試試看!然後好心的跟我回報一下!

有些網友找不到service的控制畫面。下面簡單說明一下:

service的控制是在
『控制台->系統管理工具->服務』

英文的話是
『Control Panel->Administrative Tools->Services』

再不然,用command line下services.msc /s也可以叫出來。

再不行...就試試吧
> net stop LVPrcSrv
> %WINDIR%\system32\sc.exe config LVPrcSrv start= disabled

PS: 如果需要重新安裝MSI installer,可以到Microsoft的下載中心