顯示具有 工作 標籤的文章。 顯示所有文章
顯示具有 工作 標籤的文章。 顯示所有文章

2019年7月30日 星期二

BCB6 擷取作業系統的版本

1. 了解Windows作業系統版本的號碼 : Operating System Version
2. 針對Windows8以上版本,需要使用: Version Helper functions
3. 針對Windows8以下版本,需要使用: GetVersionExA function

以下程式顯示如何取得作業系統的版本


//---------------------------------------------------------------------------
AnsiString GetSystemName()
{
    AnsiString Name=""; //先判斷是否為win8.1或win10
    typedef void(__stdcall*NTPROC)(DWORD*, DWORD*, DWORD*);
    HINSTANCE hinst=LoadLibrary("ntdll.dll");
    DWORD dwMajor, dwMinor, dwBuildNumber;
    NTPROC proc=(NTPROC)GetProcAddress(hinst, "RtlGetNtVersionNumbers");
    proc(&dwMajor, &dwMinor, &dwBuildNumber);
    dwBuildNumber&=0xffff;
    if(dwMajor==6 && dwMinor==3)    //win 8.1
    {
        Name="Microsoft Windows 8.1";
    }
    else if(dwMajor==10 && dwMinor==0)  //win 10
    {
        Name="Microsoft Windows 10";
    }
    else
    {
        //判斷win8.1以下的版本
        SYSTEM_INFO info;       //用SYSTEM_INFO結構判斷64位AMD處理器
        GetSystemInfo(&info);   //呼叫GetSystemInfo函式填充結構
        OSVERSIONINFOEX os;
        os.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX);
        #pragma warning(disable:4996)
        if(GetVersionEx((OSVERSIONINFO *)&os))
        {   //下面根據版本資訊判斷作業系統名稱
            switch (os.dwMajorVersion)
            {   //判斷主版本號
                case 4:
                    switch (os.dwMinorVersion)
                    {
                        case 0:
                            if(os.dwPlatformId==VER_PLATFORM_WIN32_NT)
                                Name="Microsoft Windows NT 4.0";
                            else if(os.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
                                Name="Microsoft Windows 95";
                            break;
                        case 10:
                            Name="Microsoft Windows 98";
                            break;
                        case 90:
                            Name="Microsoft Windows Me";
                            break;
                    }
                    break;
                case 5:
                    switch(os.dwMinorVersion)
                    {
                        case 0:
                            Name="Microsoft Windows 2000";
                            break;
                        case 1:
                            Name="Microsoft Windows XP";
                            break;
                        case 2:
                            if(os.wProductType==VER_NT_WORKSTATION && info.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
                                Name="Microsoft Windows XP Professional x64 Edition";
                            else
                                Name="Microsoft Windows Server 2003";
                    }
                    break;
                case 6:
                    switch(os.dwMinorVersion)
                    {
                        case 0:
                            if(os.wProductType==VER_NT_WORKSTATION)
                                Name="Microsoft Windows Vista";
                            else
                                Name="Microsoft Windows Server 2008";
                            break;
                        case 1:
                            if(os.wProductType==VER_NT_WORKSTATION)
                                Name="Microsoft Windows 7";
                            else
                                Name="Microsoft Windows Server 2008 R2";
                            break;
                        case 2:
                            if(os.wProductType==VER_NT_WORKSTATION)
                                Name="Microsoft Windows 8";
                            else
                                Name="Microsoft Windows Server 2012";
                            break;
                    }
                    break;
            }
        }
    }
    return Name;
}
//---------------------------------------------------------------------------

[+/-] 繼續閱讀...

2019年3月28日 星期四

BCB 動態載入DLL


因應Win XP to Win 7 to Win 10的驅動程式可能使用的DLL不同,所以到網路上找了一些方法來解決。

PS. 由於BCB 6.0只支援32bit的Compiler,所以作業系統也只能同時都是32bit

1. 下載工具程式,確認DLL內的Function名稱
               DLL Export Viewer


2. 編寫軟體,目前的寫法是用來判斷是不是64位元作業系統,但是因為BCB不支援64bit,所以就算可以正常載入MN200DLL_64.dll,軟體也沒辦法執行。


#include windows.h
typedef bool(WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
HINSTANCE hInst;

short __stdcall (*Dll_mn_open_all)(BYTE* pNumLine);

bool IsWow64()  //判斷是不是64位元作業系統
{
    int bIsWow64=0;
    //IsWow64Process is not available on all supported versions
    //of Windows. Use GetModuleHandle to get a handle to the
    //DLL that contains the function and GetProcAddress to get
    //a pointer to the function if available.
    fnIsWow64Process=(LPFN_ISWOW64PROCESS) GetProcAddress(GetModuleHandle("kernel32"), "IsWow64Process");
    if(NULL!=fnIsWow64Process)
    {
        if(!fnIsWow64Process(GetCurrentProcess(), &bIsWow64))
        {
            //handle error
        }
    }
    return bIsWow64;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
    if(IsWow64())  //如果是64位元作業系統
    {
        Button1->Caption="X64";
        hInst=LoadLibrary("MN200DLL_64.dll");
        (FARPROC &)Dll_mn_open_all=GetProcAddress(hInst, "_mn_open_all");
    }
    else
    {
        Button1->Caption="X32";
        hInst=LoadLibrary("MN200DLL.dll");
        (FARPROC &)Dll_mn_open_all=GetProcAddress(hInst, "_mn_open_all@4");  //Function名稱由DLL Export Viewer裡面確認
    }

    int X=GetLastError();  //確認是否有錯誤碼
}

[+/-] 繼續閱讀...

BCB / C++ 時間相關函式




1. time :

精度只到秒,這應是最不準的計時器。

2. clock:

精度為 1/CLOCKS_PER_SEC,大多系統 CLK_TCK 為 1000,故精度為毫秒。


3. GetTickCount:

呼叫此函式時,將傳回從系統開機至當時經過多少毫秒,由於傳回值為DWORD,故最多只能計時 49.7 天

4. timeGetTime: 

此函式與 GetTickCount 解釋並無不同,但有一說 timeGetTime 精度較 GetTickCount 高,也有一說此函式實際精度只到 50ms,待查證。

5. QueryPerformanceCount / QueryPerformanceFrequency:

這應是目前精度最高之函式,精度達微秒,但在 MSDN 上亦註明,此函式若硬體不支援,將只傳回 1000,再用 GetTickCount 代替它 (如果我沒意會錯的話應為如此)。使用此函式時將較耗資源。


6. GetSystemTimeAsFileTime:

這方法較少見。FILETIME 結構體為兩個 32 位元之 unsigned integer,一個是 high , 一個是 low,所代表意義為,從 1601 年 1 月 1 日至現在時間經過了多少個 (100 ns)。精度與準度待查證。



windows平台时间函数性能比较QueryPerformanceCounter,GetTickCount,ftime,time,GetLocalTime,GetSystemTimeAsFileTime


 實際的Code,使用BCB6.0在我的i7電腦上跑出來數據如下:

[+/-] 繼續閱讀...

2010年11月29日 星期一

上海之我見,趴吐!

這邊繼續給他講下去~~

* 女生衣服的墊肩莫名的高,就跟少林足球裡面的趙薇一樣。
* 公交車 (也就是公車) 有夠便宜,2RMB可以從頭坐到尾。
* 最常見的幾間連鎖餐館:蘭州拉麵(裡面只賣牛羊,沒有豬,因為是伊斯蘭教的)、沙縣小吃 (很像台灣的便當店)、重慶雞公煲 (還沒吃過)。前面兩間挺便宜的。
* 很愛嗑瓜子,而且一定要嗑到滿地都是。
* 上次去外灘,這次去了外灘的對面--陸家嘴:因為是貿易區,所以大樓林立,也很多百貨公司,整個就是非常的現代化感覺;跟黃浦將對面的外灘復古風,行成強烈的對比。
* 肯德基裡面賣的東西有夠多,除了台灣看的到的,竟然還有飯類套餐,飲料也有珍奶之類的可以選。
* 燒烤店有一種大茄子,烤起來很好吃。
* 通常有點年紀的歐吉桑都穿獵裝外套;女生大部分都穿大衣(長度約到膝蓋上),感覺就很俐落帥氣(我喜歡 :p)
* 地鐵上寫著"禁止乞討",可是還是會有人在乞討。
* 電視上,十台有八台在演中共打日本鬼子順便滲透國民黨;或是某個民初軍閥經過共產黨曉以大義後,投奔八路軍的劇情 (難怪台灣都不會播)。
* 電視新聞講到台灣,都是稱讚國民黨;消遣民進黨的消息。
* 電視上常有穿著很潮流的人,卻在唱著傳統民謠;或是用民謠式的唱腔在唱流行歌,最扯的是Rap式的民謠 =.=。
* 經常在路邊可以聽到熟悉的台語歌旋律,可是歌詞內卻是國語的,而且意思跟原本的台語歌完全不一樣。
* 所有英文字都會有中文名字:Citizen=西鐵城 <--我覺得很經典。
* 輸入法使用漢語拼音,所以通常中文名稱轉成英文時,念法是一模一樣的,不像台灣會用類似的意思去翻成英文。
* 有些公車有車掌,所以上下車都是跟車掌小姐說;可是沒有車掌小姐的車,要下車時,只要站到後門口(前上後下),司機就會在到站時停車讓人下車。
* 插座部分:兩孔的是通用的;但是如果是三轉二的頭(一粗一細),在某些插座是沒辦法插的!! (所以我只好忍痛拔掉那第三根腳)。
* 談文明:到處都說要文明,搭車要文明,上廁所也要文明;可是我看他們根本就不管他壓~上下車照擠、上廁所也不洗手。上次更看到一個媽媽在地鐵裡面罵小孩,從上車一路罵到下車(約30分鐘),期間還一直怪他小孩做的事情不文明;可是我覺得他在車上潑婦罵街也很不文明。
* 閃光超級閃:情侶在地鐵站或地鐵上都是超級閃的;或摟或抱都只是基本行為,我今天還看到在電扶梯上"喇幾"的。
* 測速照相:拍攝方是就是在馬路的每個線道都架一台照相機,每一台經過的車都會拍下來,不管你有沒有違規。所以一路上會一直看到有閃光燈在閃。
* 計程車:有四種,第一種是寫著Taxi的正統計程車,都會給發票,不過可能會拒載,起步價 12RMB/3KM;一種是一般房車,可是沒有Taxi標誌的;第三種是三輪車,後面弄個棚子遮陽避雨;第四種是摩托車。後面三種我都沒坐過,因為我要報帳阿。

[+/-] 繼續閱讀...

2010年11月21日 星期日

上海之我見

最近這一個月都在上海生活,所以就來說一下對上海的看法。

1. 90%的人都是瘦子,要說是胖的人很少,頂多就是肉肉的。
2. 90%的人都用NOKIA,我不確定是不是行貨,因為有可能是NCKIA,但是我看不出來 =.=
3. 90%的人在地鐵裡都在看手機,通常是小說之類的,也有在看影片。
4. 90%的人在地鐵都不會讓坐,常常連站都有問題了。
5. 90%的柏油路(真的只限柏油路喔!!)都是平的,除了人孔蓋高出路面有好幾公分,我也不懂為何要做那麼高。但是回填的路比台灣平上100倍。如

果是水泥的路面就頗糟糕了。
6. 90%以上的計程車都是福斯的,而且90%以上是手排,90%以上是老車。 (其實我很想說99%都是福斯汽車,跟台灣20年前的裕隆很像阿~)
7. 上海人腳很臭,我也不知道為何,就是臭死人不償命的那種。我真的很佩服待在更衣室裡面的警衛,聽說他們連吃飯都在更衣室裡面穿。
8. 或許是腳臭吧,所以上海也很多抓腳洗腳店。可是這麼常洗怎還會這樣臭阿??
9. 貧富差距有夠大,工廠內的OP月薪大概2K RMB,可是去到鬧區可以看到一堆背著名牌包、開著進口車的有錢人在逛街。
10. 說到名牌包,飯店的接待小姐說他根本連A貨都買不起?可是我去Outlet卻看到一堆大陸人在血拼。而且Outlet賣的價格跟台灣當季的一樣貴。
11. 上海外灘有夠發達,沿著南京東路一直走到靜安寺,共四個捷運站(大約就是台北火車站沿著忠孝東路走到信義區那種感覺),中間有三四十間百

貨公司,一間比一間大,而且精品都值接開旗艦店,裡面不乏有陸客在採購。在百貨大廳還有賣法拉利與瑪莎拉蒂,當下就看到有一個美眉在跟

Sales談 >.<
12. 髒,隨地吐痰(連地鐵內都吐)、亂丟垃圾、隨地便溺還有口香糖亂黏。
13. 食物又油又辣。尤其是在台灣一點都不辣的"青椒",我被辣到哭出來...
14. 物價差異很大,同樣的連鎖店,在偏僻地區要5RMB,在鬧區就要9RMB
15. 肯德基的大杯飲料是台灣的中杯,而且套餐售價跟台灣差不多
16. Motel 168不要去住,雜誌上說很爛,我不信去住了三天,真的很爛(唯一可以誇讚的是網路不像錦江會塞車) =.=
17. 住的話推薦連鎖的"錦江之星",乾淨又便宜 (徐經店的IPTV真是好物阿~~想看啥就看啥,害我都想買一台回家)。不過唯一的缺點,就是我住

了兩間,到晚上網路幾乎都是癱瘓的 =.=
18. 99%的人都穿鞋子,我還沒看過街上有任何人是穿拖鞋或是涼鞋的,連女生都沒有穿魚口鞋了。 (那1%其實就是我穿著勃肯趴趴走 :p)

[+/-] 繼續閱讀...

2009年12月31日 星期四

The Year End of 2009~

去年的今天,我結婚了,當時也是寒風颼颼,眾親朋好友還很有心的來參加婚禮~
一年過去了,就隨便記一下這風雨飄渺的一年吧~~


首先是2008的金融大海嘯,造成我原本工作的小英公司把台中分處回收,所以就去台北上了幾天班後,辭職回台中。

然後蜜月旅行去了帛琉,對一個完全不會游泳的傢伙來說,連續五天都在海上漂阿漂的,看了很多珊瑚和海底世界,真是有趣。

過完年二月,本來以為找到了好工作,沒想到反而是掉到了一個大"黑洞",做了四天,我就去職訓局請領失業給付~~

三月,想說中了賓果,可是因為我教不會電腦看骰子,結果輸的一蹋糊塗,只好繼續領失業給付。

五月,進入了目前工作的公司,一切看似很美好,就在接手新的開發機後,開始了無窮無盡的顧機台之旅

先是七月在湖口,不過也還好,加班時數並沒有破百。

八月底,周小妹誕生,舉家歡騰,就放了那麼三天的陪產假

九月,一天休假都沒有,整天都在試機,當月加班時數約一百三~~

十月,開始出機,也是噩夢的開始,幾乎只要機台要上線,當天就得"早點回家",而且越後面的機台就要"越早"回家,加班時數也差不多在一百二.

十一月,已經沒啥印象了,因為幾乎都在別人家的工廠度過,也差不多加班一百二小時。

最猛的就是在十二月啦~~

我明明周休二日,也沒有特別刻意去加班,可是12/15去看我家班時數時,竟然有80,如果乘以二,哪不就等於我得加到160 =.=

所以開始厲行能不加班就不加班的策略,誰知道~12/29去看,還是累積到140,不過上帝對我是眷顧的,他怕我時數達不到160,所以就在昨天白天值班的時候,經理跟我說:史提芬,明天夜班的人重感冒了,你去幫忙顧一下吧~~~~

天阿,就是這麼剛好,加起來應該是160差不多 =.=

12/5買了人生中,第一次花錢買的車,Lancer Fortis (大白),雖然是先跟老媽貸款,自己慢慢繳清,但是感覺也比較踏實。
12/19 入手了小黑 (Lenovo R400),比去年買的小白(工人舍 S37)好太多了 (小白好像很久沒有看到他了?!)

作文的最後,都得要結論一下~
回顧了2009的風風雨雨,展望2010,還是希望可以賺大錢啦~~
然後鍋子可以少背幾個就好囉~~~

[+/-] 繼續閱讀...

2009年10月31日 星期六

研發部餐會

今天晚上是公司研發部的聚餐,地點是在雅潭路上的陶醴春風匯館...

其實在這的前一周,真的是疲勞轟炸到某種程度~~
先是機器不斷的生產出來,又趕著送到客戶那邊去
然後我就得去客戶那邊把它修理修理
不過修的好就算了;常常遇到的問題又是我不太會也不知道怎麼修的
就像禮拜四,本來已經在生產的機器,換個位置後,就不動了?!
好不容易找人幫忙修好,又發現跟測試機的連線有問題~~
整個就是連綿不絕的問題阿 >.< 所以腦海裡就浮出了很想換工作的念頭。 不過在今天吃完晚餐後,這念頭不見了 因為公司裡的大中小三個老闆人都很Nice 同事們也都很Nice 有個好老闆,至少工作被婊的機會就變少了 老闆也不會胡亂搞,掏空公司之類的~ 所以,還是努力的學會修機器的技巧,認真賺錢,就別想太多拉~~

[+/-] 繼續閱讀...

2009年10月11日 星期日

忙碌的九月天

自從八月三十日,周小妹出生之後,
總共放了三天的產假,再來到十月初都沒有放假
整個加班加了破百小時
真的是有夠給他累的啦
基本上每天早上出門到半夜才回家
會碰到的人就只有阿如和外勞
有時候甚至連周小妹都沒看到...因為被抱去別的房間睡覺去了。

不過雖然工作忙會有很多摳摳,但是也出了不少的包
還好慢慢都有解決掉,機器也比較進入狀況

希望之後公司可以賺大錢,但是不要這樣忙到昏天暗地就好~

[+/-] 繼續閱讀...

2009年5月31日 星期日

電控工程師

在被裁員後,浮浮沉沉了將近三個月,這一篇就來寫一下心路歷程囉~

首先是在黑洞科技,過年後去上班四天就被裁員了....
所以只好去就業服務中心申請失業給付
然後我媽就要我去上 圓桌教育基金會-改變的力量
接著去應徵了前一年就有去應徵過的 賓果天下
不過因為我個人的關係,經過三週的考試,最後一關還是沒有通過,
領了只有失業給付一半的薪水後,又回去就業服務中心,繼續領勞保局的薪水。

然後就又展開了104生涯
先是有前小英同事介紹的 世界遊戲 ,不過也不知道為何,我就是不想去那邊上班。
也去了仁寶面試過,不過我明明就是Linux專長,卻要我去做Windows =.=
之後還有鈊象電子,裡面的主管也都有去上過圓桌的課程,可惜沒有應徵上。
訊連科技的測試工程師,這公司好遠,在新店
然後剛好在網站上看到清水高中在進用科技產業人力甄選,也去報名甄試,沒想到只有三個人報名,只有兩個去面試,我還正取上。
可是因為只有一年的工作時間,正式上班日期也還沒有確定,剛好比他早幾天的鴻勁科技通知我去上班,所以就開始了我的自動控制工程師的程式設計生涯啦~~

現在的公司裡面,同事人都很好,也都很願意教我工作上的事情,希望可以穩定的做下去囉~

另外,今天有公司的新聞--看好產業前景 鴻勁及華楷擬中科投資設廠

鴻勁科技股份有限公司:投資金額為新台幣1.25億元,申請在中部科學工業園區投資設立,研究、設計、開發、製造及銷售晶圓表面瑕疵檢查機,本案主要應用於半導體製程之封裝測試,含Wafer自動入料定位、Wafer掃瞄位置確認、動態Linnne Scan連續取圖比對、標示與記錄檢出結果、Wafer自動收料定位、支援前製程各式設備Map圖;係整合自動化控制、視覺影像處理技術及精密機械設計等技術完成高品質產品,可結合半導體線上品管及製程檢測之需求,使表面瑕疵檢測模式由半自動人工檢測方式進入全自動化檢測,提升半導體封裝測試製程之自動化能力。
  
本案產品的開發有助於提升我國半導體封裝測試製程之自動化能力,對我國半導體產業製程自動技術提升及相關產業人才培育助益甚大。

[+/-] 繼續閱讀...

2009年3月23日 星期一

C語言 - 條件運算符

為了縮短程式碼,所以大家都會無所不用其極的用很短的行數去表示很多的東西
在if判斷式的部分,某些狀況下可以採用 "條件運算符" 來達成減少行數的目的

原本的程式如果是

 if(x>y)
  a=x;
 else
  a=y;

則使用 條件運算符 後,會變成下面這一行:

  a=((x>y)?x:y);

瞬間由四行變成一行。

ps.這我之前就有學過,可是常常會忘記捏~~

[+/-] 繼續閱讀...

2009年3月19日 星期四

BCB - EZCam

在BCB裡面要存取Camera有幾種方式:
1.採用 Video For Windows (VFW)方式,這在李遠坤老師的部落格有很詳盡的介紹,不過這元件有點舊就是了。
2.採用 DSpack,這是Windows底下新的 SDK,沒用過,要用請自己上網找資料囉
3.OpenCV,不過我在BCB上一直搞不定,所以最後只好放棄。

然後是我在K.Top上找到有人分享的VCL原件 -- EZCam

用法很簡單,只要在From裡面拉一個EzCapCamera元件,然後放置以下的一行程式碼,畫面就出來啦:
 EzCapCamera1->CameraDisplay();

其他的功能只要看他原始碼的Header檔,簡單明瞭。
void __fastcall CameraDisconnect();  //攝影機離線
void __fastcall CameraClose();  //關閉攝影機畫面
void __fastcall VideoSourceDlg();  //攝影機Source對話窗
void __fastcall VideoFormatDlg();  //攝影機Format對話窗
void __fastcall VideoCompressDlg();  //攝影機壓縮方式對話窗
void __fastcall CapAVI(String);  //擷取AVI檔案
void __fastcall CapBmpPic(String);  //擷取BMP圖片
void __fastcall CapJpgPic(String);  //擷取JPG圖片
void __fastcall CapBitmapFrame(Graphics::TBitmap*);  //暫存於TBitmap中

[+/-] 繼續閱讀...

BCB - YbCommDevice

因為有使用到RS-232,所以就在網路上隨便找
找著找著就找到了一個人家寫好的原件
Victor 串口 VCL 控件
至於使用方法的話,就參考檔案裡面的範例吧~
如果說程式碼內的註解是亂碼+簡體看不慣的話,
可以用Firefox開啟,搭配新同文堂,就可以很順利的看懂啦!

[+/-] 繼續閱讀...

2009年3月16日 星期一

BCB - 開啟文字檔

以前寫C語言的時候,開關檔會用fopen(), fclose
再加上fflush()及時寫入檔案中
但是在BCB有簡單的做法,可以用Memo元件,也可以使用TStringList唷!

先講開檔:
 TStringList *sl=new TStringList;
 sl->LoadFromFile("temp.txt");
 for(int i=0; iCount; i+=2)
  Edit[i]->Text=sl->Strings[i];

 delete sl;
真是簡單到一個爆炸

然後講存檔:
 TStringList *sl=new TStringList;
 sl->Add(Edit1->Text);
 sl->Add(Edit2->Text);
 sl->SaveToFile("temp.txt");
 delete sl;
結論就是這麼簡單呀~

最後加碼講一下TStringList的字串切割好了
String Str_temp = "你的阿里阿雜的文字,可能是用逗號分隔";
TStringList *StrLst1= new TStringList();
StrLst1->Delimiter=',' ;         //你的分隔的符號
StrLst1->DelimitedText = Str_temp;    //要分割的字符串
String Str1= StrLst1->Strings[0] ;    //等於"你的阿里阿雜的文字"
String Str2= StrLst1->Strings[1] ;    //等於"可能是用逗號分隔"

[+/-] 繼續閱讀...

2009年3月13日 星期五

BCB - 將文字轉為16x16的點陣字

因為某些需要,得將文字以16x16的點陣圖輸出,所以就到網路上四處搜尋
最後讓我找到了一篇用Delphi寫的 抓Windows字型產生BIT資料的程式範例

可是他是Delphi,我用的卻是BCB
所以就開始解讀Delphi的工作啦~~
最後被我改寫:

//半形字轉為全形字
int Len = Edit->Text.Length();
char buf[255];
ZeroMemory(buf, sizeof(buf));
LCMapString(GetUserDefaultLCID(), LCMAP_FULLWIDTH, Edit->Text.c_str(), Len, buf, sizeof(buf));
AnsiString Zen = AnsiString(buf);

//將字串轉換成16x16的點陣圖
//本來用TImage,可是會漏字,所以改用TBitmap
Graphics::TBitmap *ImageText = new Graphics::TBitmap();
ImageText->Canvas->Font->Name = "細明體";
ImageText->Canvas->Font->Size = 12;
ImageText->Width = ImageText->Canvas->TextWidth(Zen.c_str());
ImageText->Height = ImageText->Canvas->TextHeight(Zen.c_str());
ImageText->Canvas->TextOut(0, 0, Zen.c_str());

int i, j, k;
COLORREF color;
int R_byte;
//每次跳過一個字的寬度
for(j=0; j>Width; j+=16)
{
 unsigned char word[32];
 int l=0;

 //某字的高度
 for(i=0; iHeight; i++)
 {
  byte a = 0;
  byte b = 0x80;
  //某字的寬度
  for(k=0; k<16; k++)
  {
   //判斷該像素值
   color = ImageText->Canvas->Pixels[j+k][i];
   R_byte = GetBValue(color);
   if(R_byte==0)
    a=a|b;
   b=b>>1;
   if(b==0)
   {
    word[l] = char(a);
    b=0x80;
    a=0;
    l++;
   }
  }
  if(b!=0x80)
  {
   word[l] = char(a);
   l++;
  }
 }
}

其實中間判斷像素值的地方我看不太懂,有沒有人可以幫我解釋一下阿?
最後那個word[32]就是所謂的點陣字了

神奇的是:一定要用"細明體",而且字體大小要等於"12"才會剛好16x16。

[+/-] 繼續閱讀...

2009年3月11日 星期三

BCB - Double Buffered

寫程式經常在畫面重新繪製時,會出現閃爍的狀況
這時候就需要 Double Buffered 的機制來防止這樣子的閃爍。

在BCB底下我找到了兩種方法:
1. 先暫存現在的畫面,然後在暫存的記憶體空間畫上新的畫面,再貼回去顯示的畫面上。
 使用方式可以參考這一篇文章 Displaying your bitmaps quickly

不過我用了之後,好像沒啥效果,所以又找到了第二種方法:
在Panel或Form上設置DoubleBuffered的屬性為true即可,簡單又有效。

Panel->DoubleBuffered = true;

Form->DoubleBuffered = true;

另外要播放聲音的話,很簡單,像下面那樣就可以啦。
#include
sndPlaySound(path_file,SND_ASYNC);

[+/-] 繼續閱讀...

2009年2月25日 星期三

三個月

早上老婆大人告知我說今天應該是滿三個月了
所以就是說可以公告給大家知道啦~~

就是我快要當爹啦

其實當初會想要離開小英回台中,就是這個關係啦。

[+/-] 繼續閱讀...

2009年2月6日 星期五

裁員

說實在的,這兩天一直在寫著HelloWorld.cpp
可是感覺就很不踏實~
每次都很好奇到底老闆說的"引擎"是啥鬼
然後也想要看一下Adi目前做的東西的程式碼,但是卻被說不准給我看~

下午五點鐘,老大要我去會議室跟他聊天一下
我就覺得有點詭異...
然後就跟我說:
"我不知道景氣會糟到這樣,連股東那邊的資金都有點問題,
依照我來看,你的程式設計要跟上其他人還需要2-3個月,對我們來說太久了,
而且Linux部分目前我們公司沒有發展的計畫,所以只能跟你說抱歉囉~"

所以,我要了一張"非自願離職單",然後就失去了我的工作

離開黑洞我不覺得可惜,
可惜的是為了這個洞讓我離開了原本做的很開心的小英,

虧這所謂的"技術長"之前還跟我抱怨別人的"誠信"
我想他也從此失去了他的誠信,
也讓整間公司的人都對他失去了信心...

[+/-] 繼續閱讀...

2009年2月4日 星期三

Hello World - 我在黑洞的第一支程式

因為第一次接觸WinCE的東東,所以不是很熟,在此紀錄一下我的第一支程式
也是大名鼎鼎的"Hello World"

首先當然是打開 Visio Studio 2008 (啥版本應該都ok吧 @@a)
接著就"檔案"->"新增"->"專案"
選取"智慧型裝置"->"Win32智慧型裝置專案"
輸入名稱後,確定即可

然後會看到這個畫面,按"下一步"

因為做的是PPC,所以要新增"Pocket PC 2003",繼續下一步

基本上這樣就"完成"啦

然後找到程式碼內 "// TODO: 在此加入任何繪圖程式碼..."

我輸入了:
RECT rect;
GetClientRect(hWnd, &rect);
DrawText (hdc, TEXT("Hellow World!"), -1, &rect,
DT_CENTER | DT_VCENTER | DT_SINGLELINE);


然後按下"Debug",會先看到一支PDA模擬器,然後再過一下下,就會出現我的HelloWorld程式啦~

[+/-] 繼續閱讀...

2009年2月3日 星期二

多點觸控

由於最近愛瘋炒起了這個話題,加上在新的007電影裡面看到了相關的內容,所以就隨便分享一下囉~


首先是新聞:蘋果取得iPhone觸控螢幕專利 其他業者挫著等?

iPhone用強勢的手法,試圖要壟斷所有跟多點觸控的各種技術,這其實就是建一座高牆,要讓他的對手都無法跨越,對手唯一可以做的,大概就是花錢買專利授權啦~

之前工作也有遇到類似的問題,所以就會去搜尋一下Linux底下的解決方案
例如 MPX:the Multi-Pointer X 為的就是要在Linux的核心中,原生的支援多點觸控,希望他們不會被apple告就好~

另外一樣是在Linux底下,如果筆電使用的是Synaptics TouchPad的話,那就可以參考IBM的教學文章,達成辨識出多點下壓的事件,缺點是他只能辨識出目前在觸控板上的"手指頭數量"與"其中一隻手指頭的座標",這隻手指頭通常是最後押上去的那一隻。

在硬體廠商方面,由於義發與新思國際觸控板專利交互授權大和解,所以基本上在硬體上只要是向這兩家公司購買的,應該都是不會碰觸到法律的問題。

現下就要看看軟體發展方面,是不是也可以擁有如此大的發展空間了~

[+/-] 繼續閱讀...

2008年12月23日 星期二

掃地阿桑

話說公司有個掃地阿桑,他每天很早就到公司掃地和拖地
以前還在11樓的時候,通常我是8點到公司,他大概已經掃一半了
後來搬到7樓,阿桑都會在下午的時候到樓下掃地和拖地

感覺比較奇特的是,有時候去公司附近的7-11,
會看到阿桑就坐在7-11門口的椅子上發呆
還挺好奇他在發呆的時候,心理在想些什麼耶~

最後還是要謝謝阿桑,每天幫我們掃地,
讓我們的地板一直都是保持的很乾淨。

[+/-] 繼續閱讀...