發表文章

目前顯示的是 8月, 2009的文章

[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專區 隆重開張了 有在使用(開發)的朋友,開發問題討論、相關心得分享,請多多利用了~