發表文章

目前顯示的是 2009的文章

Windows Mobile 6.5 Gestures (一)

圖片
在Windows Mobile 6.5中有提供了兩個新的功能,一個是Widgets,另外就是Gestures API了,今天就來測試看看Gestures的功能。由於Gestures是WM 6.5才有的功能,所以必須要有WM 6.5的模擬器來做測試,如果還沒有安裝過的話,可以到下面位置下載、安裝,請切記,要先安裝Windows Mobile 6 SDK,之後再安裝Windows Mobile 6.5 Developer Tool Kit,順序可不能顛倒喔。 Windows Mobile 6 Professional and Standard Software Development Kits Refresh Windows Mobile 6.5 Developer Tool Kit 接下來,下面是一些有關Gestures的相關參考資料 小歐的這篇-[Windows Mobile]Gestures API 擷取使用者的手勢 Windows Mobile Managed Gestures Sample 這邊可以下載到managed code需要的dll以及相關的sample,裡面也有兩個web cast,記得要看 How Do I: Use Windows Mobiles 6.5 Gestures in Managed Code? MSDN-Using Gestures in Windows Mobile 6.5 How to use the MSDN managed code gesture wrapper in a Windows Mobile 6.5 device project 在一些使用情境中,會有向右或是向左滑動就能夠切換頁面的功能,在以往WM6/6.1的時候,要做到這樣的功能,第一個遇到的問題就是必須要自行去辨識手勢的動作,必須要去掛hook,攔截滑鼠的點擊位置、放開的位置,之後去判斷方向等等,要做的事情滿多的,不是件簡單的事;而現在有了Gestures API之後,像這樣的功能做起來就方便的多了,接下來就來看看今天測試的程式碼了;首先要先加入Gestures dll的參考,加入後會多了像是下圖的name space可以使用 接下來是設計畫面,筆者這邊是用了3個panel來模擬切換畫面的動作,實際在執行的時候會分別去移動panel的位

VS2003呼叫VS2005的COM DLL

圖片
在.net的環境寫作程式預設就提供了相當多的類別可供使用,寫作程式上也變的相當的方便,但有時候會遇到舊系統的需求新增,或是必須要撰寫DLL(組件)來讓其他使用者做使用的情形;而在這樣的情況,通常會撰寫類別庫,也就是產生出DLL的檔案來供其他人方便使用。而在使用.Net DLL時,在相同版本的.net framework也很方便,只要用加入參考的方式將該DLL加入參考後,就可以開始使用相關的功能;但是在VS2003與VS2005之間互通時卻無法使用加入參考的方式去做,又或者當我們必須要將DLL提供給網頁、VB6這樣的開發環境時,該怎麼辦呢?這篇主要說明一下在VS2003的環境(.net framework 1.1)要怎麼樣去使用VS2005(.net framework 2.0)的COM DLL。 在進入主題之前,這邊先說明一下當要將DLL提供給網頁(ASP)或是VB6使用時應該要怎麼做;在後續同樣的也必須要經過這些步驟才能順利的讓VS2003使用相關的DLL。 首先,要開放給像是VB6這樣的程式使用時,必須要將DLL開放COM介面,讓其他的程式透過COM介面來呼叫,而要怎麼實作呢?請參考Will保哥的文章,相當的清楚,位置再下面這邊 http://blog.miniasp.com/post/2008/07/How-to-write-COM-component-using-NET.aspx 這邊補充一個部分,要將.net組件加入到GAC中時,必須要簽署組件,也就是設定強式名稱(Strong Name),不然會加不進去,簽署的位置會像下圖這樣 好,那麼參考完保哥的文章後,相信大家都可以實作出COM DLL了,接下來就是如何在VS2003中去使用了。 在將相關的DLL安裝到系統上之後,開啟VS2003,選擇加入參考之後,在選單中可以看到我們註冊到系統中的DLL,但是選取後卻會得到一個無情的錯誤 沒關係,沒辦法從IDE加入,還有CreateObject可以使用,所以用了像下面這樣的方式 Dim A As Object = CreateObject("RFTagSDKs.RD1623") 結果卻得到了一個無法產生ActiveX的錯誤訊息,怎麼會這樣呢,主要就是因為.net framework版本的關係;那要怎麼去解決呢?可以參考下面這篇的方式 http:/

Chinese SMS 在英文ROM上的相關問題 (Kaiser,TyTn2)

圖片
之前對於WM6.5這部分的測試大多是利用模擬器來玩,想說要等官方(HTC)出WM6.5的ROM之後,再來更新;不過等著等著,實在是等的有點煩了(不知道到底會不會出啊~),於是就到xda閒逛(對WM這部分有興趣的 xda forums 一定要去看看),找到了一個WM6.5英文版的ROM,滿喜歡這介面,而且想要在實機上來跑跑看WM6.5,於是乎,就鼓起勇氣給他刷機下去;我刷的ROM是 這個版本 目前是到4.0;至於怎麼刷機呢?這個就請自行參考xda上的說明了,我看的是 這邊 ,for kaiser的,不同機型請自行參考其他相關資料了,也請記得刷機有一定的風險,請三思,並且詳讀說明喔。 刷完了之後,介面看起來的爽度就是不一樣,抓了下面幾張圖,是首頁以及天氣、設定的畫面 是不是還不錯呢?接下來由於刷的是英文的ROM,接下來就該面對一下痛苦的部分了;刷完機在介面上並不是所有中文字都是無法顯示,大多中文字還是可以顯示出來,不過這於事無補..因為..沒有中文輸入法,真糟,不過幸好在 小熊工作室的網站 找到了相關的解決方式,可以將中文輸入法安裝到英文的ROM裡面,之後安裝 sbp keyboard 就有中文輸入可以用了,一切使用上也沒什麼大問題,直到發出中文簡訊給其他人的時候,在我這邊輸入的中文簡訊都是正常的,向是下面這樣 但是接收端收到的卻全部都是"???"這樣的東西,怎麼會這樣哩..orz 直覺是編碼的問題,但一時之間卻也不知道該怎麼處理,後來在 xda的這篇討論 看到了相同的問題,找了一下相關設定後,設定一下,簡訊發送的問題就解決了,原來是要把"需要時使用unicode"的項目給勾選起來,下面抓了幾張圖,有同樣問題的朋友可以參考看看,首先進入到閱讀簡訊的介面後,進入設定頁面 之後找到Option 點選Option之後,會看到如下的設定畫面,接下來要點選*SMS/MMS 之後將"Use Unicode when necesaary"的項目勾選起來就可以了

[WM]利用Microsoft.Drawing擴充Graphics & 繪製縮圖 Part2

圖片
在上一篇 [WM]利用Microsoft.Drawing擴充Graphics & 繪製縮圖 當中有提到可以利用Microsoft.Drawing的命名空間下去繪製縮圖,而點了縮圖之後會叫出第二個Form來顯示較大的圖形,但顯示較大的圖形時,也只有一個等級;能不能再放大來看呢,今天就來測試看看這個部分。 首先,在Mobile 6.5的作業系統當中,在首頁可以看到圖片的瀏覽介面,像是下圖這樣 點選進入之後,就可以看到瀏覽的介面,選擇Zoom之後,會看到有個可以放大圖片的介面 今天就試做一個跟這個類似的瀏覽方式;在看程式碼之前,先說明一下大概實作的方向;筆者這邊背景放了一個較大的Picturebox,是顯示大圖用的,而在做放大的功能時,也是用偷懶的方式,設定picturebox的sizemode屬性為自動縮放;另外用一個panel來放置顯示縮圖的picturebox以及放大縮小的按鈕,在縮圖發生mousemove事件時,第一個動作是在縮圖上繪製紅色方框,之後移動下方的picturebox來模擬這樣的效果,那麼接下來就來看看程式碼的部分。 Imports Microsoft.Drawing Public Class Form2 ''暫存檔案位置 Private _filePath As String Dim img As IImage Dim imgThumb As IImage = Nothing ''繪製縮圖上面方框的pen Dim rectPen As New Pen(Color.Red, 2) Dim RectWidth As Integer = 30 Dim RectHeight As Integer = 30 ''紀錄座標相關 Dim sX, sY As Integer ''來源位置 Dim dX, dY As Integer ''變動位置 Dim rX, rY As Integer ''實際繪製位置 ''儲存原始圖檔 Dim tmpBmp As Bitmap ''儲存放大級數 Dim

[WM]利用Microsoft.Drawing擴充Graphics & 製作自己的"option" form

圖片
這篇接著繼續說明Microsoft.Control.dll的功能,同樣的,如果看官還不知道要怎麼加入的話,可以參考之前的 [WM]利用Microsoft.Drawing擴充Graphics & 製作我的按鈕 這篇文章。 首先今天會使用到的是Graphics.DrawAlpha這個功能,Graphics.DrawAlpha可以繪製半透明的效果,例如下面的程式碼 Dim gOff As Graphics = Graphics.FromImage(_bmpOff) ''清除原先的圖形 gOff.Clear(Color.Black) ''繪圖動作 ''繪製具透明度的背景 e.Graphics.DrawAlpha(_bmpOff, _Opacity, 0, 0) 其中_bmpOff是一個與Form同樣大小的bitamp,取得bitmap的Graphics之後,會先用黑色去清除整個bitmap;而為什麼是黑色?不是白色、藍色...這邊到沒有限定要用什麼顏色,只是黑色套用半透明後會有感覺像"lightbox"的效果就是了。接下來DrawAlpha的第一個參數是要繪製的圖形,第二個是透明度,255是完全不透明,0則是完全透明,第三、第四個參數就是要繪製的位置了。用這樣就可以簡單的繪製出半透明的效果;有一個部分要特別注意,如果繪製時要"透過去",看到下一層的東西,那麼就要複寫掉OnPaintBackground的事件,讓背景繪製不要發生,不然就會變成"一張有透明效果的圖,畫在白色(背景色)上"。 接下來就來看看今天測試的程式碼,筆者這邊是繼承Form的類別,來做一個可以設定透明度的Form就姑且稱做myForm吧(myPhone..?),之後在myForm上面放了3個myButton來做選擇的功能,選擇後會自行把Form關閉,並且將相關的資訊儲存在property中,程式碼會像下面這樣 Imports Microsoft.Drawing Public Class myForm Inherits Windows.Forms.Form Private _bmpOff As Bit

[WM]利用Microsoft.Drawing擴充Graphics & 繪製縮圖

圖片
這篇延續上一篇提到的,繼續利用擴充的Graphics類別所提供的新功能來做應用;在使用的時候也是要加入Microsoft.Controls的參考,如果不清楚如何加入的話請參考上一篇 [WM]利用Microsoft.Drawing擴充Graphics & 製作我的按鈕 首先,今天會使用到的是IImagingFactory以及IImage這兩個東東,首先要從檔案把Image抓出來,所以會利用像下面的程式碼來傳回IImage ''' ''' 取得影像相關動作 ''' ''' ''' ''' Private Function GetImage(ByVal fileName As String) As IImage Dim imgFactory As IImagingFactory ''建立IImageingFactory imgFactory = ImagingFactory.GetImaging ''建立IImage Dim image As IImage = Nothing imgFactory.CreateImageFromFile(fileName, image) Return image End Function 取回之後就可以呼叫IImage的GetThumbnail來取得縮圖,例如 img.GetThumbnail(48, 48, imgThumb) 好,大製了解動作之後就來看看這次測試的程式碼,筆者這邊是建立兩個form,form1會將縮圖顯示在畫面上,而點選縮圖之後會呼叫Form2來顯示比較大的圖形,Form1程式碼會像下面這樣 Imports Microsoft.Drawing Imports System.IO Public Class Form1 ''儲存圖檔的位置 Dim strImageDir As String = "\Storage card\"

[WM]利用Microsoft.Drawing擴充Graphics & 製作我的按鈕

圖片
在compact framework的開發環境中,預設的環境對於繪圖部分的資源是比較少的,也沒有"透明色"這東西可以用,所以當需要製作漂漂的畫面時比就比較費力了。 而在最近,微軟的網站上也推出了UI Framework for .Net Compact Framework 3.5,今天初步的來測試看看有了UI Frameowrk之後多了哪些資源可以利用,首先UI Framework的參考網址是下面這邊 http://code.msdn.microsoft.com/uiframework/Release/ProjectReleases.aspx?ReleaseId=2315 接下來進入到下載頁面中可以下載相關的範例程式碼(程式碼是以C#撰寫),像下面這樣 可以先把相關的範例程式碼下載回來,慢慢消化,這邊筆者會先利用ListViewDemo相關的程式碼;開啟範例程式碼之後,在方案總管這邊會看到像下面的相關專案 筆者這邊只會用到Microsoft.Controls相關的東西,所以要先建置一下這個專案;建置完成之後就會得到MMobile.Controls.dll,像是下圖這樣 這就是要加入參考使用的dll了;原先ListViewDemo的專案就可以先關閉,之後建立一個新的智慧型裝置的專案(記得compact framework要選3.5喔),並且將剛剛產生的dll加入參考,加入參考之後在方案總管中可以看到新加入的參考,應該會像下面這樣 好,準備工作都完成了,接下來就來測試看看吧;首先要先引入命名空間 Imports Microsoft.Drawing 引入的命名空間之後在Graphics類別中就多了很多擴充方法可以利用,例如 ''繪製具透明度的image ''e.Graphics.DrawAlpha() ''繪製圓角矩形 ''e.Graphics.DrawGradientRoundedRectangle ''繪製具透明度的圓角矩形 ''e.Graphics.DrawGradientRoundedRectangleAlpha 那麼就先來測試看看DrawGradient

[WM]建立一個可以自我更新的應用程式

圖片
參考資料: Creating Self-Updating Applications With the .NET Compact Framework 在這篇,筆者參考資料來源中所提的相關資料來測試一下自動更新應用程式的功能;那麼,要怎麼去做這樣的功能呢? 以本篇來說,作法是在Server端建立一個Web Service,提供給Device(Client)端呼叫,Device端提交目前自己的版本號碼給Web Service,之後Web Service會回應是否有新版本可以提供;而有新版本的時候,Device端再進行下載、安裝的動作;接下來先來看看Service端的動作 首先要先新增一個Web Service的專案,預設專案建立完成後,會產生Service.asmx的檔案,這個檔案就是我們要撰寫相關程式碼的地方,這邊筆者是利用XML檔案來作版本的比較,所以準備了一個XML檔案,像是下面這樣 其中CurrentVersion是表示目前Server上的版本號,name這邊放的是產品名稱;而Service的程式碼也很簡單只有提供一個方法可以叫用,程式碼會長的話像下面這樣 Imports System.Web Imports System.Web.Services Imports System.Web.Services.Protocols Imports System.IO Imports System.Xml _ _ _ Public Class Service Inherits System.Web.Services.WebService Public Class ServiceResult Public IsNewVersionAvailable As Boolean Public CurrentVersion As Integer Public UpdateLink As String End Class _ Public Function CheckProduct(ByVal ProductName As String, ByVal Version As Integer) As ServiceResult Dim result As New Service

[WM]gif 的動畫不動怎麼辦 & 繪製進度列

圖片
參考資料: Creating a Microsoft .NET Compact Framework-based Animation Control 在以往開發應用程式時,有時候會用到gif圖檔來做簡單的動畫效果,但是同樣的gif圖檔在裝置上卻是不動如山,這..這..這該怎麼辦.. 首先要先說明一下,能夠讓裝置播放gif動畫嗎?答案是不行(路人A:來亂的阿,不行?那你接下來想講什麼)。只能夠去模擬出那樣的效果;如同參考的資料來源中所說,gif動畫的圖檔如果利用gif editor去開啟的話,會發現它是連續的影格(frame)組合起來的,接下來要說明的也是這樣的方式。 首先我們要先準備一張長長的圖檔,裡面就是所有的frame了,例如這邊筆者做了下面這樣的圖 每個frame是72px,所以其實要模擬出動畫的效果,就是一格一格把它切出來,之後定時更新到畫面上。 接下來就來看看程式碼的部分,首先要先加入一個"元件"到方案當中,而元件的程式碼會像下面這樣 ''reference:http://msdn.microsoft.com/en-us/library/aa446483.aspx Imports System.Drawing Public Class AnimationCtl Inherits System.Windows.Forms.Control ''儲存要繪製的圖片 Private _bmp As Bitmap ''儲存每個frame(畫格)的寬度 Private _frameWidth As Integer ''儲存每個frame(畫格)的高度 Private _frameHeight As Integer ''繪製圖形用 Private _gGraphic As Graphics ''定時重新繪製畫面的Timer Private _drawTimer As Timer ''動畫要輪播幾次 Private _intLoopTimes As Integer ''目前動畫已經輪播過的次數 Private _

Windows Embedded專區隆重開張

Windows Embedded專區 隆重開張了 有在使用(開發)的朋友,開發問題討論、相關心得分享,請多多利用了~

[WM]就是那道光,我要自己控制我的背光

圖片
在WM裝置中,大多數的電力來源都是電池,所以一些省電的動作也會產生,例如說多久沒有操作裝置的話,系統會關閉LCD的背光以節省電力,使用AC電源的時候,LCD的背光應該多亮,使用電池的時候背光應該多亮等等。 那麼相關的需求就來了,一些比較常見的狀況(需求)下約是下面這些 我的程式要一直跑,無論如何我不想讓系統進入待機的狀態,可不可以? 一段時間沒有動作的話,系統會自動關閉背光,但是我在放電影啊,拜託不要關 能不能讓我的程式去控制關閉背光的時間? 能不能讓我控制背光的級距(Level)? 今天就針對這幾個部分來做測試,首先是怎麼不讓系統進入待機呢?為什麼不要進入待機的狀態,最明顯的例子是導航系統,如果導航系統導到一半,那不就.. 要做到這個功能不困難,只要呼叫一個SystemIdleTimerReset就行了,宣告的方式如下 ''reference http://msdn.microsoft.com/en-us/library/aa930260.aspx _ Public Sub SystemIdleTimerReset() End Sub 使用的時候也是直接呼叫就可以了 SystemIdleTimerReset() 這樣就可以讓系統不進入待機了;這個時候程式人的潔癖又來了,那我要多久呼叫一次SystemIdleTimerReset?每秒?每分鐘? 那麼就要知道多久會進入待機了,這個值也是放在登錄檔中,利用登錄編輯程式(remote tool),可以在這個位置找到 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Power\BattPowerOff 知道放置的位置之後,就可以利用程式把這個值給讀出來了,像是下面的方式 ''' ''' 取得系統進入待機前等待的秒數 ''' reference http://support.microsoft.com/default.aspx/kb/180898 ''' ''' ''' Private Function GetSuspendTimeOutS

Widgets in Windows Mobile 6.5 - 簡介

圖片
Note:本篇是基於下列MSDN以及Windows Mobile Team blog參考資料所做, 如有錯誤或補充的部分歡迎大家提出;文中所列相關程式碼是基於參考資料中所列,希望有助於大家能夠初步的認識Widgets. 參考資料: Developing Widgets for Windows Mobile 6.5 http://msdn.microsoft.com/en-us/library/dd721906.aspx Getting Started with Widgets on Windows Mobile 6.5 http://blogs.msdn.com/windowsmobile/archive/2009/06/04/getting-started-with-widgets-on-windows-mobile-6-5.aspx Widgets 顧名思義,他是一個小工具,在Windows Mobile 6.5所中新增的功能;Widgets也是依附在瀏覽器上面執行的,Widgets能夠在Mobile系統上順利的運作這要歸功於Internet Explorer Mobile 6,沒記錯的話Internet Explorer Mobile 6是基於IE6的核心下去修改、實作的,所以Internet Explorer Mobile 6包含了更多的功能以及更好的使用者經驗,下面這篇文章有一些有關Internet Explorer Mobile 6的相關資料,有興趣的朋友可以參考看看 Internet Explorer Mobile 6 那麼Widgets在Windows Mobile上是扮演什麼樣的角色呢?首先有幾個重點部分 Widgets是以HTML做為介面(外觀)的主體 Widgets支援使用CSS樣式來豐富介面(外觀) 是以JavaScript做為撰寫的語言,也支援了AJAX的功能 所以,對於以往有過Web開發經驗的程式開發人員,都能夠很快的上手Widgets的開發。有個部分要特別提一下,對於以往在Mobile上的Web服務或是應用程式Widgets的優點是什麼呢?Widgets主要的優勢就是上面提到的幾點了,介面需要用到圖片、CSS設定等等,都可以事先放在Client端(Mobile裝置),不需要全部都從網路下載,那麼相信可以減少可觀的封包數量,不僅僅加快速