Skip to Content
撰文於銘 飄散隨風 心行無語 仰首蒼穹

自己寫一個 GUI 版 C++ Builder 單元測試

最近在寫一個較大的專案,而且要能在 Windows 和 Mac 上執行(Android 和 iOS 以後再考慮),加上第一次用新版 C++ Builder 跨平台的版本寫大專案,所以凡事起頭難,這也是第一次想加上單元測試,以利後續檢查與驗證。

C++ Builder 上面宣稱已有跨平台版本的 DUnitX,詳見如下:

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/DUnitX

主要方法是在 __published 的宣告範圍內寫下要測試的程式,然後自行把每一個測試程式寫進去,執行時就會逐一執行測試程式,最後把結果列出來,如下圖。

用 #ifdef 判斷作業系統

在程式中若是要因應不同的作業系統而有不同的內容,則可以用底下的方法來處理。

#ifdef _Windows

….. (windows 下的程式)....

#endif

底下是目前在 C++ Builder 實際試出來的。

Win32 下有

_WINDOWS_
_Windows
WIN32
_WIN32
__WIN32__
(注意 : 這個在 Win64 沒有)

Win64 下有

_WINDOWS_
_Windows
WIN32
_WIN32
_WIN64

後來在這裡有查到一些,但沒有我測試的完整

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/WIN32#win32

看來判斷 Windows 可用 _Windows

Win32 則用 __WIN32__

Win64 則用 _WIN64

Android 則用 __ANDROID__

Mac 和 iOS 則用 __APPLE__

iOS 則用 TARGET_OS_IPHONE

32位元手機則用 __arm__

64位元手機則用 __arm64__

利用以上去組合,應該就可以判斷了。

補充: 後來看到這篇 

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Creating_an_iOS_App

提到 iOS 可以使用  TARGET_OS_IPHONE 來判斷。

還有如下例子:

#if (TARGET_OS_IPHONE)
// Code for iOS devices only.
#endif
 
#if (TARGET_OS_IPHONE) && (__arm__)
// Code for 32-bit iOS devices only.
#endif
 
#if (TARGET_OS_IPHONE) && (__arm64__)
// Code for 64-bit iOS devices only.
#endif

 

將 TWebBrowser 設定成 IE 11

C++ Builder 不管是 VCL 或 FireMonkey,都有 TWbeBrowser 元件。在 Windows 系統下,該元件就是一個內嵌的 IE。

其實我很想不要用 IE,希望找到內嵌的 chrome 元件,但目前找到的好像不是很好處理,也擔心日後升級問題,所以在 Windows 下還是暫時先以 IE 為主。

查了說明文件,指出內建的 TWebBrowser 預設的版本是 IE 7。所以我寫了一個很簡單的程式,用 FireMonkey 版的 TWebBrowser,直接連到一個 HMLT5 的網頁

https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_video

這個網頁我在 IE 上測試,要 IE 11 才能順利執行。

底下是我的測試程式執行結果,可以看到就是沒有什麼結果。

C++ Builder 處理 3D 物件及動畫

3D 物件程式

參考:http://docwiki.embarcadero.com/RADStudio/Tokyo/en/FireMonkey_3D

C++ Builder 可以處理 3D 程式,主要方法簡述如下。

1. 若要能直接放 3D 物件,一開始就要選 3D Application。

2. 若不是在  3D Application 的程式中想加入 3D 的物件,要先加入 TViewport3D 元件,才能在裡面放 3D 物件。

3. 反之,如果要在 3D Application 放 2D 元件,就要先放 TLayer3D 元件,才可以在裡面放 2D 元件。

正法要--四聖諦及緣起法

當行者接受了端正法,了解布施、持戒與生天之法是基本的修行,並在佛陀或聖弟子的教導下,知道欲的過患、雜染以及離欲的好處之後,願意更進一步學習滅苦之道,此時就會說明「正法要」,也就是四聖諦--苦、集、滅、道。

諦就是真理的意思。四聖諦就是四種真理,這是佛法極重要的教導。

苦諦,就是說明世間是苦的真相。想要滅苦,就要知道苦是什麼。明顯易見的苦人人都了解,但潛藏在世人追逐的幸福快樂之下,是否也有幽微難察之苦呢?這都是苦聖諦所要說明的。

集諦,又稱苦集聖諦,集是集起的意思,這是在說明苦的生起是由某些因緣的生起才有的。知道了原因,就有機會找尋對治的方法。苦的原因主要是無明與渴愛。

滅諦,又稱苦滅聖諦。既然知道了苦是有因有緣才會生起,就表示只要想辦法對治苦的根源,讓這些因緣不再有機會生起,苦就有永遠滅盡的可能,此即涅槃。

道諦,又稱苦滅道諦。道諦就是滅苦之道,達至滅諦的修行方法,也就是八正道,細說則有三十七道品。

 

貫穿四聖諦的,則是另一個佛法中極重要的教導,也就是「緣起法」。

緣起法的重點是告訴我們,一切有為法都是有因有緣才會生起,而這個生起的因緣若是不存在,則該法也不會生起。

緣起法最常聽到的說明就是「此有故彼有,此生故彼生;此無故彼無,此滅故彼滅」。

了解緣起法,我們才知道苦的存在,並不是天生自然就有的,也不是由某位造物者所強加在眾生身上的,更不是隨機看運氣而冒出來的。知道了苦有因,就可以去找苦的因。並且知道苦的因若滅,則苦也不會再有生起的機會。也就是藉由緣起法,得知四聖諦的教導是非常合理的。

 

布施、持戒、生天之法

布施、持戒、生天之法,是端正法的主要內容。

常聽到的布施有三種:財施、法施、無畏施。修習布施可以離慳貪,累積福報。

佛陀教導摩訶男居士的這段經文值得我們學習參考。

「優婆塞捨具足者,為慳垢所纏者,心離慳垢,住於非家,修解脫施、勤施、常施,樂捨財物,平等布施。摩訶男!是名優婆塞捨具足。」
《雜阿含.927 經》

持戒,最基本的戒律是五戒:「不殺、不盜、不婬、不妄語、不飲酒。」

佛陀亦鼓勵居士於齋日受持一日一夜的八關齋戒,用以學習效法阿羅漢。

八關齋戒的內容就是五戒再加上不著香華歌舞觀聽、不坐高廣大床、不非時食。

生天之法,主要就是禪定。

在佛教的宇宙觀中,我們生活的地方是欲界。欲界除了人間,再上去還有六天,主要是依行善持戒而生。欲界再上去是色界天與無色界天,要依修習禪定才能出生在相應的天界。

常聽到的禪定方法有安那般那念、四無量心、四界分別觀等,上座部有整理出四十種修習禪定的方法,日後再簡單介紹。

=============

後記:

寫這一篇時,還以為三施是常聽到的說法。結果在阿含經中並沒有找到這樣的說法。頂多在增壹阿含經中有提到二施:財施與法施。看來三施還是後來才整理出來的。

五戒與八關齋在阿含中就有,頂多是用字不太相同。

而南傳修禪定的四十業處,應該就是後來整理出來的。

=============

 

 

五蘊與五取蘊

Ye 師兄在臉書提到經常有法友討論這個議題:
 

【苦諦是指「五取蘊」而不是指「五蘊」,説「五蘊即苦」是錯誤的!】
 

法友們的議論.大約如下:

【「五蘊即苦」是錯誤的!】

為何佛陀説:「簡而言之:五取蘊即苦」而不說:「五蘊即苦」?

因為五蘊分成有漏五蘊和無漏五蘊。只能說有漏五蘊是苦,絕不能說無漏五蘊是苦。

修行的目地就是為了斷除執取,達到「身苦心不苦」的境界。阿羅漢聖者在尚未入涅槃前,即是斷除五取蘊,而不是斷除五蘊!

我個人認為這個論點有一些問題,試分析如下:

1.

五取蘊在雜阿含經中又稱為五受陰,請參考下列經文:

《雜阿含.58經》卷2:
佛告比丘:「非五陰即受,亦非五陰異受;能於彼有欲貪者,是五受陰。」
(CBETA, T02, no. 99, p. 14, b25-26)

在尼柯耶《相應部22相應82經滿月經》也有相同的教導:

「比丘!那執取既非就是那些五取蘊,也非除了五取蘊外有執取,而是凡哪裡有欲貪者,那裡就有執取。」(莊春江居士譯)

由經文可以看出,所謂五陰與五受陰的差異,並不是二者有本質上的不同,而是在於眾生對其產生的貪欲,所以才有執取。

同樣的一堆錢,在聖者眼中,就是單純的色法,因為沒有貪欲,就不會產生執取。但在某些凡夫眼中,因為貪欲,所以那些錢就可被稱為取蘊。

因此,以為五蘊可以分為二種,一種是有漏,一種是無漏,是不合理的分類。若這樣分類,難道意思是聖者看到五取蘊,也會產生貪欲嗎?而凡夫對於無漏五蘊,就算貪愛,也不算執取嗎?

端正法

「如諸佛法,先說端正法,聞者歡悅,謂:說施、說戒、說生天法。」《中阿含經》

由經文可以得知,端正法就是:布施、持戒、生天之法。

前文提到,佛法的目的是滅苦,簡單來說苦可以分成二種,第一種是表面上很容易感受到的苦,第二種就是深層不易察覺的苦。

對治這二種苦,就是要「修福」與「修慧」,也就是我們常聽到的「福慧雙修」。端正法,就是強調修福的層面。(註)

布施與持戒,是累積行者的福報。或是現世獲福,或是在未來世,有機會生為富貴之人,有福報的人總是可以減少許多現實中的苦。甚至來世有機會出生在欲界天,成為欲界天人,這又比生在人間享有更多的福報了。

更進一步就是出生在色界天或無色界天,這福報又遠超過欲界天人。不過這已不是經由布施持戒可以做到,而是要透過修習禪定,依四禪八定的不同,來世才有機會出生在相應的天界。

在此生天之法就是指修習禪定,而布施與持戒,也算是一種生天之法,因為也有機會生至欲界天。

雖然說這些是修福,其實也有修慧的層面。佛陀教導三學,次第就是「戒定慧」,由此可知持戒與修定也是修慧的基礎。

端正法就是世尊在為眾生說法時,先教導基本獲福滅苦的方法,依教奉行,就可以過著快樂幸福的日子。若大眾歡喜信受奉行,佛陀就會進一步闡明「正法要」,教導徹底滅除一切苦的方法。

下次再來簡單說明布施、持戒、生天之法的內容。

 

註:將苦分為二種,分別以修福和修慧來對治,並不是在經文上看到的觀念,而是我自己覺得容易理解的對應方式,特別在此說明,以免有人想找相關經文而找不到。

學習佛法的目的

學習佛法,我覺得最重要的問題就是為什麼要學佛?方法是什麼?目的又是什麼?

世尊在成佛之前,是迦毗羅衛國的悉達多太子,他為了解脫生老病死之苦而出家修行。所以希望能由一切的痛苦中解脫出來,應該是學習佛法最重要的目的了。

在《中部尼柯耶》22經中,佛陀如此宣說:「比丘們!從以前到現在,我只安立苦以及苦之滅。」(莊春江居士譯),這段經文應該是這個問題的最好說明了。

知道了目的,滅苦的具體方法又是什麼?

根據不同的情況,佛陀通常提出二種次第,第一種稱為「端正法」,第二種則是「正法要」,後續再慢慢介紹。

Firebase 設定與測試

最近才知道 Google 很佛心的提供了免費的資料庫 Firebase 供大眾使用。它是 JSON 格式的資料庫,不是傳統的關聯式表格,很容易提供網頁或 APP 儲存資料,有些程式需要把資料或設定放上雲端的,這也是不錯的選擇。

今天做了一些研究,把心得記錄下來。

首先可以到這裡建立專案 https://console.firebase.google.com/

可以看到新增專案的地方,也可以看到舊專案。

訂閱文章


by Dr. Radut